WebRTC : RTCPeerConnection

RTCPeerConnection ๊ฐœ์š”

RTCPeerConnection์€ WebRTC(Web Real-Time Communication)์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋กœ, ์›น ๋ธŒ๋ผ์šฐ์ € ๊ฐ„์˜ ์‹ค์‹œ๊ฐ„ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆผ(์˜ˆ: ๋น„๋””์˜ค, ์˜ค๋””์˜ค)๊ณผ ๋ฐ์ดํ„ฐ ์ฑ„๋„์„ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ API๋ฅผ ์ œ๊ณตํ•œ๋‹ค. WebRTC์˜ ์ „๋ฐ˜์ ์ธ ๋ชฉ์ ์ด ์›น ๋ธŒ๋ผ์šฐ์ € ๊ฐ„์˜ P2P ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด, RTCPeerConnection์€ ์ด๋Ÿฌํ•œ P2P ์—ฐ๊ฒฐ์„ ์‹ค์งˆ์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. RTCPeerConnection์€ WebRTC์˜ ์‹ค์ œ ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๋ถ€๋ถ„์„ ๋‹ด๋‹นํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ ์กฐ๊ฑด์—์„œ ์ตœ์ ์˜ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ณต์žกํ•œ ์‹œ๊ทธ๋„๋ง๊ณผ ๋„คํŠธ์›Œํฌ ์ฒ˜๋ฆฌ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

RTCPeerConnection์˜ ๊ตฌ์กฐ์™€ ๊ตฌ์„ฑ ์š”์†Œ

RTCPeerConnection์€ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ์™€ ํ•˜์œ„ ์‹œ์Šคํ…œ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์ด๋“ค์€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์—ญํ• ์„ ํ†ตํ•ด P2P ์—ฐ๊ฒฐ์˜ ์„ค์ •๊ณผ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.

ICE (Interactive Connectivity Establishment)

RTCPeerConnection์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ICE(Interactive Connectivity Establishment) ํ”„๋กœํ† ์ฝœ์˜ ๊ตฌํ˜„์ด๋‹ค. ICE๋Š” NAT(Network Address Translation) ๋ฐ ๋ฐฉํ™”๋ฒฝ์„ ์šฐํšŒํ•˜์—ฌ ๋‘ ํ”ผ์–ด ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

  • Candidate Gathering: ICE๋Š” ๋กœ์ปฌ, ์„œ๋ฒ„ ๊ธฐ๋ฐ˜(STUN/TURN ์„œ๋ฒ„๋ฅผ ํ†ตํ•œ) ๋ฐ ํ”ผ์–ด ์—ฐ๊ฒฐ ํ›„๋ณด๊ตฐ์„ ์ˆ˜์ง‘ํ•œ๋‹ค. ์ด ํ›„๋ณด๋“ค์€ ๋‹ค์–‘ํ•œ ๋„คํŠธ์›Œํฌ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

  • Connectivity Checks: ์ˆ˜์ง‘๋œ ํ›„๋ณด๊ตฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์ œ๋กœ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ ์—ฐ๊ฒฐ์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์ตœ์ ์˜ ๊ฒฝ๋กœ๊ฐ€ ์„ ํƒ๋œ๋‹ค.

  • ICE Candidate: ICE Candidate๋Š” ํ”ผ์–ด ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋„คํŠธ์›Œํฌ ๊ฒฝ๋กœ์˜ ์ •๋ณด์ด๋‹ค. RTCPeerConnection์€ ์ด๋“ค์„ ์ˆ˜์ง‘ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜์—ฌ ์ตœ์ ์˜ ๊ฒฝ๋กœ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

SDP (Session Description Protocol)

SDP(Session Description Protocol)๋Š” ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ํ†ต์‹  ์„ธ์…˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ธฐ์ˆ ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. RTCPeerConnection์—์„œ SDP๋Š” ํ”ผ์–ด ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆผ์˜ ํ˜•์‹, ์ฝ”๋ฑ, ๋„คํŠธ์›Œํฌ ์ •๋ณด ๋“ฑ์ด ํฌํ•จ๋œ๋‹ค.

  • SDP Offer/Answer ๋ชจ๋ธ: RTCPeerConnection์€ "Offer/Answer" ๋ชจ๋ธ์„ ํ†ตํ•ด ๋‘ ํ”ผ์–ด ๊ฐ„์˜ ํ˜‘์ƒ ๊ณผ์ •์„ ์ง„ํ–‰ํ•œ๋‹ค. ํ•œ ํ”ผ์–ด๊ฐ€ ์—ฐ๊ฒฐ์„ ์ œ์•ˆํ•˜๋ฉด(Offer), ๋‹ค๋ฅธ ํ”ผ์–ด๊ฐ€ ์ด์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์ œ๊ณตํ•œ๋‹ค(Answer). ์ด ๊ณผ์ •์—์„œ ๊ฐ ํ”ผ์–ด๋Š” ์—ฐ๊ฒฐํ•  ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆผ์˜ ํ˜•์‹๊ณผ ์กฐ๊ฑด์„ ํ˜‘์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

  • Codec Negotiation: SDP๋ฅผ ํ†ตํ•ด ์„œ๋กœ ์‚ฌ์šฉํ•  ์ฝ”๋ฑ์„ ํ˜‘์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Š” ๋‘ ํ”ผ์–ด๊ฐ€ ๋™์ผํ•œ ์ฝ”๋ฑ์œผ๋กœ ๋ฏธ๋””์–ด๋ฅผ ์ „์†กํ•˜๊ณ  ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์žฅํ•œ๋‹ค.

