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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Miyamoto Naoyuki
July 15, 2026
Programming
220
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
300
HTTPに新しいMethod! QUERY RFC10008
supurazako
0
35
MinecraftにP2Pが来るぞ!
supurazako
0
98
あえてPHPでリアルタイム通信をやってみる
supurazako
0
390
標準化っていいな〜JANOGでの学び〜
supurazako
0
100
Other Decks in Programming
See All in Programming
Family mrubyの進捗
kishima
1
120
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.8k
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
720
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
240
iOSDC2026登壇資料.pdf
riofujimon
0
170
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1k
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
210
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
550
SREの越境 / SRE Collaboration
y0hgi
2
210
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
150
AIエージェント時代のコードレビューを設計する
nogu66
6
2.7k
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
220
Featured
See All Featured
Making Projects Easy
brettharned
120
6.8k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
670
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
290
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
330
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Building the Perfect Custom Keyboard
takai
2
870
From π to Pie charts
rasagy
1
370
Bash Introduction
62gerente
615
220k
A designer walks into a library…
pauljervisheath
211
25k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.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 の案内も返っていた。 おまけ