Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ビデオ通話が繋がる0.2秒で何が起きているのか
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Miyamoto Naoyuki
July 15, 2026
Programming
230
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
310
HTTPに新しいMethod! QUERY RFC10008
supurazako
0
37
MinecraftにP2Pが来るぞ!
supurazako
0
100
あえてPHPでリアルタイム通信をやってみる
supurazako
0
410
標準化っていいな〜JANOGでの学び〜
supurazako
0
100
Other Decks in Programming
See All in Programming
setup-vp GitLab対応の裏側
naokihaba
0
150
Kubernetes祭り #2 OP/ED
bells17
0
100
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
120
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
350
Java 27新機能 / Java 27 new features
kishida
2
200
Domain-Driven Transformation
hschwentner
2
2.3k
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
120
Verilogで学ぶCPU自作入門
uyuki234
8
4k
Jetpack Compose Mechanisms
skydoves
2
560
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.5k
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
360
Featured
See All Featured
Faster Mobile Websites
deanohume
310
32k
Embracing the Ebb and Flow
colly
88
5.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Statistics for Hackers
jakevdp
799
230k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.3k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
590
Writing Fast Ruby
sferik
630
63k
Leo the Paperboy
mayatellez
10
2.4k
Prompt Engineering for Job Search
mfonobong
0
490
Docker and Python
trallard
47
4.2k
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 の案内も返っていた。 おまけ