WebRTC

[WebRTC] WebRTC๋ž€ ๋ฌด์—‡์ผ๊นŒ?

GaGah 2020. 12. 22. 01:28

๐ŸŽž WebRTC๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

Web Real-Time Communication์˜ ์•ฝ์ž๋กœ ์›น/์•ฑ์—์„œ ๋ณ„๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด ์—†์ด ์นด๋ฉ”๋ผ, ๋งˆ์ดํฌ ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

  • ์šฐ๋ฆฌ๊ฐ€ ์ž˜ ์•Œ๊ณ ์žˆ๋Š” ํ™”์ƒํ†ตํ™”, ํ™”์ƒ ๊ณต์œ ๋“ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ์†Œ์Šค
  • ๋น„๋””์˜ค, ์Œ์„ฑ ๋ฐ ์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ๊ฐ€ P2P๋ฐฉ์‹์œผ๋กœ ํ”ผ์–ด๊ฐ„์˜ ์ „์†ก๋˜๋„๋ก ์ง€์›
  • JavaScript API๋กœ ์ œ๊ณต
  • ์•Œ์•„์•ผํ•  ์šฉ์–ด ๋ฐ ๊ฐœ๋…
    • data streams, STUN/TURN servers, signaling, JSEP, ICE, SIP, SDP, NAT, UDP/TCP, network socket ๋“ฑ 

 

๐Ÿ’‍โ™€๏ธ WebRTC์˜ ์žฅ์ ๊ณผ ๋‹จ์ 

1. ์žฅ์ 

[1] Latency๊ฐ€ ์งง๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์•Œ๊ณ ์žˆ๋Š” ์ธ์Šคํƒ€๋ผ์ด๋ธŒ, ์œ ํŠœ๋ธŒ๋ผ์ด๋ธŒ, ํŠธ์œ„์น˜ ๋“ฑ์€ RTMP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ํ•˜๊ณ  ์žˆ๋‹ค.

๊ทธ์— ๋ฐ˜ํ•ด WebRTC๋Š” ๋‚ฎ์€ Latency๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  REAL-TIME๊ณผ ๋น„์Šทํ•œ ๋ฐฉ์†ก์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ถœ์ฒ˜ : https://www.google.com/url?sa=i&url=http%3A%2F%2Fwww.castware.co.kr%2F&psig=AOvVaw2fGjWhQzaDRPS3nutenxaY&ust=1610809531386000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCMjRnqWbnu4CFQAAAAAdAAAAABAJ

cf) WebRTC๋ณด๋‹ค Latency๊ฐ€ ์งง์€ ๊ธฐ์ˆ ๋„ ์กด์žฌํ•˜๋Š”๋ฐ, ์™œ ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ WebRTC๋ฅผ ๊ตฌ๊ธ€์—์„œ ๋ฐ€๊ณ  ๋งˆ์ผ€ํŒ…๋„ ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

[2] ๋ณ„ ๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด ์—†์ด ์‹ค์‹œ๊ฐ„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์›น/์•ฑ์œผ๋กœ ๋ฐฉ์†ก์„ ํ‚ค๊ณ  ์‹ถ์„ ๋•Œ, ๋ณ„๋„์˜ ํ”Œ๋Ÿฌ๊ทธ ์ธ์ด๋‚˜ ๋ฏธ๋””์–ด ์†ก์ถœ ๊ด€๋ จ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋”ฐ๋กœ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

[3] ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์žˆ์–ด ์ง„์ž…์žฅ๋ฒฝ์ด ๋‚ฎ๋‹ค.

 

[4] ๋ฌด๋ฃŒ๋‹ค.


2. ๋‹จ์ 

[1] ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ๋ฌธ์ œ

WebRTC๋Š” ํ˜„์žฌ Chrome, Opera, Firefox ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์•ˆ๋“œ๋กœ์ด๋“œ, iOS ๋“ฑ ๋ธŒ๋ผ์šฐ์ €, ์•ฑ์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, ์‚ฌ๋žŒ๋“ค์ด ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๋‚˜ ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

Internet Explorer๋Š” ์ง€์›๋˜์ง€์•Š์Œ.

 

[2] STUN/TURN ์„œ๋ฒ„ ํ•„์š”

Peer to Peer ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์šฉ์ž์˜ IP์ฃผ์†Œ๋ฅผ ์•Œ์•„์•ผํ•œ๋‹ค.

ํ•˜์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋Š” ๋ฐฉํ™”๋ฒฝ๋“ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์—ฐ๊ฒฐ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ์œ„ํ•ด์„œ๋Š”

