SERVER/Node.js

๐Ÿ’ป webRTC Process

์™„์žโœจ 2022. 6. 22. 21:22

๐Ÿ’ป webRTC Process

webRTC ์ˆ˜ํ–‰๊ณผ์ •

p2p ์˜์ƒ ๋ฐ ์Œ์„ฑ ํ†ต์‹ ์„ ํ•˜๋Š” webRTC application ์„ ๊ตฌ์„ฑํ•œ๋‹ค๋ฉด, ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • Fetching : ์ƒ๋Œ€ peer ์—๊ฒŒ ๋ณด๋‚ผ ์‚ฌ์šฉ์ž์˜ ์Œ์„ฑ ๋ฐ ์˜์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.
  • Signaling : ์ƒ๋Œ€ peer ์™€ ์—ฐ๊ฒฐ์„ ๋งบ๊ธฐ ์œ„ํ•ด์„œ, ์ƒ๋Œ€ peer ์˜ ์ •๋ณด๋ฅผ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • Exchanging session descriptions(์„ธ์…˜ ์„ค๋ช… ๊ตํ™˜) : offer, answer
    • Exchanging ICE candidates(ICE ํ›„๋ณด์ž ๊ตํ™˜) : ICE candidates

1. Fetching

  • webRTC API ์ธ MediaStream, getUserMedia ๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž์˜ ์˜์ƒ ๋ฐ ์Œ์„ฑ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ์ถ”์ถœํ•œ video ๋‚˜ audio ๋ฐ์ดํ„ฐ ํŠธ๋ž™๋“ค์„ Peer-to-Peer ์—ฐ๊ฒฐ ์•ˆ์—๋‹ค๊ฐ€ ๋‹ด์•„์•ผํ•œ๋‹ค. 
  • ๊ทธ๋ž˜์„œ RTCPeerConnection ๊ฐ์ฒด์— addTrack ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ video ๋‚˜ audio ๋ฐ์ดํ„ฐ ํŠธ๋ž™๋“ค์„ stream์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

์ด์ œ ๋ฉ”์ œ์‹œ๋“ค์„ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ• ์ง€์— ๋Œ€ํ•œ ํ”„๋กœํ† ์ฝœ์ด ํ•„์š”ํ•˜๋‹ค. ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ค‘์— ํ•˜๋‚˜๊ฐ€ ์‹œ๊ทธ๋„๋ง ๋ฉ”์„ธ์ง€ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.


2. Signaling

Signlaing ๋‹จ๊ณ„๋Š” peer์™€ peer๊ฐ€ ์„œ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์ค‘๊ฐ„ ๋งค๊ฐœ์ž ์—ญํ• ์„ ํ•˜๋Š” ์„œ๋ฒ„์ธ Signaling Server ๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„๋ž€ ๋‘ ์žฅ์น˜๋“ค ์‚ฌ์ด์— webRTC ์ปค๋„ฅ์…˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด, ์ธํ„ฐ๋„ท ๋„คํŠธ์›Œํฌ์—์„œ ๊ทธ ๋‘˜์„ ์—ฐ๊ฒฐ์‹œํ‚ค๋Š” ์ž‘์—…์„ ํ•ด์ฃผ๋Š” ์„œ๋ฒ„๋ฅผ ๋งํ•œ๋‹ค.

  • ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„์˜ ํ”„๋กœ์„ธ์Šค๋Š” offer , answer, ICE candidate 3๊ฐ€์ง€๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.
  • peer์™€ ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„์˜ ํ”„๋กœ์„ธ์Šค ํ†ตํ•ด์„œ RTC๊ฐ€ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

 

2.1 offer

  1. Peer A(ํด๋ผ์ด์–ธํŠธ)์—์„œ offer๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. ์ด offer๋Š” ์„ธ์…˜ ์ •๋ณด๋ฅผ SDP ํฌ๋งท์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ปค๋„ฅ์…˜์ด ์ด์–ด์ง€๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์œ ์ €์—๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. SDP๋Š” ํ•ด์ƒ๋„๋‚˜ ํ˜•์‹ ์ฝ”๋ฑ๋“ฑ์˜ ์ •๋ณด๋“ค์˜ ํฌ๋ฉง ํ˜•์‹์ด๋‹ค.
  3. ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„๋Š” Peer A๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ offer ์„ธ์…˜ ์ •๋ณด๋ฅผ Peer B๋กœ socket ํ†ต์‹ ์œผ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

 

