mirror of
https://github.com/openlibrecommunity/olcrtc.git
synced 2026-05-30 08:59:43 +00:00
126 lines
5.2 KiB
Python
Executable File
126 lines
5.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
import asyncio
|
|
import json
|
|
import uuid
|
|
from urllib.parse import quote
|
|
|
|
import aiohttp
|
|
|
|
API_BASE = "https://cloud-api.yandex.ru/telemost_front/v2/telemost"
|
|
CONFERENCE_ID = "02789996238784"
|
|
ROOM_URL = f"https://telemost.yandex.ru/j/{CONFERENCE_ID}"
|
|
|
|
|
|
async def get_telemost_info():
|
|
print("\n--- Yandex Telemost Info ---")
|
|
async with aiohttp.ClientSession() as session:
|
|
print(f"[1/3] Fetching connection info...")
|
|
url = f"{API_BASE}/conferences/{quote(ROOM_URL, safe='')}/connection"
|
|
params = {
|
|
"next_gen_media_platform_allowed": "true",
|
|
"display_name": "InfoBot",
|
|
"waiting_room_supported": "true",
|
|
}
|
|
headers = {
|
|
"User-Agent": "Mozilla/5.0 (Linux x86_64)",
|
|
"Client-Instance-Id": str(uuid.uuid4()),
|
|
"X-Telemost-Client-Version": "187.1.0",
|
|
"idempotency-key": str(uuid.uuid4()),
|
|
}
|
|
|
|
try:
|
|
async with session.get(url, params=params, headers=headers) as resp:
|
|
if resp.status != 200:
|
|
print(f" X API Fail: {resp.status}")
|
|
return
|
|
conn_info = await resp.json()
|
|
print(" :P Connection data received")
|
|
print(json.dumps(conn_info, indent=2))
|
|
except Exception as e:
|
|
print(f" X Error: {e}")
|
|
return
|
|
|
|
print(f"\n[2/3] Connecting to signaling...")
|
|
try:
|
|
async with session.ws_connect(
|
|
conn_info["client_configuration"]["media_server_url"]
|
|
) as ws:
|
|
await ws.send_json(
|
|
{
|
|
"uid": str(uuid.uuid4()),
|
|
"hello": {
|
|
"participantMeta": {
|
|
"name": "InfoBot",
|
|
"role": "SPEAKER",
|
|
"sendAudio": False,
|
|
"sendVideo": False,
|
|
},
|
|
"participantAttributes": {
|
|
"name": "InfoBot",
|
|
"role": "SPEAKER",
|
|
},
|
|
"sendAudio": False,
|
|
"sendVideo": False,
|
|
"sendSharing": False,
|
|
"participantId": conn_info["peer_id"],
|
|
"roomId": conn_info["room_id"],
|
|
"serviceName": "telemost",
|
|
"credentials": conn_info["credentials"],
|
|
"capabilitiesOffer": {
|
|
"offerAnswerMode": ["SEPARATE"],
|
|
"initialSubscriberOffer": ["ON_HELLO"],
|
|
"slotsMode": ["FROM_CONTROLLER"],
|
|
"simulcastMode": ["DISABLED"],
|
|
"selfVadStatus": ["FROM_SERVER"],
|
|
"dataChannelSharing": ["TO_RTP"],
|
|
},
|
|
"sdkInfo": {
|
|
"implementation": "python",
|
|
"version": "1.0.0",
|
|
"userAgent": "OlcRTC-InfoBot",
|
|
},
|
|
"sdkInitializationId": str(uuid.uuid4()),
|
|
"disablePublisher": False,
|
|
"disableSubscriber": False,
|
|
},
|
|
}
|
|
)
|
|
print(" :P Signaling established")
|
|
|
|
print("\n[3/3] Collecting media details...")
|
|
end = asyncio.get_event_loop().time() + 8
|
|
while asyncio.get_event_loop().time() < end:
|
|
try:
|
|
m = await asyncio.wait_for(ws.receive(), 1)
|
|
if m.type == aiohttp.WSMsgType.TEXT:
|
|
d = json.loads(m.data)
|
|
uid = d.get("uid")
|
|
print(f" -> Message: {list(d.keys())}")
|
|
if "serverHello" in d:
|
|
print("\n--- Server Hello / Telemetry ---")
|
|
print(json.dumps(d["serverHello"], indent=2))
|
|
elif "subscriberSdpOffer" in d:
|
|
print("\n--- SDP Offer (Codecs & Quality) ---")
|
|
print(d["subscriberSdpOffer"].get("sdp"))
|
|
elif "webrtcIceCandidate" in d:
|
|
print(
|
|
f" -> ICE: {d['webrtcIceCandidate'].get('candidate')}"
|
|
)
|
|
if uid:
|
|
await ws.send_json(
|
|
{"uid": uid, "ack": {"status": {"code": "OK"}}}
|
|
)
|
|
except:
|
|
continue
|
|
except Exception as e:
|
|
print(f" X Signaling Fail: {e}")
|
|
|
|
print("\n--- INFO COLLECTION COMPLETE ---")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
asyncio.run(get_telemost_info())
|
|
except KeyboardInterrupt:
|
|
pass
|