STUN/TURN ์„œ๋ฒ„๊ฐ€ ๊ผญ ํ•„์š”ํ•˜๋‹ค. 

 

๊ด€๋ จ๊ฐœ๋… ์ •๋ฆฌํ•ด๋†“์€ ์ž๋ฃŒ : gh402.tistory.com/45

 

[WebRTC] NAT, ICE, STUN, TURN ์ด๋ž€? ( WebRTC๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ง€์‹๋“ค)

NAT(Network Address Translation) '๋‚˜'๋Š” ๋ˆ„๊ตฌ์ธ์ง€ '์ด๋ฆ„'์œผ๋กœ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ๋“ฏ, ๊ฐ ๊ธฐ๊ธฐ์—๋„ ์ž์‹ ๋งŒ์˜ ์ด๋ฆ„์ด ์žˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ IP์ด๊ณ  ์ด IP๋Š” ๊ณ ์ •IP, ์œ ๋™IP ๋“ฑ์œผ๋กœ ๋‚˜๋‰˜์–ด์„œ ์‹ค์ œ ๊ณ ์œ ์˜ ๊ฐ’์ผ ์ˆ˜๋„ ์žˆ๊ณ 

gh402.tistory.com

๊ด€๋ จ ๊ฐœ๋…์€ ์ด ํŽ˜์ด์ง€์— ์ •๋ฆฌ๋ฅผ ํ•ด๋‘์—ˆ๋‹ค. 

 

 

๐Ÿ“ช WebRTC์˜ ํ†ต์‹ ์›๋ฆฌ

์ถœ์ฒ˜ : https://www.cometchat.com/blog/webrtc-101-everything-you-need-to-know

Peer to Peer ํ†ต์‹ ์€

์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ์™€ ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ํ˜•์‹์ด๋‹ค.

์ฆ‰, ๋™๋“ฑ ๊ณ„์ธต ๊ฐ„ ํด๋ผ์ด์–ธํŠธ/์„œ๋ฒ„์˜ ๊ฐœ๋…์ด ์—†์ด ๋™๋“ฑํ•œ ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค.

 

 

๐Ÿ’ป WebRTC sample API

[1] ๋ฏธ๋””์–ด ๊ธฐ๊ธฐ ์‹œ์ž‘ํ•˜๊ธฐ

media๊ธฐ๊ธฐ์— ์ ‘๊ทผํ•  ๋•Œ alert

// getUserMedia()
async function init(e) {
  try {
    const stream = await navigator.mediaDevices.getUserMedia(constraints);
    handleSuccess(stream);
    e.target.disabled = true;
  } catch (e) {
    handleError(e);
  }
}

document.querySelector('#showVideo').addEventListener('click', e => init(e));

 

 

  • media ๊ธฐ๊ธฐ(์นด๋ฉ”๋ผ, ๋งˆ์ดํฌ)์— ์ ‘๊ทผํ•œ๋‹ค. 
  • alert์œผ๋กœ ๋งˆ์ดํฌ์™€ ์นด๋ฉ”๋ผ ํ—ˆ์šฉ/๊ฑฐ๋ถ€ ๋“ฑ์œผ๋กœ Permission์ด ๋œฌ๋‹ค.
  • drawImage()๋ฅผ ํ†ตํ•ด ์ˆœ๊ฐ„ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ์ด๋ฏธ์ง€์— filter๋ฅผ ์”Œ์šธ ์ˆ˜๋„ ์žˆ๋‹ค.
  • audio๋งŒ ๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉํ• ์ˆ˜๋„ ์žˆ๊ณ  ๋…นํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋„ ์žˆ๋‹ค.

 

 

 

  [2] RTCPeerConnection

  • ๋‘ Peer๊ฐ„์˜ ์•ˆ์ •์ ์ด๊ณ  ํšจ์œจ์ ์ธ ํ†ต์‹ ์„ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค.
  • ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋„คํŠธ์›Œํฌ์—์„œ๋„ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค.
  • Chrome, Opera, Firefox์—์„œ ์ง€์›

 

  [3] RTCDataChannel

  • Peer ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ๋‹ค.
  • text, file, data ๋“ฑ์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  [4] Other

  • Select sources & outputs : ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜ค๋””์˜ค, ๋น„๋””์˜ค ๋“ฑ์ด ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
  • Stream capture : ์žฌ์ƒํ•˜๊ณ  ์žˆ๋Š” ๋น„๋””์˜ค๋ฅผ captureํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ

 

 