Signaling

RTCPeerConnection์€ ํ”ผ์–ด ๊ฐ„์˜ ์ง์ ‘์ ์ธ ํ†ต์‹ ์„ ์„ค์ •ํ•˜๊ธฐ ์ „์— ์‹œ๊ทธ๋„๋ง(Signaling) ๊ณผ์ •์„ ํ•„์š”๋กœ ํ•œ๋‹ค. ์ด ์‹œ๊ทธ๋„๋ง์€ ๋ณดํ†ต WebSocket์ด๋‚˜ ๋‹ค๋ฅธ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์ฑ„๋„์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ, ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„๋Š” RTCPeerConnection์ด ์„œ๋กœ์˜ ๋„คํŠธ์›Œํฌ ์ƒํƒœ๋ฅผ ๊ตํ™˜ํ•˜๊ณ , ICE ํ›„๋ณด๊ตฐ์„ ๊ณต์œ ํ•˜๋ฉฐ, SDP ์˜คํผ์™€ ์‘๋‹ต์„ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค.

  • Signaling Server์˜ ์—ญํ• : ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„๋Š” ํ”ผ์–ด ๊ฐ„์˜ ์ดˆ๊ธฐ ํ†ต์‹ ์„ ์ค‘๊ณ„ํ•˜๊ณ , ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ์ค‘๊ฐ„ ๋‹จ๊ณ„์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. RTCPeerConnection ์ž์ฒด๋Š” ์‹œ๊ทธ๋„๋ง ๋ฐฉ๋ฒ•์ด๋‚˜ ์„œ๋ฒ„ ๊ตฌํ˜„์— ๋Œ€ํ•ด ๊ด€์—ฌํ•˜์ง€ ์•Š์ง€๋งŒ, ์‹œ๊ทธ๋„๋ง์ด ์—†์œผ๋ฉด P2P ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•  ์ˆ˜ ์—†๋‹ค.

  • Signal Exchange: ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ํ”ผ์–ด๋“ค์€ ์„œ๋กœ์˜ SDP์™€ ICE ํ›„๋ณด๋ฅผ ๊ตํ™˜ํ•œ๋‹ค. ์ด ์ •๋ณด๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๊ตํ™˜๋˜๋ฉด, ํ”ผ์–ด ๊ฐ„์˜ ์ง์ ‘์ ์ธ P2P ์—ฐ๊ฒฐ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

RTCPeerConnection์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ ์ œ์–ด

RTCPeerConnection์€ ์‹ค์ œ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆผ๊ณผ ๋ฐ์ดํ„ฐ ์ฑ„๋„์„ ๊ด€๋ฆฌํ•˜๊ณ  ์ œ์–ดํ•˜๋Š” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ฏธ๋””์–ด ์ „์†ก์˜ ์‹œ์ž‘๊ณผ ์ค‘์ง€, ๋Œ€์—ญํญ ๊ด€๋ฆฌ, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋“ฑ์ด ํฌํ•จ๋œ๋‹ค.

Media Streams ๊ด€๋ฆฌ

RTCPeerConnection์€ ๋น„๋””์˜ค ๋ฐ ์˜ค๋””์˜ค ์ŠคํŠธ๋ฆผ์„ ์ „์†กํ•˜๊ณ  ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆผ์€ ํŠธ๋ž™(track)์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ด๋Ÿฌํ•œ ํŠธ๋ž™๋“ค์€ ๊ฐ๊ฐ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ œ์–ด๋  ์ˆ˜ ์žˆ๋‹ค.

  • AddTrack์™€ RemoveTrack: RTCPeerConnection์€ addTrack๊ณผ removeTrack ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆผ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ํ”ผ์–ด์—๊ฒŒ ์ „์†ก๋˜๋Š” ๋ฏธ๋””์–ด๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Bandwidth Management: RTCPeerConnection์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„คํŠธ์›Œํฌ ๋Œ€์—ญํญ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๊ด€๋ฆฌํ•˜์—ฌ, ์ŠคํŠธ๋ฆผ์˜ ํ’ˆ์งˆ์„ ์ตœ์ ํ™”ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ์ƒํƒœ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ํ’ˆ์งˆ๋กœ ๋ฏธ๋””์–ด๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

