diff --git a/code/wbstream_info.py b/code/wbstream_info.py index bb32507..11bb629 100755 --- a/code/wbstream_info.py +++ b/code/wbstream_info.py @@ -5,20 +5,20 @@ import requests from livekit import rtc API_BASE = "https://stream.wb.ru" -WS_URL = "wss://wbstream01-el.wb.ru:7880" +WS_URL = "wss://rtc-el-01.wb.ru" def _get_room_token(room_id: str, display_name: str) -> tuple[str, str]: headers = {"User-Agent": "Mozilla/5.0 (Linux x86_64)", "Content-Type": "application/json"} - + print("[1/3] API Initialization...") reg_req = requests.post(f"{API_BASE}/auth/api/v1/auth/user/guest-register", json={"displayName": display_name, "device": {"deviceName": "Linux", "deviceType": "PARTICIPANT_DEVICE_TYPE_WEB_DESKTOP"}}, headers=headers) reg_req.raise_for_status() auth_data = reg_req.json() print(" :P Guest registered") print(json.dumps(auth_data, indent=2)) - + headers["Authorization"] = f"Bearer {auth_data['accessToken']}" - + if not room_id: print("\n[2/3] Room Preparation...") room_req = requests.post(f"{API_BASE}/api-room/api/v2/room", json={"roomType": "ROOM_TYPE_ALL_ON_SCREEN", "roomPrivacy": "ROOM_PRIVACY_FREE"}, headers=headers) @@ -27,17 +27,16 @@ def _get_room_token(room_id: str, display_name: str) -> tuple[str, str]: print(" :P Room created") print(json.dumps(room_data, indent=2)) room_id = room_data["roomId"] - + print(f"\n[3/3] Fetching LiveKit token...") requests.post(f"{API_BASE}/api-room/api/v1/room/{room_id}/join", json={}, headers=headers).raise_for_status() - tok_req = requests.get(f"{API_BASE}/api-room-manager/api/v1/room/{room_id}/token", params={"deviceType": "PARTICIPANT_DEVICE_TYPE_WEB_DESKTOP", "displayName": display_name}, headers=headers) + tok_req = requests.get(f"{API_BASE}/api-room-manager/v2/room/{room_id}/connection-details", params={"deviceType": "PARTICIPANT_DEVICE_TYPE_WEB_DESKTOP", "displayName": display_name}, headers=headers) tok_req.raise_for_status() token_data = tok_req.json() print(" :P Token received") print(json.dumps(token_data, indent=2)) - - return room_id, token_data["roomToken"] + return room_id, token_data["roomToken"] async def get_wb_info(): print("\n--- WB Stream Info ---") try: diff --git a/code/wbstream_poc_datachannel.py b/code/wbstream_poc_datachannel.py index b4685dc..2850294 100755 --- a/code/wbstream_poc_datachannel.py +++ b/code/wbstream_poc_datachannel.py @@ -15,7 +15,7 @@ except ImportError: logging.getLogger("livekit").setLevel(logging.WARNING) API_BASE = "https://stream.wb.ru" -WS_URL = "wss://wbstream01-el.wb.ru:7880" +WS_URL = "wss://rtc-el-01.wb.ru" TEST_MESSAGES = ["Hello WB Stream!", "Hello world", "X" * 100, "Final test"] def _get_room_token(room_id: str, display_name: str) -> tuple[str, str]: @@ -24,7 +24,7 @@ def _get_room_token(room_id: str, display_name: str) -> tuple[str, str]: "User-Agent": "Mozilla/5.0 (Linux x86_64)", "Content-Type": "application/json" } - + reg_req = requests.post( f"{API_BASE}/auth/api/v1/auth/user/guest-register", json={"displayName": display_name, "device": {"deviceName": "Linux", "deviceType": "PARTICIPANT_DEVICE_TYPE_WEB_DESKTOP"}}, @@ -32,17 +32,16 @@ def _get_room_token(room_id: str, display_name: str) -> tuple[str, str]: ) reg_req.raise_for_status() headers["Authorization"] = f"Bearer {reg_req.json()['accessToken']}" - + if not room_id: room_req = requests.post(f"{API_BASE}/api-room/api/v2/room", json={"roomType": "ROOM_TYPE_ALL_ON_SCREEN", "roomPrivacy": "ROOM_PRIVACY_FREE"}, headers=headers) room_req.raise_for_status() room_id = room_req.json()["roomId"] - + requests.post(f"{API_BASE}/api-room/api/v1/room/{room_id}/join", json={}, headers=headers).raise_for_status() - tok_req = requests.get(f"{API_BASE}/api-room-manager/api/v1/room/{room_id}/token", params={"deviceType": "PARTICIPANT_DEVICE_TYPE_WEB_DESKTOP", "displayName": display_name}, headers=headers) + tok_req = requests.get(f"{API_BASE}/api-room-manager/v2/room/{room_id}/connection-details", params={"deviceType": "PARTICIPANT_DEVICE_TYPE_WEB_DESKTOP", "displayName": display_name}, headers=headers) tok_req.raise_for_status() return room_id, tok_req.json()["roomToken"] - async def run_poc() -> dict: """Runs the complete PoC flow.""" print("\n--- WB Stream PoC ---") diff --git a/code/wbstream_poc_videochannel.py b/code/wbstream_poc_videochannel.py index 1eae686..51b7e6d 100755 --- a/code/wbstream_poc_videochannel.py +++ b/code/wbstream_poc_videochannel.py @@ -41,7 +41,7 @@ def _decode(arr: np.ndarray) -> str | None: except Exception: pass return None - +WS_URL = "wss://rtc-el-01.wb.ru" def _get_room_token(room_id: str, display_name: str) -> tuple[str, str]: headers = {"User-Agent": "Mozilla/5.0 (Linux x86_64)", "Content-Type": "application/json"} @@ -56,7 +56,7 @@ def _get_room_token(room_id: str, display_name: str) -> tuple[str, str]: r.raise_for_status() room_id = r.json()["roomId"] requests.post(f"{API_BASE}/api-room/api/v1/room/{room_id}/join", json={}, headers=headers).raise_for_status() - tok = requests.get(f"{API_BASE}/api-room-manager/api/v1/room/{room_id}/token", + tok = requests.get(f"{API_BASE}/api-room-manager/v2/room/{room_id}/connection-details", params={"deviceType": "PARTICIPANT_DEVICE_TYPE_WEB_DESKTOP", "displayName": display_name}, headers=headers) tok.raise_for_status() return room_id, tok.json()["roomToken"] diff --git a/internal/auth/wbstream/api.go b/internal/auth/wbstream/api.go index f4b4747..b8c2dc0 100644 --- a/internal/auth/wbstream/api.go +++ b/internal/auth/wbstream/api.go @@ -52,6 +52,7 @@ type createRoomResponse struct { type tokenResponse struct { RoomToken string `json:"roomToken"` + ServerURL string `json:"serverUrl"` } func registerGuest(ctx context.Context, displayName string) (string, error) { @@ -157,7 +158,7 @@ func joinRoom(ctx context.Context, accessToken, roomID string) error { } func getToken(ctx context.Context, accessToken, roomID, displayName string) (string, error) { - u := fmt.Sprintf("%s/api-room-manager/api/v1/room/%s/token", apiBase, roomID) + u := fmt.Sprintf("%s/api-room-manager/v2/room/%s/connection-details", apiBase, roomID) req, err := http.NewRequestWithContext(ctx, http.MethodGet, u, nil) if err != nil { return "", fmt.Errorf("create request: %w", err)