5. ์•Œ์•„์•ผํ•  ์šฉ์–ด

[1] data streams

์—ฐ๊ฒฐ์ง€ํ–ฅํ†ต์‹ ์—์„œ ์—ฐ์†์ ์œผ๋กœ ํ˜๋Ÿฌ๋‚˜์˜ค๋Š” ๋ฐ์ดํ„ฐ๋“ค์˜ ํ๋ฆ„

๋ฐ์ดํ„ฐ์˜ ์–‘์ด ํ•œ์ •๋˜์–ด ์žˆ์ง€์•Š๊ณ  ๋Š์ž„์—†์ด ์ƒ์„ฑ๋˜๊ณ  ๋ณ€ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„

 

[2] NAT(Network Address Translation)

NAT๋Š” ๋„คํŠธ์›Œํฌ ์ฃผ์†Œ ๋ณ€ํ™˜์œผ๋กœ IPํŒจํ‚ท์˜ TCP/UDP ํฌํŠธ ์ˆซ์ž์™€ ์†Œ์Šค ๋ฐ ๋ชฉ์ ์ง€์˜ IP ์ฃผ์†Œ ๋“ฑ์„ ์žฌ๊ธฐ๋กํ•˜๋ฉด์„œ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

 

์ถœ์ฒ˜ : https://www.html5rocks.com/en/tutorials/webrtc/basics/

 

 

[3] Signaling

์‹œ๊ทธ๋„๋ง์€ P2Pํ†ต์‹ ์ด ์ผ์–ด๋‚˜๊ธฐ ์ „( ์ฆ‰, ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก๋˜๊ธฐ ์ „)์— ์„ธ์…˜ ์ œ์–ด ๋ฉ”์„ธ์ง€, ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ, ๋ฏธ๋””์–ด ๊ธฐ๋Šฅ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

  • ์„ธ์…˜ ์ œ์–ด ๋ฉ”์„ธ์ง€ : ํ†ต์‹ ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜ ๋‹ซ๊ณ  ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ : ์™ธ๋ถ€ ์„ธ๊ณ„์— ์ปดํ“จํ„ฐ์˜ IP ์ฃผ์†Œ์™€ ํฌํŠธ๋Š” ๋ฌด์—‡์ธ์ง€ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฏธ๋””์–ด ๊ธฐ๋Šฅ : ๋ธŒ๋ผ์šฐ์ €์™€ ํ†ต์‹ ํ•˜๋ ค๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋ฑ๊ณผ ํ•ด์ƒ๋„๋Š” ๋ฌด์—‡์ธ์ง€ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค.  

์‹œ๊ทธ๋„๋ง์€ P2P ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 

[4] SDP

SDP(Session Description Protocol) 

 

 

[5] JSEP

JSEP(JavaScript Session Establishment Protocol)์ œ์•ˆ/์‘๋‹ต ์•„ํ‚คํ…์ฒ˜

 

์ถœ์ฒ˜ : https://www.html5rocks.com/en/tutorials/webrtc/basics/

[6] UDP/TCP

 

 

์šฉ์–ด ๊ด€๋ จํ•ด์„œ๋Š” ๋”ฐ๋กœ ์ •๋ฆฌํ–ˆ๋‹ค.

gh402.tistory.com/45

 

[WebRTC] NAT, ICE, STUN, TURN ์ด๋ž€? ( WebRTC๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ง€์‹๋“ค)

NAT(Network Address Translation) '๋‚˜'๋Š” ๋ˆ„๊ตฌ์ธ์ง€ '์ด๋ฆ„'์œผ๋กœ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ๋“ฏ, ๊ฐ ๊ธฐ๊ธฐ์—๋„ ์ž์‹ ๋งŒ์˜ ์ด๋ฆ„์ด ์žˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ IP์ด๊ณ  ์ด IP๋Š” ๊ณ ์ •IP, ์œ ๋™IP ๋กœ ๋‚˜๋‰˜์–ด์„œ ์‹ค์ œ ๊ณ ์œ ์˜ ๊ฐ’์ผ ์ˆ˜๋„ ์žˆ๊ณ  ์•„๋‹

gh402.tistory.com

 

 

 

[ ์ฐธ๊ณ ์ž๋ฃŒ ]

1. webrtc.org/

2. webrtc.github.io/samples/

3. gocoder.tistory.com/1928

4. www.cometchat.com/blog/webrtc-101-everything-you-need-to-know

5. www.html5rocks.com/en/tutorials/webrtc/basics/

LIST