DataChannel ๊ด€๋ฆฌ

RTCPeerConnection์€ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ฐ์ดํ„ฐ ์ฑ„๋„์„ ํ†ตํ•ด ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ(ํ…์ŠคํŠธ, ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ๋“ฑ)๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

  • DataChannel ์ƒ์„ฑ: createDataChannel ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ฑ„๋„์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์ฑ„๋„์€ ์ „์ด์ค‘ ๋ฐฉ์‹์œผ๋กœ ์šด์˜๋˜๋ฉฐ, ๋‚ฎ์€ ์ง€์—ฐ๊ณผ ๋†’์€ ์‹ ๋ขฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

  • Message Handling: ๋ฐ์ดํ„ฐ ์ฑ„๋„์€ ๋ฉ”์‹œ์ง€ ๊ธฐ๋ฐ˜์œผ๋กœ ์šด์˜๋˜๋ฉฐ, onmessage ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ์ˆ˜์‹ ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฐ๊ฒฐ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

RTCPeerConnection์€ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉฐ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์žฌ์กฐ์ •ํ•˜๊ฑฐ๋‚˜ ์žฌํ˜‘์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

  • Connection State: RTCPeerConnection์€ ๋‹ค์–‘ํ•œ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ์—ฐ๊ฒฐ ์ƒํƒœ๊ฐ€ ๋ณ€ํ™”ํ•  ๋•Œ๋งˆ๋‹ค oniceconnectionstatechange ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Error Handling: ์—ฐ๊ฒฐ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ICE ์—ฐ๊ฒฐ ์‹คํŒจ, ์‹œ๊ทธ๋„๋ง ์˜ค๋ฅ˜ ๋“ฑ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋Š” ์—ฐ๊ฒฐ์˜ ์žฌ์‹œ๋„ ๋˜๋Š” ์žฌํ˜‘์ƒ์„ ํ†ตํ•ด ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค.

RTCPeerConnection์˜ ์ตœ์ ํ™” ๊ธฐ๋ฒ•

RTCPeerConnection์˜ ์„ฑ๋Šฅ์€ ์—ฐ๊ฒฐ ์•ˆ์ •์„ฑ๊ณผ ํšจ์œจ์„ฑ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ, ๋‹ค์–‘ํ•œ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด ์ ์šฉ๋œ๋‹ค.

Connection Time Optimization

์—ฐ๊ฒฐ ์„ค์ • ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ICE ํ›„๋ณด ์ˆ˜์ง‘์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜, ์ดˆ๊ธฐ ์—ฐ๊ฒฐ์—์„œ ์šฐ์„ ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ํ›„๋ณด๊ตฐ์„ ๋ฏธ๋ฆฌ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹ ๋“ฑ์ด ์žˆ๋‹ค.

Bandwidth Adaptation

๋Œ€์—ญํญ ์ ์‘ ๊ธฐ๋ฒ•์€ ๋„คํŠธ์›Œํฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ „์†ก ์†๋„์™€ ์ŠคํŠธ๋ฆผ ํ’ˆ์งˆ์„ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋Š๊น€ ์—†๋Š” ๋ฏธ๋””์–ด ์ „์†ก์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

Codec Selection and Adaptation

์ฝ”๋ฑ ์„ ํƒ์€ ๋ฏธ๋””์–ด ์ „์†ก ํ’ˆ์งˆ์— ์ค‘์š”ํ•œ ์š”์†Œ์ด๋‹ค. RTCPeerConnection์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋ฑ ๋ชฉ๋ก์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ตœ์ ์˜ ์ฝ”๋ฑ์„ ์„ ํƒํ•˜๊ณ , ํ•„์š” ์‹œ ๋™์ ์œผ๋กœ ์ฝ”๋ฑ์„ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.


๊ด€๋ จ ์ž๋ฃŒ:

  • WebRTC 1.0: Real-time Communication Between Browsers, W3C, https://www.w3.org/TR/webrtc/

  • Justin Uberti, Cullen Jennings, Eric Rescorla, WebRTC API: Real-Time Communication for the Open Web, Google Developers, https://developers.google.com/web/updates/2018/12/webrtc

  • Philipp Hancke, Demystifying WebRTC's RTCPeerConnection, webrtchacks.com, https://webrtchacks.com/sdp-anatomy/

Last updated