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
WebRTCを知ろう!
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
tatsuya
March 15, 2019
Technology
0
620
WebRTCを知ろう!
2019/3/15 サポーターズ勉強会 「WebRTCを知ろう!」
講師: 山川 達也 (NTTビズリンク)
tatsuya
March 15, 2019
Tweet
Share
Other Decks in Technology
See All in Technology
ClickHouseはどのように大規模データを活用したAIエージェントを全社展開しているのか
mikimatsumoto
0
260
超初心者からでも大丈夫!オープンソース半導体の楽しみ方〜今こそ!オレオレチップをつくろう〜
keropiyo
0
110
Amazon S3 Vectorsを使って資格勉強用AIエージェントを構築してみた
usanchuu
3
450
Webhook best practices for rock solid and resilient deployments
glaforge
2
300
Cosmos World Foundation Model Platform for Physical AI
takmin
0
930
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
4
210
プロポーザルに込める段取り八分
shoheimitani
1
290
レガシー共有バッチ基盤への挑戦 - SREドリブンなリアーキテクチャリングの取り組み
tatsukoni
0
220
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.6k
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
190
[CV勉強会@関東 World Model 読み会] Orbis: Overcoming Challenges of Long-Horizon Prediction in Driving World Models (Mousakhan+, NeurIPS 2025)
abemii
0
140
AIと新時代を切り拓く。これからのSREとメルカリIBISの挑戦
0gm
0
2.5k
Featured
See All Featured
HDC tutorial
michielstock
1
380
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
280
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
280
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
130
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
430
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
250
sira's awesome portfolio website redesign presentation
elsirapls
0
150
Docker and Python
trallard
47
3.7k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.9k
The Limits of Empathy - UXLibs8
cassininazir
1
220
Transcript
WebRTCΛΖ͏! 20190315 ษڧձ NTTϏζϦϯΫגࣜձࣾɹࢁ ୡ
WebRTCΛΖ͏! Agenda WebRTCͱ WebRTCͰར༻͞ΕΔϓϩτίϧ WebRTCͷNATӽ͑ʹར༻͞ΕΔٕज़ WebRTCʹར༻͞ΕΔίʔσοΫ WebRTCʹΑΔάϧʔϓ௨ͷ࣮ݱ WebRTCσϞ
WebRTCͱ
WebRTCΛΖ͏! WebRTCͱ APIΛհͯ͠ϒϥβϞόΠϧΞϓϦʹReal-Time Communication (RTC)Λఏڙ͢ΔΦʔϓϯιʔεͷϓϩδΣ Ϋτ Google͕2011ʹϓϩδΣΫτΛ։࢝ World Wide Web
Consortium (W3C)ɾInternet Engineering Task Force (IETF) ͕ɺʑඪ४Խ
WebRTCΛΖ͏! WebRTCͱ W3CͱIETFͰඪ४Խ ᶃ ϓϩτίϧ (γάφϦϯάɺ௨৴ཱ֬ɺ҉߸ԽͳͲ) ᶄ NAT͑ͷΈ (NATɾFWΛ͑ͯP2P௨৴͢ΔΈ) ᶅ
ίʔσοΫ (ө૾ɾԻͷѹॖํࣜ) ᶆ API (Webϒϥβ͔ΒJavaScriptʹΑΓWebRTCΛ࣮ݱ) ※ᶃʙᶅ͕IETFɺᶆ͕W3C
ొਓ WebRTCΛΖ͏! WebRTCͱ Peer A Peer B STUN/TURNαʔό γάφϦϯάαʔό Webαʔό
Network
ొਓ WebRTCΛΖ͏! WebRTCͱ Peer A Peer B STUN/TURNαʔό γάφϦϯάαʔό Webαʔό
Network WebRTCΛར༻͢Δ WebϖʔδΛ࣮ ௨৴Λ։࢝͢ΔͨΊʹඞ ཁͳใͷަΛհ NATɾϑΝΠΞΥʔϧΛ͑ͯ ௨৴ͷཱ֬Λ͢ΔͨΊͷϓϩτίϧ
WebRTCΛࢧ͑Δ ϓϩτίϧ
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ ϝσΟΞ σʔλ γάφϦϯά
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ ϝσΟΞ σʔλ γάφϦϯά ө૾ɾԻσʔλ ͖ͳσʔλ (ςΩετνϟοτͳͲ)
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ ϝσΟΞ σʔλ γάφϦϯά ө૾ɾԻσʔλ ͖ͳσʔλ (ςΩετνϟοτͳͲ)
ొਓ WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -γάφϦϯά- Peer A Peer B STUN/TURNαʔό γάφϦϯάαʔό
Webαʔό Network WebRTCΛར༻͢Δ WebϖʔδΛ࣮ NATɾϑΝΠΞΥʔϧΛ͑ͯ ௨৴ͷཱ֬Λ͢ΔͨΊͷϓϩτίϧ ௨৴Λ։࢝͢ΔͨΊʹඞ ཁͳใͷަΛհ
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -γάφϦϯά- SDP ɹSession Description Protocol
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -γάφϦϯά- SDP ௨৴Λ։࢝͢ΔͨΊʹඞཁͳใΛهࡌ͢Δϓϩτίϧɻ ྫ͑ɺ༻͢Δө૾ɾԻͷίʔσοΫ(ѹॖํࣜ)ͳͲ WebSocketͳͲΛར༻͠ɺγάφϦϯάαʔόΛհͯ͠ ֤ΫϥΠΞϯτಉ࢜Ͱަ
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ ϝσΟΞ σʔλ γάφϦϯά ө૾ɾԻσʔλ ͖ͳσʔλ (ςΩετνϟοτͳͲ)
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -SRTP- SRTP ɹSecure Real-time Transport Protocol
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -SRTP- SRTP ɹSecure Real-time Transport Protocol Secure+RTP
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -SRTP- SRTP ө૾ԻΛϦΞϧλΠϜʹૹड৴͢Δϓϩτίϧ RTPύέοτͷϖΠϩʔυ෦ (ө૾ɾԻσʔλ)Λ҉߸Խ ҉߸Խʹ͏伴DTLS (ޙड़) Λ༻͍ͯऔಘ
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -DTLS- DTLS ɹDatagram Transpor Layer Security
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -DTLS- DTLS ɹDatagram Transpor Layer Security Datagram(UDPͷD)+TLS
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -DTLS- DTLS σʔλάϥϜ (UDP) ͚ͷ҉߸Խํࣜ ϝσΟΞνϟωϧͰɺDTLS伴ަͷͨΊʹ͓ͬͯΓ ҉߸ԽࣗମSRTPΛར༻ (DTLS-SRTP)
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ ϝσΟΞ σʔλ γάφϦϯά ө૾ɾԻσʔλ ͖ͳσʔλ (ςΩετνϟοτͳͲ)
ొਓ WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -STUN/TURN- Peer A Peer B STUN/TURNαʔό γάφϦϯάαʔό
Webαʔό Network WebRTCΛར༻͢Δ WebϖʔδΛ࣮ ௨৴Λ։࢝͢ΔͨΊʹඞ ཁͳใͷަΛհ NATɾϑΝΠΞΥʔϧΛ͑ͯ ௨৴ͷཱ֬Λ͢ΔͨΊͷϓϩτίϧ
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -STUN/TURN- STUN ɹSession Traversal Utilities for NATs
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -STUN/TURN- STUN NATԼʹ͋ΔPC͕NATͷ֎ଆ͔Βݟͨࣗͷάϩʔό ϧIPΞυϨεΛऔಘ͢ΔͨΊͷϓϩτίϧ
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -STUN/TURN- STUN NAT NAT ࢲͷάϩʔόϧIPΞυϨ εͱϙʔτ൪߸ʁ ࢲͷάϩʔόϧIPΞυ Ϩεͱϙʔτ൪߸ʁ
Peer A Peer B STUNαʔό ϓϥΠϕʔτIP ΞυϨε192.168.1.1 ϓϥΠϕʔτIP ΞυϨε 172.16.1.1
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -STUN/TURN- STUN NAT NAT AͷάϩʔόϧIPΞυϨεͱ ϙʔτ൪߸ 100.100.100.100:5000/UDP ͩΑ!
BͷάϩʔόϧIPΞυϨεͱ ϙʔτ൪߸ 200.200.200.200:6000/UDP ͩΑ! Peer A Peer B STUNαʔό ϓϥΠϕʔτIP ΞυϨε192.168.1.1 ϓϥΠϕʔτIP ΞυϨε 172.16.1.1 ࢲͷάϩʔόϧIPΞυϨ εͱϙʔτ൪߸ʁ ࢲͷάϩʔόϧIPΞυ Ϩεͱϙʔτ൪߸ʁ
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -STUN/TURN- TURN ɹTraversal Using Replay around NAT
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -STUN/TURN- TURN ϐΞಉ࢜ͷ௨৴Λதܧ͢ΔͨΊͷϓϩτίϧ STUNʹΑΓP2P௨৴ͷཱ͕֬Ͱ͖ͳ͔ͬͨ߹ͷ࠷ऴखஈ
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -STUN/TURN- TURN NAT NAT Peer A Peer B
TURNαʔό STUNͷใͰBͱ P2PଓͰ͖ͳ͔ͬͨͧ STUNͷใͰAͱ P2PଓͰ͖ͳ͔ͬͨͧ
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -STUN/TURN- TURN NAT NAT Peer A Peer B
TURNαʔό AͱBͷ௨৴Λதܧ͢Δͧʂ
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -ICE- ICE ɹInteractive Connective Establishment
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -ICE- ICE STUNTURNΛར༻͠ɺ௨৴ܦ࿏ީิ (ICE Candidate)͔ Βదͳ௨৴ܦ࿏Λબ͢ΔΈ
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -ICE- ICE ௨৴ܦ࿏ީิ (ICE Candidate) STUN: άϩʔόϧIPΞυϨεͱϙʔτ൪߸ TURN:
TURNαʔόͷάϩʔόϧIPΞυϨεͱϢʔβͷ ͨΊʹׂΓͯΒΕͨϙʔτ൪߸
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -ICE- ICE ؆қಈ࡞ϑϩʔ 1) ಉҰͷϓϥΠϕʔτωοτϫʔΫʹ͋ΔՄೳੑΛߟྀ͠ɺϓϥ ΠϕʔτIPΞυϨεͱϙʔτ൪߸ͰP2PଓΛࢼΈΔ 2) ଓͰ͖ͳ͍߹ɺSTUNαʔόͰऔಘͨ͠ใʹج͖ͮɺ૬ख
ͷάϩʔόϧIPΞυϨεͱϙʔτ൪߸ʹΑΔP2PଓΛࢼΈΔ 3) ͦΕͰଓͰ͖ͳ͍߹TURNαʔόΛܦ༝ͨ͠ଓΛࢼΈΔ
ᶃ ॳظSDPΛަ͢Δ WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -௨৴ཱ֬ϑϩʔ- NAT NAT Peer A Peer
B ϓϥΠϕʔτNW άϩʔόϧNW γάφϦϯάαʔό SDPΛૹ৴ʂ AͷSDP͕དྷͨʂ
ᶃ ॳظSDPΛަ͢Δ WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -௨৴ཱ֬ϑϩʔ- NAT NAT Peer A Peer
B ϓϥΠϕʔτNW άϩʔόϧNW γάφϦϯάαʔό BͷSDP͕དྷͨʂ SDPΛૹ৴ʂ
ᶄ STUN/TRUNΛར༻ͯ͠௨৴ܦ࿏ީิ(ICE Candidate)Λऩ ू͠ɺγάφϦϯάαʔόΛհͯ͠ަ͢Δ WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -௨৴ཱ֬ϑϩʔ- NAT NAT PC
A PC B ϓϥΠϕʔτNW άϩʔόϧNW STUN/TURNαʔό γάφϦϯάαʔό ࢲͷάϩʔόϧIPΞυϨε ͱϙʔτ൪߸ʁ ࢲͷάϩʔόϧIPΞυϨε ͱϙʔτ൪߸ʁ
ᶄ STUN/TRUNΛར༻ͯ͠௨৴ܦ࿏ީิ(ICE Candidate)Λऩ ू͠ɺγάφϦϯάαʔόΛհͯ͠ަ͢Δ WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -௨৴ཱ֬ϑϩʔ- NAT NAT Peer
A Peer B ϓϥΠϕʔτNW άϩʔόϧNW STUNαʔό γάφϦϯάαʔό AͷάϩʔόϧIPΞυϨεͱ ϙʔτ൪߸ 100.100.100.100:5000/UDP ͩΑ! BͷάϩʔόϧIPΞυϨεͱ ϙʔτ൪߸ 200.200.200.200:6000/UDP ͩΑ!
ᶄ STUN/TRUNΛར༻ͯ͠௨৴ܦ࿏ީิ(ICE Candidate)Λऩ ू͠ɺγάφϦϯάαʔόΛհͯ͠ަ͢Δ WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -௨৴ཱ֬ϑϩʔ- NAT NAT Peer
A Peer B ϓϥΠϕʔτNW άϩʔόϧNW STUNαʔό γάφϦϯάαʔό γάφϦϯάαʔόʹࣗͷใ ૹΖɻ͍ͭͰʹ௨৴૬खͷใڭ ͑ͯΒ͓ʂ γάφϦϯάαʔόʹࣗͷใ ૹΖɻ͍ͭͰʹ௨৴૬खͷใڭ ͑ͯΒ͓ʂ
ᶄ STUN/TRUNΛར༻ͯ͠௨৴ܦ࿏ީิ(ICE Candidate)Λऩ ू͠ɺγάφϦϯάαʔόΛհͯ͠ަ͢Δ WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -௨৴ཱ֬ϑϩʔ- NAT NAT Peer
A Peer B ϓϥΠϕʔτNW άϩʔόϧNW STUNαʔό γάφϦϯάαʔό Aͱ௨৴͕ͨͬͯ͠ΔBͷ ใૹΔΑ! Bͱ௨৴͕ͨͬͯ͠ΔAͷ ใૹΔΑ!
ᶅ ಉҰͷϓϥΠϕʔτωοτϫʔΫʹ͋ΔՄೳੑΛߟྀ͠ɺ ϓϥΠϕʔτIPΞυϨεͱϙʔτ൪߸ͰP2PଓΛࢼΈΔ WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -௨৴ཱ֬ϑϩʔ- NAT Peer A Peer
B ϓϥΠϕʔτNW άϩʔόϧNW ࣮ಉ͡ωοτϫʔΫ ʹ͍ͨΑʂ ·͔͡ʂʂ
ᶅ ಉҰͷϓϥΠϕʔτωοτϫʔΫʹ͋ΔՄೳੑΛߟྀ͠ɺ ϓϥΠϕʔτIPΞυϨεͱϙʔτ൪߸ͰP2PଓΛࢼΈΔ WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -௨৴ཱ֬ϑϩʔ- Peer A Peer B
ϓϥΠϕʔτNW άϩʔόϧNW ࣮ಉ͡ωοτϫʔΫ ʹ͍ͨΑʂ ·͔͡ʂʂ NAT P2P௨৴։࢝
ᶆ ܨ͕Βͳ͔ͬͨΒɺSTUNαʔόͰऔಘͨ͠ใʹجͮ ͖ɺ૬खͷάϩʔόϧIPΞυϨεͱϙʔτ൪߸ʹΑΔ P2PଓΛࢼΈΔ WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -௨৴ཱ֬ϑϩʔ- NAT NAT Peer
A Peer B ϓϥΠϕʔτNW άϩʔόϧNW STUNαʔό γάφϦϯάαʔό ܨ͕ͬͨʂ ܨ͕ͬͨʂ P2P௨৴։࢝
ᶇ ͦΕͰܨ͕Βͳ͔ͬͨΒɺTURNαʔόΛܦ༝ͨ͠ଓ ΛࢼΈΔ WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -௨৴ཱ֬ϑϩʔ- NAT NAT Peer A
Peer B ϓϥΠϕʔτNW άϩʔόϧNW TURNαʔό γάφϦϯάαʔό ܨ͕Βͳ͍ʂ ܨ͕Βͳ͍ʂ
ᶇ ͦΕͰܨ͕Βͳ͔ͬͨΒɺTURNαʔόΛܦ༝ͨ͠ଓ ΛࢼΈΔ WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -௨৴ཱ֬ϑϩʔ- NAT NAT Peer A
Peer B ϓϥΠϕʔτNW άϩʔόϧNW TURNαʔό γάφϦϯάαʔό ֎͔Βͷ௨৴Λ؆୯ʹ௨͞ͳ͍ͧɻ ※NATʹ9छྨͷఆ͕ٛ͋Δ (RFC 5780) NATͷΈ߹ΘͤʹΑͬͯ͑Εͳ͍ ߹͕͋Δ
ᶇ ͦΕͰܨ͕Βͳ͔ͬͨΒɺTURNαʔόΛܦ༝ͨ͠ଓ ΛࢼΈΔ WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -௨৴ཱ֬ϑϩʔ- NAT NAT Peer A
Peer B ϓϥΠϕʔτNW άϩʔόϧNW TURNαʔό γάφϦϯάαʔό ࠷ऴखஈʂ ࠷ऴखஈʂ ௨৴։࢝ ύέοτதܧ͢Δͧʂ
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -ICE- ICE Vanilla ICEͱTrickle ICEͷ2छྨ͕ଘࡏ Peer A Peer
B ϓϥΠϕʔτNW άϩʔόϧNW γάφϦϯάαʔό NAT NAT Vanilla or Trickle?
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ Vanilla ICE શͯͷICE Candidate͕ग़ἧ͔ͬͯΒSDPʹؚΊͯަ͢ Δํࣜ ICE CandidateSDPʹؚ·ΕΔͷͰใަ͕Ұԟ෮Ͱ ࡁΉ
ީิΛݟ͚ͭऴ͑ΔͷΛͨͳ͚Ε͍͚ͳ͍ͨΊɺ௨ ৴ཱ֬·Ͱʹ͔͔Δ͕࣌ؒ͘ͳΔ
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -ICE- Vanilla ICE NAT NAT Peer A Peer
B P2P௨৴։࢝ SDP ICE Candidate SDP ICE Candidate
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -ICE- Trickle ICE ॳظSDPΛަ͠ɺICE CandidateΛൃݟ͢Δͨͼʹ४͡ ަ͢Δํࣜ શͯͷICE CandidateΛऩू͢ΔલʹP2P௨৴ʹޭ͢Δ
Մೳੑ͕͋Δ ௨৴ཱ͕֬ૣ͘ͳΔՄೳੑ͕͋Δ͕ɺܦ࿏ใΛަ͢ Δճଟ͘ͳΔ
WebRTCΛΖ͏! WebRTCΛࢧ͑Δϓϩτίϧ -ICE- Trickle ICE NAT NAT Peer A Peer
B ॳظSDP ॳظSDP ICE Candidate ICE Candidate ɾ ɾ ɾ ICE Candidate P2P௨৴։࢝ ICE Candidate ɾ ɾ ɾ
WebRTCͷNATӽ͑ ʹར༻͞ΕΔٕज़
WebRTCΛΖ͏! WebRTCͷNATӽ͑ʹར༻͞ΕΔٕज़ UDPϗʔϧύϯνϯά ௨৴ܦ࿏্ʹ͋ΔNATFirewallͷಈ࡞ҎԼ ᶃ ͔Β֎ͷ௨৴ΛڐՄ ᶄ ֎͔Βͷ௨৴ɺ͔Β֎ͷ௨৴͕͋ͬͨ߹ʹڐՄ →
NATFirewall্ʹϚοϐϯά͕Ͱ͖Δɻ͜Ε͕ϗʔϧͱ ݺΕΔ ͜ͷϚοϐϯάΛ௨ͬͯP2P௨৴Λཱ֬͢Δٕज़
WebRTCΛΖ͏! WebRTCͷNATӽ͑ʹར༻͞ΕΔٕज़ UDPϗʔϧύϯνϯά NAT NAT Peer A Peer B PC
AͱPC Bؒͷ௨৴ͷϚοϐϯά͕Ͱ͖Δ
WebRTCΛΖ͏! WebRTCͷNATӽ͑ʹར༻͞ΕΔٕज़ UDPϗʔϧύϯνϯά Ϛοϐϯά͕ͳ͍ͨΊϒϩοΫ NAT NAT Peer A Peer B
PC AͱPC Bؒͷ௨৴ͷϚοϐϯά͕Ͱ͖Δ
WebRTCΛΖ͏! WebRTCͷNATӽ͑ʹར༻͞ΕΔٕज़ UDPϗʔϧύϯνϯά Ϛοϐϯά͕ͳ͍ͨΊϒϩοΫ PC AͱPC Bؒͷ௨৴ͷϚοϐϯά͕Ͱ͖Δ NAT Peer A
PC AͱPC Bؒͷ௨৴ͷϚοϐϯά͕Ͱ͖Δ NAT Peer B
WebRTCΛΖ͏! WebRTCͷNATӽ͑ʹར༻͞ΕΔٕज़ UDPϗʔϧύϯνϯά Ϛοϐϯά͕ͳ͍ͨΊϒϩοΫ Ϛοϐϯά͕͋ΔͨΊNATΛ௨ա NAT NAT PC AͱPC Bؒͷ௨৴ͷϚοϐϯά͕Ͱ͖Δ
PC AͱPC Bؒͷ௨৴ͷϚοϐϯά͕Ͱ͖Δ Peer A Peer B
UDPϗʔϧύϯνϯά NAT NAT WebRTCΛΖ͏! WebRTCͷNATӽ͑ʹར༻͞ΕΔٕज़ Ϛοϐϯά͕ͳ͍ͨΊϒϩοΫ Ϛοϐϯά͕͋ΔͨΊNATΛ௨ա Ϛοϐϯά͕͋ΔͨΊNATΛ௨ա Peer A
Peer B PC AͱPC Bؒͷ௨৴ͷϚοϐϯά͕Ͱ͖Δ PC AͱPC Bؒͷ௨৴ͷϚοϐϯά͕Ͱ͖Δ
WebRTCʹར༻͞ΕΔ ίʔσοΫ
WebRTCΛΖ͏! WebRTCʹར༻͞ΕΔίʔσοΫ ίʔσοΫͱ σʔλͷѹॖɾ৳ு͢ΔஔιϑτΣΞ ө૾ԻͷσʔλΛѹॖ͢Δ͜ͱʹΑΓ௨৴σʔλ ྔΛݮ
WebRTCΛΖ͏! WebRTCʹར༻͞ΕΔίʔσοΫ ө૾ίʔσοΫ छྨ ཧ৫ ରԠϒϥβ ࢀߟใ VP8 Google Chrome,Firefox,
Safari,Edge සൟʹར༻͞Ε͍͕ͯͨ ࠷ۙVP9ʹஔ͖Θ͖͍ͬͯͯΔ VP9 Google Chrome,Firefox VP8ͷఔͷϏοτϨʔτͰಉ࣭Λ ࣮ݱͰ͖Δ͕CPU༻͕ߴ͍ H.264/AVC MPEG LA Chrome,Firefox, Safari,Edge VP8ͱಉఔͷ࣭ հͨ͠ө૾ίʔσοΫͰ࠷ݹ͍ AV1 AOM Alliance for Open Media 2019 ޙʹରԠ༧ఆ
WebRTCΛΖ͏! WebRTCʹར༻͞ΕΔίʔσοΫ ԻίʔσοΫ छྨ ཧ৫ ରԠϒϥβ ࢀߟใ Opus IETF Chrome,Firefox,
Safari,Edge සൟʹར༻͞Ε͍ͯΔ G.711 CCITT Chrome,Firefox Safari,Edge Opusͱൺֱ͠ɺ࣭͕͍ ԻίʔσοΫͷதͰࡦఆ͞Εͨͷ͕ඇ ৗʹݹ͍ ͦͷଞɺiLBC,iSAC,G.722Λαϙʔτ͢Δϒϥβ͋Δ͕ɺOpus͕ओྲྀ
WebRTCʹΑΔ άϧʔϓ௨ͷ࣮ݱ
WebRTCΛΖ͏! WebRTCʹΑΔάϧʔϓ௨ͷ࣮ݱ ԕִίϛϡχέʔγϣϯαʔϏεΛ࣮ݱ͢Δ্Ͱɺάϧʔϓ௨ ඞਢػೳ ϑϧϝογϡଓ SFU (Selective Forwarding Unit) MCU
(Multi-point Control Unit)
WebRTCΛΖ͏! WebRTCʹΑΔάϧʔϓ௨ͷ࣮ݱ ϑϧϝογϡଓ ଓ͢Δͯ͢ͷͱP2P௨৴Λཱ֬ ෳͷө૾ɾԻΛૹड৴͢ΔͨΊෛՙ͕ඇৗʹߴ͍ ଆͰϨΠΞτΛܾఆ ৴αʔόϨε
WebRTCΛΖ͏! WebRTCʹΑΔάϧʔϓ௨ͷ࣮ݱ SFU αʔόʹࣗө૾Λૹ৴͠ɺαʔό͕֤ʹө૾Λ৴ ෳͷө૾ɾԻΛड৴͢ΔͨΊɺड৴࣌ͷෛՙ͕ߴ͍ ଆͰϨΠΞτΛܾఆ ޙड़ͷMCUͱൺֱ͠ɺαʔόͷෛՙΊ SFU
WebRTCΛΖ͏! WebRTCʹΑΔάϧʔϓ௨ͷ࣮ݱ MCU αʔόʹࣗө૾Λૹ৴͠ɺαʔό͕֤ʹө૾Λ৴ ϨΠΞταʔόଆͰܾఆ͠ɺ߹͞Εͨө૾Λड৴͢ΔͨΊɺ ෛՙ͍ ө૾ɾԻΛ߹ɾ৴͢Δɺαʔόͷෛՙ͕ඇৗʹߴ͍ MCU
WebRTCσϞ
ߏਤ WebRTCΛΖ͏! WebRTCσϞ -ߏਤ- Ξμϓλʔ 8FCαʔό γάφϦϯάαʔό Nginx (Web) Node.js
(γάφϦϯά) Vagrant box 2ͭͷFirefoxؒͰP2P 456/536/ 4LZ8BZ
WebRTCΛΖ͏! WebRTCσϞ -API- ຊσϞͰ༻ͨ͠API MediaDevices.getUserMedia()ϝιουͰࣗΧϝϥө૾ɺ͓ΑͼࣗϚΠΫԻΛऔಘ γάφϦϯά։࢝࣌ɺRTCPeerConnectionΦϒδΣΫτΛੜ createOffer() (Offerଆ), createAnswer() (Answerଆ)ϝιουͰɺSDPΛੜ
setLocalDescription() (ࣗͷSDP), setRemoteDescription() (૬ख͔ΒૹΒΕ͖ͯͨSDP)ϝιου ͰɺSDPΛRTCPeerConnectionʹηοτ setLocalDescription()ʹΑΓSDP͕ηοτ͞ΕΔͱɺICE CandidateΛࣗಈతʹऩू։࢝͠ɺݟ͔ͭ ΔͱonicecandidateΠϕϯτ͕ඇಉظͰൃՐ ૬खͷICE CandidateΛड৴ͨ͠ΒɺaddIceCandidate()ϝιουͰɺRTCPeerConnectionʹηοτ addTrack()ϝιουͰɺࣗө૾ɾԻTrackΛՃɻWebRTCͰɺө૾ɾԻ͕Trackͱ͍͏୯ҐͰ ϝσΟΞετϦʔϜʹؚ·Ε͍ͯΔ ૬खͷө૾ɾԻTrackͷड৴ͰontrackΠϕϯτ͕ൃՐ MediaStream.getTracks()ϝιουͰɺө૾ɾԻTrackΛऔಘ HTMLMediaElement.play()ϝιουͰɺө૾ɾԻΛ࠶ੜ
END