mirror of
https://github.com/openlibrecommunity/olcrtc.git
synced 2026-05-26 07:08:11 +00:00
fix(provider/wbstream): update API endpoints and WebSocket URL
- Switched getToken endpoint to /api-room-manager/v2/room/%s/connection-details - Updated WebSocket URL to wss://rtc-el-01.wb.ru - Updated Python PoC scripts to match new endpoints
This commit is contained in:
@@ -5,20 +5,20 @@ import requests
|
|||||||
from livekit import rtc
|
from livekit import rtc
|
||||||
|
|
||||||
API_BASE = "https://stream.wb.ru"
|
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]:
|
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"}
|
headers = {"User-Agent": "Mozilla/5.0 (Linux x86_64)", "Content-Type": "application/json"}
|
||||||
|
|
||||||
print("[1/3] API Initialization...")
|
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 = 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()
|
reg_req.raise_for_status()
|
||||||
auth_data = reg_req.json()
|
auth_data = reg_req.json()
|
||||||
print(" :P Guest registered")
|
print(" :P Guest registered")
|
||||||
print(json.dumps(auth_data, indent=2))
|
print(json.dumps(auth_data, indent=2))
|
||||||
|
|
||||||
headers["Authorization"] = f"Bearer {auth_data['accessToken']}"
|
headers["Authorization"] = f"Bearer {auth_data['accessToken']}"
|
||||||
|
|
||||||
if not room_id:
|
if not room_id:
|
||||||
print("\n[2/3] Room Preparation...")
|
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)
|
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(" :P Room created")
|
||||||
print(json.dumps(room_data, indent=2))
|
print(json.dumps(room_data, indent=2))
|
||||||
room_id = room_data["roomId"]
|
room_id = room_data["roomId"]
|
||||||
|
|
||||||
print(f"\n[3/3] Fetching LiveKit token...")
|
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()
|
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()
|
tok_req.raise_for_status()
|
||||||
token_data = tok_req.json()
|
token_data = tok_req.json()
|
||||||
print(" :P Token received")
|
print(" :P Token received")
|
||||||
print(json.dumps(token_data, indent=2))
|
print(json.dumps(token_data, indent=2))
|
||||||
|
|
||||||
return room_id, token_data["roomToken"]
|
|
||||||
|
|
||||||
|
return room_id, token_data["roomToken"]
|
||||||
async def get_wb_info():
|
async def get_wb_info():
|
||||||
print("\n--- WB Stream Info ---")
|
print("\n--- WB Stream Info ---")
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ except ImportError:
|
|||||||
logging.getLogger("livekit").setLevel(logging.WARNING)
|
logging.getLogger("livekit").setLevel(logging.WARNING)
|
||||||
|
|
||||||
API_BASE = "https://stream.wb.ru"
|
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"]
|
TEST_MESSAGES = ["Hello WB Stream!", "Hello world", "X" * 100, "Final test"]
|
||||||
|
|
||||||
def _get_room_token(room_id: str, display_name: str) -> tuple[str, str]:
|
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)",
|
"User-Agent": "Mozilla/5.0 (Linux x86_64)",
|
||||||
"Content-Type": "application/json"
|
"Content-Type": "application/json"
|
||||||
}
|
}
|
||||||
|
|
||||||
reg_req = requests.post(
|
reg_req = requests.post(
|
||||||
f"{API_BASE}/auth/api/v1/auth/user/guest-register",
|
f"{API_BASE}/auth/api/v1/auth/user/guest-register",
|
||||||
json={"displayName": display_name, "device": {"deviceName": "Linux", "deviceType": "PARTICIPANT_DEVICE_TYPE_WEB_DESKTOP"}},
|
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()
|
reg_req.raise_for_status()
|
||||||
headers["Authorization"] = f"Bearer {reg_req.json()['accessToken']}"
|
headers["Authorization"] = f"Bearer {reg_req.json()['accessToken']}"
|
||||||
|
|
||||||
if not room_id:
|
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 = 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_req.raise_for_status()
|
||||||
room_id = room_req.json()["roomId"]
|
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()
|
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()
|
tok_req.raise_for_status()
|
||||||
return room_id, tok_req.json()["roomToken"]
|
return room_id, tok_req.json()["roomToken"]
|
||||||
|
|
||||||
async def run_poc() -> dict:
|
async def run_poc() -> dict:
|
||||||
"""Runs the complete PoC flow."""
|
"""Runs the complete PoC flow."""
|
||||||
print("\n--- WB Stream PoC ---")
|
print("\n--- WB Stream PoC ---")
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ def _decode(arr: np.ndarray) -> str | None:
|
|||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
return None
|
return None
|
||||||
|
WS_URL = "wss://rtc-el-01.wb.ru"
|
||||||
|
|
||||||
def _get_room_token(room_id: str, display_name: str) -> tuple[str, str]:
|
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"}
|
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()
|
r.raise_for_status()
|
||||||
room_id = r.json()["roomId"]
|
room_id = r.json()["roomId"]
|
||||||
requests.post(f"{API_BASE}/api-room/api/v1/room/{room_id}/join", json={}, headers=headers).raise_for_status()
|
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)
|
params={"deviceType": "PARTICIPANT_DEVICE_TYPE_WEB_DESKTOP", "displayName": display_name}, headers=headers)
|
||||||
tok.raise_for_status()
|
tok.raise_for_status()
|
||||||
return room_id, tok.json()["roomToken"]
|
return room_id, tok.json()["roomToken"]
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ type createRoomResponse struct {
|
|||||||
|
|
||||||
type tokenResponse struct {
|
type tokenResponse struct {
|
||||||
RoomToken string `json:"roomToken"`
|
RoomToken string `json:"roomToken"`
|
||||||
|
ServerURL string `json:"serverUrl"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerGuest(ctx context.Context, displayName string) (string, error) {
|
func registerGuest(ctx context.Context, displayName string) (string, error) {
|
||||||
@@ -164,7 +165,7 @@ func joinRoom(ctx context.Context, accessToken, roomID string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getToken(ctx context.Context, accessToken, roomID, displayName string) (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)
|
req, err := http.NewRequestWithContext(ctx, http.MethodGet, u, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", fmt.Errorf("create request: %w", err)
|
return "", fmt.Errorf("create request: %w", err)
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ func TestWBStreamAPIHappyPath(t *testing.T) {
|
|||||||
_ = json.NewEncoder(w).Encode(createRoomResponse{RoomID: "room"}) //nolint:goconst,lll // test literal, repetition is intentional
|
_ = json.NewEncoder(w).Encode(createRoomResponse{RoomID: "room"}) //nolint:goconst,lll // test literal, repetition is intentional
|
||||||
case "/api-room/api/v1/room/room/join":
|
case "/api-room/api/v1/room/room/join":
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
case "/api-room-manager/api/v1/room/room/token":
|
case "/api-room-manager/v2/room/room/connection-details":
|
||||||
if r.URL.Query().Get("displayName") != "peer" {
|
if r.URL.Query().Get("displayName") != "peer" {
|
||||||
t.Fatalf("displayName query = %q", r.URL.Query().Get("displayName"))
|
t.Fatalf("displayName query = %q", r.URL.Query().Get("displayName"))
|
||||||
}
|
}
|
||||||
@@ -103,7 +103,7 @@ func TestWBStreamGetRoomToken(t *testing.T) {
|
|||||||
_ = json.NewEncoder(w).Encode(createRoomResponse{RoomID: "created"})
|
_ = json.NewEncoder(w).Encode(createRoomResponse{RoomID: "created"})
|
||||||
case "/api-room/api/v1/room/created/join":
|
case "/api-room/api/v1/room/created/join":
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
case "/api-room-manager/api/v1/room/created/token":
|
case "/api-room-manager/v2/room/created/connection-details":
|
||||||
_ = json.NewEncoder(w).Encode(tokenResponse{RoomToken: "token"})
|
_ = json.NewEncoder(w).Encode(tokenResponse{RoomToken: "token"})
|
||||||
default:
|
default:
|
||||||
http.NotFound(w, r)
|
http.NotFound(w, r)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
wsURL = "wss://wbstream01-el.wb.ru:7880"
|
wsURL = "wss://rtc-el-01.wb.ru"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
Reference in New Issue
Block a user