2.2 answer

  1. Peer B์—์„œ๋Š” Peer A์˜ offer์— SDP description์„ ํฌํ•จํ•˜๋Š” answer ๋ฉ”์„ธ์ง€๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์•ผํ•œ๋‹ค.
  2. ์„œ๋ฒ„์—์„œ๋Š” Peer A์—๊ฒŒ answer๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

 

2.3 offer์™€ answer๋ฅผ ๊ตํ™˜ํ•œ ์ด์œ 

offer์™€ answer ์ด๋ฒคํŠธ ํ†ต์‹ ์œผ๋กœ ๋‘ Peer๋“ค์€ ์ด call์— ๋Œ€ํ•œ ์–ด๋–ค ์ฝ”๋ฑ๊ณผ ์–ด๋–ค video parameter๋“ค์ด ์‚ฌ์šฉ๋ ์ง€ ์•Œ๊ฒŒ ๋œ๋‹ค.

 

์ฆ‰, ๋‘ Peer๊ฐ„์˜ ๋ฉ”์„ธ์ง€ ํ”„๋กœํ† ์ฝœ๋ฅผ ์„ค์ •์„ ์™„๋ฃŒํ–ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, ๊ทธ๋“ค์€ ์—ฌ์ „ํžˆ ๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ ์ž์ฒด๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅธ๋‹ค.

์—ฌ๊ธฐ์„œ Interactive Connectivity Establishment (ICE)๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.


3. ICE

  • ICE๋Š” Interactive Connectivity Establishment(์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ์ƒ์„ฑ)์ด๊ณ , ๋ธŒ๋ผ์šฐ์ €๊ฐ€ peer๋ฅผ ํ†ตํ•œ ์—ฐ๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
  • ICE candidate๋Š” webRTC์— ํ•„์š”ํ•œ ํ”„๋กœํ† ์ฝœ๋“ค์„ ์˜๋ฏธํ•˜๋Š”๋ฐ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ์žฅ์น˜์™€ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.
  • ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ICE candidate๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋กœ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ์–ด๋–ค ์†Œํ†ต ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ์ข‹์„ ๊ฒƒ์ธ์ง€๋ฅผ ์ œ์•ˆํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

 

3.1 ICE candidates ๊ตํ™˜

  1. offer๊ณผ answer๋ฅผ ํ†ตํ•ด SDP๋ฅผ ์„œ๋กœ ๊ตํ™˜ํ•œ ํ›„์— ๋‘ Peer๋“ค์€ ICE candidate(ICE ํ›„๋ณด)๋“ค์„ ๊ตํ™˜ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.
  2. ๊ฐ ICE candidate๋Š” ๋ฐœ์‹  Peer ์ž…์žฅ์—์„œ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค.
  3. ๊ฐ Peer๋Š” ๊ฒ€์ƒ‰๋˜๋Š” ์ˆœ์„œ๋Œ€๋กœ candidate๋ฅผ ๋ณด๋‚ด๊ณ  ๋ฏธ๋””์–ด๊ฐ€ ์ด๋ฏธ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์‹œ์ž‘ ํ–ˆ๋”๋ผ๋„ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ candidate๊ฐ€ ์ „์†ก ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์† ๋ณด๋‚ธ๋‹ค.
  4. ๋‘ Peer๊ฐ€ ์„œ๋กœ ํ˜ธํ™˜๋˜๋Š” candidate๋ฅผ ์ œ์•ˆํ–ˆ๋‹ค๋ฉด, ๋ฏธ๋””์–ด๋Š” ํ†ต์‹ ์„ ์‹œ์ž‘ํ•œ๋‹ค.

 

3.2 ICE ๋ฉ”์„ธ์ง€

  • ๊ฐ ICE ๋ฉ”์„ธ์ง€๋“ค์€ ๋‘ ๊ฐœ์˜ ์ปดํ“จํ„ฐ๋ฅผ ์„œ๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋“ค์— ๋ง๋ถ™์—ฌ ํ”„๋กœํ† ์ฝœ(TCP or UDP), IP ์ฃผ์†Œ, ํฌํŠธ ๋„˜๋ฒ„, ์ปค๋„ฅ์…˜ ํƒ€์ž… ๋“ฑ์„ ์ œ์•ˆํ•œ๋‹ค.
  • ์—ฌ๊ธฐ์—๋Š” NAT ํ˜น์€ ๋‹ค๋ฅธ ๋ณต์žกํ•œ ๋„คํŠธ์›Œํ‚น์„ ํฌํ•จํ•œ๋‹ค.

 

