https://qiita.com/ynwa0826/items/66ea83d4b851df4ce37d
https://webrtchacks.com/zoom-avoids-using-webrtc/
この辺を見て、Zoomのアーキテクチャを調べてみた。まだ途中。
通信概要
blob:https://zoom.us/49180403-9b2e-4fa5-bd85-9766f486f6c7:1 ready to start!
blob:https://zoom.us/454d0bbf-202e-4993-b4bf-e9098edd8de9:1 ready to start!
blob:https://zoom.us/05fc8168-cdef-490f-8c36-88e0c04ffb6d:1 ready to dec video!
blob:https://zoom.us/0847d4b6-0d6f-488f-a64f-709fb674afdd:1 ready to dec video!
blob:https://zoom.us/454d0bbf-202e-4993-b4bf-e9098edd8de9:1 JsAudioDec.js receive startMedia
blob:https://zoom.us/49180403-9b2e-4fa5-bd85-9766f486f6c7:1 JsAudioDec.js receive startMedia
blob:https://zoom.us/49180403-9b2e-4fa5-bd85-9766f486f6c7:1 Open_Audio_WebSocket_Connect
blob:https://zoom.us/49180403-9b2e-4fa5-bd85-9766f486f6c7:1 Open_Audio_WebSocket_Connect
blob:https://zoom.us/454d0bbf-202e-4993-b4bf-e9098edd8de9:1 Open_Audio_WebSocket_Connect
blob:https://zoom.us/454d0bbf-202e-4993-b4bf-e9098edd8de9:1 Open_Audio_WebSocket_Connect
blob:https://zoom.us/50d63bcc-9fd8-46fe-836b-8837b3a6dadc:1 Open_Sharing_WebSocket_Connect
blob:https://zoom.us/f30fc6c3-9411-444f-a40f-e7618219ce64:1 Open_Sharing_WebSocket_Connect
blob:https://zoom.us/05fc8168-cdef-490f-8c36-88e0c04ffb6d:1 Open_Video_WebSocket_Connect
blob:https://zoom.us/0847d4b6-0d6f-488f-a64f-709fb674afdd:1 Open_Video_WebSocket_Connect
blob:https://zoom.us/f30fc6c3-9411-444f-a40f-e7618219ce64:1 sharing_websocket_on_close
blob:https://zoom.us/05fc8168-cdef-490f-8c36-88e0c04ffb6d:1 video_websocket_on_close
blob:https://zoom.us/0847d4b6-0d6f-488f-a64f-709fb674afdd:1 video_websocket_on_close
blob:https://zoom.us/50d63bcc-9fd8-46fe-836b-8837b3a6dadc:1 sharing_websocket_on_close
WebRTCは使っていないことを改めて確認。
WebSocketは
- Videoで2本
- 画面共有で2本
- 音声で4本
最低2本必要なのは送受信それぞれで別のWebSocketを使っているからだろうと想定するのだけど、何故音声だけ4本?
プロトコル調査
Request URL: wss://zoomtyn70rwg.ty.zoom.us/wc/media/XXXXXXXXXXXX?type=a&cid=FF4D2EFA-A8F2-7F18-9CF5-YYYYYYYYYYYYYYY&mode=5
Request Method: GET
Status Code: 101 Switching Protocols
Connection: Upgrade
Sec-WebSocket-Accept: XXXXXXXXXXXXXXXXX
Upgrade: websocket
Accept-Encoding: gzip, deflate, br
Accept-Language: ja,en-US;q=0.9,en;q=0.8
Cache-Control: no-cache
Connection: Upgrade
Host: zoomtyn70rwg.ty.zoom.us
Origin: https://zoom.us
Pragma: no-cache
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Key: YYYYYYYYYYYYYYYYY
Sec-WebSocket-Version: 13
Upgrade: websocket
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
type: a
cid: FF4D2EFA-A8F2-7F18-9CF5-YYYYYYYYYYYYY
mode: 5
modeが1/2/5とあり、
画面共有が1/2
音声が2/5それぞれ2本ずつ
Videoが2/5それぞれ1本ずつ
modeはどう考えても内部通信モードを指していると考えられるとの、これ以外にそれほど変化がないことから
つまり音声だけは送受信に2本どうしても必要だったからこうなっている?
補足
https://qiita.com/yusuke84/items/428affe75affa16f104d
chrome://webrtc-internalsも一応見えるが、media系の情報は出てこないので、Iceとかその辺の制御系だけ利用し、それ以外は独自なんだろう。