Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ビデオ通話が繋がる0.2秒で何が起きているのか
Search
Miyamoto Naoyuki
July 15, 2026
Programming
110
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ビデオ通話が繋がる0.2秒で何が起きているのか
MIERUNE BBQ #19 で使用した資料です。
Miyamoto Naoyuki
July 15, 2026
More Decks by Miyamoto Naoyuki
See All by Miyamoto Naoyuki
HTTPに新しいMethod! QUERY RFC10008
supurazako
0
23
MinecraftにP2Pが来るぞ!
supurazako
0
76
あえてPHPでリアルタイム通信をやってみる
supurazako
0
340
標準化っていいな〜JANOGでの学び〜
supurazako
0
78
Other Decks in Programming
See All in Programming
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
3.2k
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
130
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
260
継続モナドとリアクティブプログラミング
yukikurage
3
470
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
500
1B+ /day規模のログを管理する技術
broadleaf
0
130
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
300
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
240
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
370
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
0
2.1k
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
240
初めてのKubernetes 本番運用でハマった話
oku053
0
120
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The Language of Interfaces
destraynor
162
27k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
GraphQLとの向き合い方2022年版
quramy
50
15k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
410
Documentation Writing (for coders)
carmenintech
77
5.4k
Ethics towards AI in product and experience design
skipperchong
2
330
Speed Design
sergeychernyshev
33
1.9k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
460
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Transcript
2026-07-15 MIERUNE BBQ #19 ビデオ通話が繋がる0.2秒に、何が起きてい るのか? 宮本直幸@MSprzk
$ cat profile.service [Unit] Description=Self Introduction [Profile] Name="Miyamoto Naoyuki" Twitter="@Msprzk"
Affiliation="北海道情報大学2年" Interest="Network",”Security”,”WebRTC”
https://jozankei-time-map.supurazako.com
突然ですが、
Google Meet使ったことありますか?
Google Meetとは - Googleが提供する無料のオンライン会議・ビデオ通話 ツール - ブラウザから使える - 内部ではWebRTCという技術が使われている (新しいアイコンは見つからず...)
※1: Zoomは独自実装(Not WebRTC)が基本、しかし、Zoom Video SDKにはWebRTC Modeというものもある. (https://developers.zoom.us/docs/video-sdk/web/) WebRTCとは - リアルタイム通信技術
- Zoom※1, Discord, オンラインゲームなどで 使われている - 基本的に、P2P前提※2 ※2: もちろん、P2Pだけではリアルワールドのサービスは成り立たないので、サーバクライアントモデルをできるようにSFUと 呼ばれるものが存在したりする
Google Meetで通話が開始される流れを理解する 今日やること
1: ページを開く Google MeetをWebアプリとして読み込む 2: 参加前の準備をする カメラ・マイクを使える状態にする 3: 接続条件を交換する 音声・映像・暗号化の条件を決める
全体の流れ 4: 通れる経路を探す 実際に通信できる道を選ぶ 5: 鍵を作って流す 音声・映像を暗号化して送る 6: 繋がった後 通話品質を測りながら調整し続ける
裏で起きること 1. 名前から接続先を探す 2. 安全な通信経路をつくる 3. Meetの画面と会議情報を読む 1: ページを開く 見えていること
ブラウザで meet.google.com を開く
$ dig +short meet.google.com (DNSで見る) meet.google.com → ページ表示の実測 142.251.23.102 142.251.23.113
… $ curl -I -L https://meet.google.com HTTP/2 200 - dig: DNSに「この名前のIPは?」と聞く - curl: HTTPSでページにアクセスして応答を見る - HTTP/2 200: Meetのページが返ってきている
裏で起きること - ブラウザがカメラを開く - ブラウザがマイクを開く 2: 参加前に準備する 見えていること - 自分のカメラ映像
- マイク入力レベル getUserMedia = ブラウザにカメラ・マイクを使わせてもらうAPI
request カメラ・マイクを使いたい 116.5ms audio request 387.8ms audio track result 1226.7ms
video request 2663.4ms video track result Track result 使える音声・映像が返ってくる カメラ・マイクの実測 参加前に、ローカル側の準備は実際に走っている
接続条件を交換する - いきなり音声・映像を送らない! - 通話を始める前に、まず「打ち合わせ」をする - 「この条件なら通話できる」というメモを交換する SDP = 通話を始めるための接続条件メモ
3. 接続条件を交換する
SDPは... 音声・映像だけの情報ではない 通話前の打ち合わせメモのようなもの - 音声を使うか - 映像を使うか - 使える圧縮形式 -
ネットワーク接続の情報 - 暗号化に必要な情報 m=audio … m=video … m=application … webrtc-datachannel SDP(Session Description Protocol)に入るもの
SDPは作るだけでは相手に届かない signaling → SDPを相手に届けるやり取り WebRTCは、SDPの中身は扱うが、SDPの運び方はアプリ側に任せる e.g. - WebSocket - HTTP
- MQTT - etc… signaling
接続条件が決まっても、まだ通信できるかは分からない! e.g. - 自宅 Wi-Fi - 大学・会社 - モバイル回線 4.
通れる経路を探す
実際に通る道を探すのがICE ICE → 通れる通信経路を探す仕組み ICE; Interactive Connectivity Establishment 候補A 候補B
候補C どれが通れる?
実測では、使えそうな道が複数見えていた - UDP - TCP - 443 番ポート - Google
側の候補 ここから1つを選ぶ 候補を集めて試す
候補を全部使うわけではない! 疎通確認の結果、実際に使う1本が選ばれる selected path: protocol: UDP round trip time: about
24ms 選ばれた経路
そのまま音声・映像を流すわけではない! 暗号化をする 5. 鍵を作って流す ICE 通る経路を決める DTLS 相手確認と鍵交換 SRTP 音声・映像を暗号化
DTLS: Datagram Transport Layer Security UDP上で相手確認と鍵交換をする SRTP: Secure Real-time Transport
Protocol その鍵で音声・映像を暗号化して送る DTLS / SRTP
DTLS: Datagram Transport Layer Security UDP上で相手確認と鍵交換をする SRTP: Secure Real-time Transport
Protocol その鍵で音声・映像を暗号化して送る DTLS / SRTP 通話開始できた!! めでたしめでたし...
DTLS: Datagram Transport Layer Security UDP上で相手確認と鍵交換をする SRTP: Secure Real-time Transport
Protocol その鍵で音声・映像を暗号化して送る DTLS / SRTP ではない!
接続したら終わりではない! ブラウザは通話中も品質を測り続ける なぜなら、接続後も通話の状態は変わり続ける 6. 繋がった後 実測例 audio: codec: Opus video:
codec: AV1 frame size: 320x180 fps: 31 見る値 - stats: 通話中の測定値 - codec: 圧縮形式 - fps :1秒あたりのコマ数
カメラで撮った映像が、そのまま相手に送られるとは限らない camera request: 1280x720 actual outbound video: 320x180 Meet側で品質調整が入る 解像度はそのまま送られない
「ビデオ通話が繋がる0.2秒の間」 では、こんなことが起きている! まとめ 1. ページ表示 2. デバイス準備 3. 接続条件交換 4.
経路探索 5. 鍵交換 6. メディア送受信
HTTP/3, QUIC curl -I -L https://meet.google.com HTTP/2 200 alt-svc: h3=":443";
ma=2592000,h3-29=":443"; ma=2592000 ページ表示側では HTTP/3 の案内も返っていた。 おまけ