WebRTC

[WebRTC] WebRTC๋ž€?

๐Ÿ˜Š WebRTC๋ž€??

  • ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณ„๋„์˜ ์†Œํ”„ํŠธ์›จ์–ด ์—†์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์›น์„ ์œ„ํ•œ ์˜คํ”ˆ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.
  • ๋น„๋””์˜ค์™€ ์Œ์„ฑ ์ฑ„ํŒ… ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์˜ค๋””์˜ค์™€ ๋น„๋””์˜ค์™€ ๊ฐ™์ด ๋†’์€ ํ€„๋ฆฌํ‹ฐ์˜ ์˜์‚ฌ์†Œํ†ต์„ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ๋“ค์„ ํฌํ•จํ•œ๋‹ค.
  • ๋ณดํ†ต ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ• ๋•Œ JavaScript API๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ์ž๋“ค๋กœ ํ•˜์—ฌ๊ธˆ ์‰ฝ๊ฒŒ RTC web app์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋˜ํ•œ WebRTC๋Š” W3C์™€ IETF์—์„œ API๋ ˆ๋ฒจ๊ณผ Protocol ๋ ˆ๋ฒจ์„ ํ‘œ์ค€ํ™”ํ–ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡๋ณด๋‹ค ์„ธ๊ณ„ ์ตœ๊ณ  IT๊ธฐ์—…์ธ Google๊ณผ Mozila, Opera์—์„œ ๋“ ๋“ ํ•˜๊ฒŒ ์ง€์›์„ ํ•ด์ค€๋‹ค.

 

 

๐Ÿง WebRTC๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ• ๊นŒ?

ํ•œ๋ฒˆ WebRTC API๋ฅผ ์‚ดํŽด๋ณด์ž

 

๐Ÿ” getUserMedia 

 

์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ๋””๋ฐ”์ด์Šค๋ฅผ ์ŠคํŠธ๋ฆผ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ๊ฐ€๋ฅผ ๋ฐ›๋Š” API

navigator.mediaDevices.getUserMedia(StreamConstraints).then(function(stream) {
	localStream = stream;
    localVideo.srcObject = stream;
}

 

๐Ÿ” RTCPeerConnection

local Media Stream์œผ๋กœ P2P connection์„ ํ†ตํ•ด RTC object๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค ( ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์Œ์„ฑ๊ณผ ์˜์ƒ์„ ๊ณต์œ  )

RTCPeerConnection์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ„์˜ ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ํ†ต์‹ ์ผ ๋ ๊นŒ?? 

์•„๋ž˜๋Š” ์œ ๋ช…ํ•œ ์—˜๋ฆฌ์Šค์™€ ์ด๋ธŒ์˜ ์ด์•ผ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์ž˜ ์„ค๋ช…ํ•œ ๊ธ€์ด๋‹ค

 

  1. ์•จ๋ฆฌ์Šค๊ฐ€ RTCPeerConnection ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  2. ์•จ๋ฆฌ์Šค๊ฐ€ *createOffer()* ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ์•ˆ(SDP Session Description)์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  3. ์•จ๋ฆฌ์Šค๊ฐ€ ์ œ์•ˆ๊ณผ ํ•จ๊ป˜ *setLocalDescription()*๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

  4. ์•จ๋ฆฌ์Šค๋Š” ์ œ์•ˆ์„ ๋ฌธ์ž์—ดํ™”ํ•˜๊ณ  ์‹œ๊ทธ๋„๋ง ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ์ด๋ธŒ์—๊ฒŒ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

  5. ์ด๋ธŒ๋Š” ์•จ๋ฆฌ์Šค์˜ ์ œ์•ˆ์„ ๊ฐ€์ง€๊ณ  *setRemoteDescription()*๋ฅผ ํ˜ธ์ถœํ•˜์˜€์œผ๋ฏ€๋กœ ๊ทธ๋…€์˜ RTCPeerConnection๊ฐ€ ์•จ๋ฆฌ์Šค์˜ ์„ค์ •์„ ์•Œ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

  6. ์ด๋ธŒ๋Š” em>createAnswer()๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ด์— ๋Œ€ํ•ด ๋กœ์ปฌ ์„ธ์…˜ ์ •๋ณด(Local Session Description), ์ฆ‰ ์ด๋ธŒ์˜ **์‘๋‹ต**์„ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋Š” ์„ฑ๊ณต ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

  7. ์ด๋ธŒ๋Š” *setLocalDescription()*์˜ ํ˜ธ์ถœ์„ ํ†ตํ•ด ๊ทธ๋…€์˜ ์‘๋‹ต์„ ๋กœ์ปฌ ๊ธฐ์ˆ (Description)์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  8. ๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ ์ด๋ธŒ๋Š” ์‹œ๊ทธ๋„๋ง ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋…€์˜ ๋ฌธ์ž์—ดํ™”๋œ ์‘๋‹ต์„ ์•จ๋ฆฌ์Šค์—๊ฒŒ ๋‹ค์‹œ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

  9. ์•จ๋ฆฌ์Šค๋Š” *setRemoteDescription()*์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ธŒ์˜ ์‘๋‹ต์„ ์›๊ฒฉ ์„ธ์…˜ ๊ธฐ์ˆ (Description)์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  : www.html5rocks.com/ko/tutorials/webrtc/infrastructure/

 

 

๐Ÿ” Data Channel

WebRTC์—์„œ Audio, Video๋งŒ์ด ๋Œ€์ƒ์ด ์•„๋‹ˆ๋‹ค. ๋ชจ๋“  ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” API

๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค

 

 

WebRTC๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ๋‹คํ–‰ํžˆ ํ˜„์žฌ ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ WebRTC ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

WebRTC๋ฅผ ์œ„ํ•ด์„œ๋Š” ์„œ๋ฒ„ ์—ญ์‹œ ์ค‘์š”ํ•œ๋ฐ,  Signalling Server, STUN, TURN, Media Server๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

์•ž์œผ๋กœ WebRTC๋ฅผ ์œ„ํ•œ ์„œ๋ฒ„์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค.

 

์ฐธ๊ณ  : https://www.youtube.com/watch?v=YWjfs4aWKMc

 

๊ถ๊ธˆํ•˜์‹  ๊ฒƒ์ด ์žˆ๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ๊ฒŒ ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€ ๋‹ฌ์•„์ฃผ์„ธ์š”!

 

๋ฐ˜์‘ํ˜•

'WebRTC' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[WebRTC] TURN ์„œ๋ฒ„์˜ ํ•„์š”์„ฑ  (2) 2021.02.08
[WebRTC] Signaling Server ( ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„ )  (0) 2020.12.22