3.3 RTCIceCandidate ์ธํ„ฐํŽ˜์ด์Šค

  • ํ•˜๋‚˜์˜ ICE candidate๋Š” WebRTC๊ฐ€ ์›๊ฒฉ ์žฅ์น˜์™€ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์š”๊ตฌ๋˜๋Š” ํ”„๋กœํ† ์ฝœ๊ณผ ๋ผ์šฐํŒ…์— ๋Œ€ํ•ด ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐœ์˜ candidate๋“ค์ด ์—ฐ๊ฒฐ์˜ ๊ฐ end์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ด ๊ณผ์ •์€ ๋กœ์ปฌ ์œ ์ €์™€ ์›๊ฒฉ ์œ ์ €๊ฐ€ ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ์ตœ๊ณ ์˜ ๋ฐฉ๋ฒ•์„ ์„œ๋กœ์˜ ๋™์˜ํ•˜์— ์„ ํƒํ•˜๊ธฐ ์ „๊นŒ์ง€ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.
  • ์ดํ›„์— webRTC๊ฐ€ ์„ ํƒํ•œ candidate๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

3.4 ICE์—์„œ STUN๊ณผ TURN ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

Peer A์—์„œ Peer B๊นŒ์ง€ ๋‹จ์ˆœํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ด์œ ๋Š” ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๋Š” ๋ฐฉํ™”๋ฒฝ์„ ํ†ต๊ณผํ•ด์•ผํ•˜๊ธฐ๋„ ํ•˜๊ณ ,
  • ๋‹จ๋ง์— ํผ๋ธ”๋ฆญ IP๊ฐ€ ์—†๋‹ค๋ฉด ์œ ์ผํ•œ ์ฃผ์†Œ๊ฐ’์„ ํ• ๋‹นํ•ด์•ผํ•  ํ•„์š”๋„ ์žˆ์œผ๋ฉฐ
  • ๋ผ์šฐํ„ฐ๊ฐ€ peer๊ฐ„์˜ ์ง์ ‘์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆด๋ ˆ์ดํ•ด์•ผํ•  ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ICE๋Š” ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด STUN๊ณผ TURN ์„œ๋ฒ„ ๋‘˜๋‹ค ํ˜น์€ ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

STUN๊ณผ TURN์˜ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋”ฐ๋กœ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.  STUN, TURN ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.


์ผ๋ฐ˜์ ์œผ๋กœ Peer Connection์˜ ๊ฒฝ์šฐ๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€๋‹ค.

1. ๋™์ผํ•œ ๋ผ์šฐํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒฝ์šฐ.

  • ๊ฐ™์€ ๋„คํŠธ์›Œํฌ์— ์ ‘์†๋˜์–ด ์žˆ์œผ๋ฉด ๊ฐ๊ฐ์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค
  • STUN๊ณผ TURN์—†์ด๋„ ๊ทธ๋ƒฅ Peer๊ฐ„์˜ ์—ฐ๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

2. ์„œ๋กœ ๋‹ค๋ฅธ ๋ผ์šฐํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ.

  • STUN ์„œ๋ฒ„๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ๊ณต์šฉ IP์ฃผ์†Œ๋ฅผ ์ฐพ๊ฒŒ ํ•ด์ค€๋‹ค.
  • ์ž์‹ ์˜ public IP์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด STUN ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ž์‹ ์˜ public IP์ฃผ์†Œ๋ฅผ ํ† ๋Œ€๋กœ ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์žฅ์น˜๋“ค์ด ์„œ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ์–ด PeerConnection์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

3. STUN ์„œ๋ฒ„์—์„œ ์–ป์€ public IP๋กœ๋„ ์—ฐ๊ฒฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ

  • ์—ฐ๊ฒฐ์„ ์ค‘์žฌํ•ด์ค„ ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์ด ์„œ๋ฒ„๋Š” TURN ์„œ๋ฒ„๋ผ ๋ถ€๋ฅธ๋‹ค.
  • ์ค‘์žฌ ์„œ๋ฒ„์ธ TURN ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด PeerConnection์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

Reference

WebRTC ํ”„๋กœํ† ์ฝœ ์†Œ๊ฐœ
The signaling server
ICE candidates ๊ตํ™˜
RTCIceCandidate ์ธํ„ฐํŽ˜์ด์Šค
ICE ๊ณผ์ •์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด
http://jaynewho.com/post/36
https://inspirit941.tistory.com/346