[Android] WebRTC ๐Ÿ“ฒ

jaeyunn_15ยท2021๋…„ 6์›” 13์ผ
0

Android

๋ชฉ๋ก ๋ณด๊ธฐ
34/39
post-thumbnail

์ตœ๊ทผ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์—์„œ WebRTC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŽ์€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ธ€์„ ๋ณด์•˜๋‹ค.
ํ™”์ƒํšŒ์˜, ์†Œ์…œ ์†Œ๊ฐœํŒ… ๋“ฑ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์—์„œ ์‰ฝ๊ฒŒ ์“ฐ์ผ ์ˆ˜ ์žˆ๊ธฐ์— ์ตœ๊ทผ ์ธ๊ธฐ๋ฅผ ๋Œ๊ณ  ์žˆ๋‹ค. WebRTC๋ผ๋Š” ๋‹จ์–ด๋ฅผ ํ•˜๋„ ๋งŽ์ด ๋ณด๊ฒŒ๋˜์„œ ๋‚ด๊ฐ€ ์ •๋ฆฌ๋ฅผ ํ•ด๋‘๋ ค ํ•œ๋‹ค.

WebRTC ?

  • Web Real-Time Communication
  • ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ์‚ฌ์ดํŠธ๋“ค์ด ๋ณ„๋„์˜ ์†Œํ”„ํŠธ์›จ์–ด ์—†์ด ์Œ์„ฑ, ์˜์ƒ ๋ฏธ๋””์–ด ํ˜น์€ ํ…์ŠคํŠธ, ํŒŒ์ผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋ผ๋ฆฌ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ๊ธฐ์ˆ .
  • WebRTC๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ๋“ค์€ ๋ณ„๋„์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ์—†์ด P2P ํ™”์ƒํšŒ์˜ ๋ฐ ๋ฐ์ดํ„ฐ ๊ณต์œ ๋ฅผ ํ•œ๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ € ์ƒ์—์„œ ์–ด๋– ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋„ ํ•„์š”์—†์ด ์Œ์„ฑ ์ฑ„ํŒ…๊ณผ ํ™”์ƒ ์ฑ„ํŒ…, ๋ฐ์ดํ„ฐ ๊ตํ™˜๊นŒ์ง€ ๊ฐ€๋Šฅํ•œ ๊ธฐ์ˆ 

๊ฐ™์ด ์•Œ์•„์•ผ ํ•  ์šฉ์–ด ๊ฐœ๋…

  • data stream, STUN/TURN servers, signaling, JSEP, ICE, SIP, SDP, NAT, UPD/TCP, network socket ๋“ฑ

ํ†ต์‹  ์›๋ฆฌ


WebRTC ๊ธฐ์ˆ ์€ P2P ํ†ต์‹ ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ๋‹ค.
WebRTC์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ ํฌ๊ฒŒ 3๊ฐ€์ง€์˜ ํด๋ž˜์Šค์— ์˜ํ•ด ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜์ด ์ผ์–ด๋‚œ๋‹ค.

  • MediaStream : ์นด๋ฉ”๋ผ์™€ ๋งˆ์ดํฌ ๋“ฑ์˜ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ ์ ‘๊ทผ
  • RTCPeerConnection : ์•”ํ˜ธํ™” ๋ฐ ๋Œ€์—ญํญ ๊ด€๋ฆฌ ๋ฐ ์˜ค๋””์˜ค, ๋น„๋””์˜ค ์—ฐ๊ฒฐ
  • RTCDataChannel : ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ์˜ P2P ํ†ต์‹ 

์ด 3๊ฐ€์ง€์˜ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ตํ™˜์ด ์ด๋ค„์ง€๋ฉฐ RTCPeerConnection๋“ค์ด
์ ์ ˆํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ณผ์ •์„ ์‹œ๊ทธ๋„๋ง(Signaling)์ด๋ผ๊ณ  ํ•œ๋‹ค.

์œ„ ๊ทธ๋ฆผ์€ ์‹œ๊ทธ๋„๋ง์„ ํ•˜๋Š” ๊ณผ์ •์ด๋ฉฐ PeerConnection์€ 2 ๋ช…์˜ ์œ ์ €๊ฐ€ ์ŠคํŠธ๋ฆผ์„ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์—ฐ๊ฒฐ์„ ์š”์ฒญํ•˜๋Š” ์ฝœ๋Ÿฌ(Caller)์™€ ์—ฐ๊ฒฐ์„ ๋ฐ›๋Š” ์ฝœ๋ฆฌ(Callee)๊ฐ€ ์กด์žฌํ•œ๋‹ค.

์ฝœ๋Ÿฌ์™€ ์ฝœ๋ฆฌ๊ฐ€ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ค‘๊ฐ„ ์—ญํ• ์„ ํ•ด์ฃผ๋Š” ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด SessionDescription์„ ์„œ๋กœ ์ฃผ๊ณ  ๋ฐ›์•„์•ผํ•œ๋‹ค.


์žฅ์ 

Latency๊ฐ€ ์งง๋‹ค.

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

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

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

๊ฐœ๋ฐœ ์‹œ ์ง„์ž… ์žฅ๋ฒฝ์ด ๋‚ฎ๋‹ค.


๋‹จ์ 

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

WebRTC๋Š” ํ˜„์žฌ ํฌ๋กฌ,์˜คํŽ˜๋ผ,ํŒŒ์ด์–ดํญ์Šค ๋ฟ์•„๋‹ˆ๋ผ ์•ˆ๋“œ๋กœ์ด๋“œ, IOS ๋“ฑ ๋ธŒ๋ผ์šฐ์ €, ์•ฑ์—์„œ ํ™œ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. (IE ์ง€์›์€ ์•ˆํ•œ๋‹ค๊ณ  ํ•œ๋‹ค)

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

P2P ํ†ต์‹ ์„ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์šฉ์ž์˜ IP ์ฃผ์†Œ๋ฅผ ์•Œ์•„์•ผํ•œ๋‹ค.
ํ•˜์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋Š” ๋ฐฉํ™”๋ฒฝ ๋“ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ์—ฐ๊ฒฐ์ด ์ด๋ค„์ง€๊ธฐ ์œ„ํ•ด์„œ๋Š” STUN/TURN์„œ๋ฒ„๊ฐ€ ๊ผญ ํ•„์š”ํ•˜๋‹ค.

๊ด€๋ จ ๊ฐœ๋…์„ ์ •๋ฆฌํ•ด๋‘์‹  ๋ธ”๋กœ๊ทธ


์ถ”๊ฐ€ ์„ค์น˜๋ฅผ ๋•์ง€๋•์ง€ํ•ด์•ผํ•˜๋Š” activex, flash๋ฅผ ์ง€์›Œ๋ฒ„๋ฆฌ๊ณ  ๋‹น๋‹นํ•˜๊ฒŒ ์ŠคํŠธ๋ฆฌ๋ฐ ๊ธฐ์ˆ ๋กœ ์ƒ์šฉํ™”๋œ WebRTC์— ๋Œ€ํ•ด์„œ ์‹ค์ œ๋กœ ์ž‘์—…์„ ํ•ด๋ณด๋ฉด์„œ ๋” ์ตํ˜€๋ด์•ผ ํ• ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ถฉ๋ถ„ํ•œ ๋„คํŠธ์›Œํฌ ๊ณต๋ถ€๊ฐ€ ๋ฐ”ํƒ•์ด ๋˜์–ด์•ผ ๊นŠ์€ ์ดํ•ด๊ฐ€ ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

๐Ÿ†’

profile
Android Developer

0๊ฐœ์˜ ๋Œ“๊ธ€