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
200
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
私がブラウザを自作したくなった理由
supurazako
1
280
HTTPに新しいMethod! QUERY RFC10008
supurazako
0
33
MinecraftにP2Pが来るぞ!
supurazako
0
90
あえてPHPでリアルタイム通信をやってみる
supurazako
0
380
標準化っていいな〜JANOGでの学び〜
supurazako
0
99
Other Decks in Programming
See All in Programming
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
360
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
240
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
240
仕様駆動開発の消費期限
watany
20
8.9k
Flow は今どうなっているか
mizdra
PRO
0
680
Hono + Inertia + React で LP を構築した話
oukayuka
2
150
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
250
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
130
Building a Meta Ray-Ban display app
akkeylab
0
180
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
440
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
500
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
570
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
580
BBQ
matthewcrist
89
10k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Chasing Engaging Ingredients in Design
codingconduct
0
280
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
470
Optimising Largest Contentful Paint
csswizardry
37
3.9k
The Cult of Friendly URLs
andyhume
79
7k
RailsConf 2023
tenderlove
30
1.5k
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 の案内も返っていた。 おまけ