๐ 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๊ณผ ๋น์ทํ ๋ฐฉ์ก์ ํ ์ ์๋ค.
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์ ํต์ ์๋ฆฌ
Peer to Peer ํต์ ์
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ๋์ ์ปดํจํฐ์ ํ๋์ ์ปดํจํฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ์์ด๋ค.
์ฆ, ๋๋ฑ ๊ณ์ธต ๊ฐ ํด๋ผ์ด์ธํธ/์๋ฒ์ ๊ฐ๋ ์ด ์์ด ๋๋ฑํ ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ๋์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
๐ป WebRTC sample API
[1] ๋ฏธ๋์ด ๊ธฐ๊ธฐ ์์ํ๊ธฐ
// 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 ์ฃผ์ ๋ฑ์ ์ฌ๊ธฐ๋กํ๋ฉด์ ๋คํธ์ํฌ ํธ๋ํฝ์ ์ฃผ๊ณ ๋ฐ๋ ๊ธฐ์ ์ด๋ค.
[3] Signaling
์๊ทธ๋๋ง์ P2Pํต์ ์ด ์ผ์ด๋๊ธฐ ์ ( ์ฆ, ๋ฐ์ดํฐ๊ฐ ์ ์ก๋๊ธฐ ์ )์ ์ธ์ ์ ์ด ๋ฉ์ธ์ง, ๋คํธ์ํฌ ๊ตฌ์ฑ, ๋ฏธ๋์ด ๊ธฐ๋ฅ ๋ฑ์ ์ ๋ณด๋ฅผ ๊ตํํ๋๋ฐ ์ฌ์ฉํฉ๋๋ค.
- ์ธ์ ์ ์ด ๋ฉ์ธ์ง : ํต์ ์ ์ด๊ธฐํํ๊ฑฐ๋ ๋ซ๊ณ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํฉ๋๋ค.
- ๋คํธ์ํฌ ๊ตฌ์ฑ : ์ธ๋ถ ์ธ๊ณ์ ์ปดํจํฐ์ IP ์ฃผ์์ ํฌํธ๋ ๋ฌด์์ธ์ง ํ์ ํฉ๋๋ค.
- ๋ฏธ๋์ด ๊ธฐ๋ฅ : ๋ธ๋ผ์ฐ์ ์ ํต์ ํ๋ ค๋ ๋ธ๋ผ์ฐ์ ์์ ์ฒ๋ฆฌํ ์ ์๋ ์ฝ๋ฑ๊ณผ ํด์๋๋ ๋ฌด์์ธ์ง ํ์ ํฉ๋๋ค.
์๊ทธ๋๋ง์ P2P ์คํธ๋ฆฌ๋ฐ์ ์์ํ๊ธฐ ์ ์ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์ด์ผ ํ๋ค.
[4] SDP
SDP(Session Description Protocol)
[5] JSEP
JSEP(JavaScript Session Establishment Protocol)์ ์/์๋ต ์ํคํ ์ฒ
[6] UDP/TCP
์ฉ์ด ๊ด๋ จํด์๋ ๋ฐ๋ก ์ ๋ฆฌํ๋ค.
[ ์ฐธ๊ณ ์๋ฃ ]
1. webrtc.org/
4. www.cometchat.com/blog/webrtc-101-everything-you-need-to-know