๋ค์ํ ๊ธ๋ก๋ฒ ํ๋ซํผ์์ ์ํํ๊ณ ๊ณ ํ์ง์ ์ค์๊ฐ ๋ฏธ๋์ด ํต์ ์ ์ํ WebRTC ์ฝ๋ฑ ์ ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ง์คํฐํ์ธ์.
ํ๋ก ํธ์๋ WebRTC ๋ฏธ๋์ด ํ์: ์ฝ๋ฑ ์ ํ ์๊ณ ๋ฆฌ์ฆ ํด๋
์ค์๊ฐ ํต์ (RTC)์ ์ญ๋์ ์ธ ์ธ๊ณ์์ WebRTC๋ ํผ์ด ํฌ ํผ์ด ์ค๋์ค, ๋น๋์ค ๋ฐ ๋ฐ์ดํฐ ์ฑ๋์ ์น ๋ธ๋ผ์ฐ์ ๋ด์์ ์ง์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ค์ํ ๊ธฐ์ ์ ๋๋ค. ์ด๋ฌํ ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๋ฐ ์์ด ์ค์ํ์ง๋ง ์ข ์ข ๋ณต์กํ ์ธก๋ฉด์ ๋ฏธ๋์ด ํ์ ํ๋ก์ธ์ค, ํนํ ์ฝ๋ฑ ์ ํ์ ๋ณต์กํ ์ํธ ์์ฉ์ ๋๋ค. ์ด ํ๋ก์ธ์ค๋ WebRTC ํตํ์ ์์ธก์ด ๊ตํ๋๋ ๋ฏธ๋์ด ์คํธ๋ฆผ์ ์ดํดํ๊ณ ๋ ๋๋งํ ์ ์๋๋ก ํฉ๋๋ค. ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์๊ฒ ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ๊น์ ์ดํด๋ ๊ฐ๋ ฅํ๊ณ ๊ณ ํ์ง์ด๋ฉฐ ๋ณดํธ์ ์ผ๋ก ํธํ๋๋ RTC ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
๊ธฐ๋ฐ: ์ธ์ ์ค๋ช ํ๋กํ ์ฝ (SDP)
WebRTC ๋ฏธ๋์ด ํ์์ ํต์ฌ์๋ ์ธ์ ์ค๋ช ํ๋กํ ์ฝ (SDP)์ด ์์ต๋๋ค. SDP๋ ๋ฉํฐ๋ฏธ๋์ด ์ธ์ ์ ์ค๋ช ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํ ์คํธ ๊ธฐ๋ฐ ํ์์ ๋๋ค. ๋ฏธ๋์ด ์์ฒด๋ฅผ ์ ์กํ๋ ๊ฒ์ด ์๋๋ผ ์ธ์ ์ ๊ธฐ๋ฅ ๋ฐ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ ํผ์ด๊ฐ WebRTC ์ฐ๊ฒฐ์ ์์ํ๋ฉด SDP ์ ์ ๋ฐ ์๋ต์ ๊ตํํฉ๋๋ค. ์ด ๊ตํ์ ๋ค์์ ์์ธํ ์ค๋ช ํฉ๋๋ค.
- ์ ์ก๋๋ ๋ฏธ๋์ด ์ ํ (์ค๋์ค, ๋น๋์ค, ๋ฐ์ดํฐ).
- ๊ฐ ๋ฏธ๋์ด ์ ํ์ ๋ํด ์ง์๋๋ ์ฝ๋ฑ.
- ๋ฏธ๋์ด ์ก์์ ์ ์ํ ๋คํธ์ํฌ ์ฃผ์ ๋ฐ ํฌํธ.
- ์ํธํ, ๋์ญํญ ๋ฑ ๊ธฐํ ์ธ์ ๋ณ ๋งค๊ฐ๋ณ์.
์ฝ๋ฑ ์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ด SDP ๊ตํ ๋ด์์ ์๋ํฉ๋๋ค. ๊ฐ ํผ์ด๋ ์ง์ํ๋ ์ฝ๋ฑ์ ๊ด๊ณ ํ๊ณ ์ผ๋ จ์ ํ์์ ํตํด ๋ ๋ค ํ์ฉํ ์ ์๋ ๊ณตํต ์ฝ๋ฑ ์ธํธ์ ๋๋ฌํฉ๋๋ค. ๋ค์ํ ๋ธ๋ผ์ฐ์ , ์ด์ ์ฒด์ ๋ฐ ํ๋์จ์ด๊ฐ ๋ค์ํ ํจ์จ์ฑ๊ณผ ํ์ง ์์ค์ผ๋ก ๋ค๋ฅธ ์ฝ๋ฑ์ ์ง์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ๋ณต์ก์ฑ์ด ๋ฐ์ํ๋ ๋ถ๋ถ์ ๋๋ค.
WebRTC์ ์ฝ๋ฑ ์ดํด
์ ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ ์ ์ ์ฝ๋ฑ์ด ๋ฌด์์ด๋ฉฐ ์ ์ค์ํ์ง ๊ฐ๋ตํ๊ฒ ์ ์ํด ๋ณด๊ฒ ์ต๋๋ค.
- ์ฝ๋ฑ (์ฝ๋-๋์ฝ๋): ์ฝ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ์์ถ ๋ฐ ์์ถ ํด์ ํ๋ ์ฅ์น ๋๋ ํ๋ก๊ทธ๋จ์ ๋๋ค. WebRTC์์ ์ฝ๋ฑ์ ์์ ์ค๋์ค ๋ฐ ๋น๋์ค ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํ๊ธฐ์ ์ ํฉํ ํ์์ผ๋ก ์ธ์ฝ๋ฉ(์์ถ)ํ๊ณ ์์ ์ธก์์ ์ฌ์ ๊ฐ๋ฅํ ํ์์ผ๋ก ์์ถ๋ ๋ฐ์ดํฐ๋ฅผ ๋์ฝ๋ฉ(์์ถ ํด์ )ํ๋ ์ญํ ์ ํฉ๋๋ค.
- ๋ชฉ์ : ์ฃผ์ ๋ชฉ์ ์ ๋ฏธ๋์ด ์คํธ๋ฆผ ์ ์ก์ ํ์ํ ๋์ญํญ์ ์ค์ฌ ์ ํ๋ ์ฉ๋์ ๋คํธ์ํฌ์์๋ ์ค์๊ฐ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฒ์ ๋๋ค. ๋ํ ๋ค๋ฅธ ์ฅ์น ๋ฐ ํ๋ซํผ ๊ฐ์ ํธํ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
WebRTC๋ ์ผ๋ฐ์ ์ผ๋ก ๋ค์ํ ์ค๋์ค ๋ฐ ๋น๋์ค ์ฝ๋ฑ์ ์ง์ํฉ๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ฝ๋ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ค๋์ค ์ฝ๋ฑ:
- Opus: WebRTC ์ค๋์ค์ ์ฌ์ค์ ํ์ค์ ๋๋ค. ์์ฑ๊ณผ ์์ ๋ชจ๋์ ๋ํด ์ค๊ณ๋ ๋ค์ฉ๋, ์คํ ์์ค ๋ฐ ๋ก์ดํฐ ํ๋ฆฌ ์ฝ๋ฑ์ผ๋ก, ๊ด๋ฒ์ํ ๋คํธ์ํฌ ์กฐ๊ฑด ๋ฐ ๋นํธ ์ ์ก๋ฅ ์์ ์ฐ์ํ ํ์ง์ ์ ๊ณตํฉ๋๋ค. ๋ชจ๋ WebRTC ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ ฅํ ๊ถ์ฅ๋ฉ๋๋ค.
- G.711 (PCMU/PCMA): ๊ตฌํ์ด๋ฉฐ ๋๋ฆฌ ํธํ๋๋ ์ฝ๋ฑ์ด์ง๋ง ์ผ๋ฐ์ ์ผ๋ก Opus๋ณด๋ค ํจ์จ์ฑ์ด ๋จ์ด์ง๋๋ค. PCMU(ฮผ-law)๋ ๋ถ๋ฏธ ๋ฐ ์ผ๋ณธ์์ ํํ ์ฌ์ฉ๋๋ฉฐ, PCMA(A-law)๋ ์ ๋ฝ ๋ฐ ๊ธฐํ ์ง์ญ์์ ์ฌ์ฉ๋ฉ๋๋ค.
- iSAC: Google์์ ๊ฐ๋ฐํ ๋ ๋ค๋ฅธ ๊ด๋์ญ ์ค๋์ค ์ฝ๋ฑ์ผ๋ก, ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด์ ์ ์ํ๋ ๋ฅ๋ ฅ์ผ๋ก ์๋ ค์ ธ ์์ต๋๋ค.
- ILBC: ์ ๋์ญํญ์ ์ํด ์ค๊ณ๋ ๊ตฌํ ํ๋์ญ ์ฝ๋ฑ์ ๋๋ค.
๋น๋์ค ์ฝ๋ฑ:
- VP8: Google์์ ๊ฐ๋ฐํ ์คํ ์์ค, ๋ก์ดํฐ ํ๋ฆฌ ๋น๋์ค ์ฝ๋ฑ์ ๋๋ค. ๋๋ฆฌ ์ง์๋๋ฉฐ ์ข์ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- VP9: VP8์ ํ์ ์ ํ์ผ๋ก, ์ ์ฌํ ๋นํธ ์ ์ก๋ฅ ์์ ํฅ์๋ ์์ถ ํจ์จ์ฑ๊ณผ ๋ ๋์ ํ์ง์ ์ ๊ณตํฉ๋๋ค. ๋ํ Google์ ์คํ ์์ค ๋ฐ ๋ก์ดํฐ ํ๋ฆฌ ์ฝ๋ฑ์ ๋๋ค.
- H.264 (AVC): ๋งค์ฐ ํจ์จ์ ์ด๊ณ ๋๋ฆฌ ์ฑํ๋ ๋ ์ ๋น๋์ค ์ฝ๋ฑ์ ๋๋ค. ๋งค์ฐ ์ผ๋ฐ์ ์ด์ง๋ง ๋ผ์ด์ ์ค๊ฐ ์ผ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๊ณ ๋ ค ์ฌํญ์ด ๋ ์ ์์ง๋ง ๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ๋ WebRTC์ฉ์ผ๋ก ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- H.265 (HEVC): H.264๋ณด๋ค ํจ์ฌ ํจ์จ์ ์ธ ํ์ ์ ํ์ด์ง๋ง ๋ผ์ด์ ์ค๊ฐ ๋ ๋ณต์กํฉ๋๋ค. WebRTC์์ HEVC ์ง์์ H.264๋ณด๋ค ๋ ๋ณดํธ์ ์ ๋๋ค.
์คํ ์ค์ธ ์ฝ๋ฑ ์ ํ ์๊ณ ๋ฆฌ์ฆ
์ฝ๋ฑ ์ ํ ํ๋ก์ธ์ค๋ ์ฃผ๋ก SDP ์ ์/์๋ต ๋ชจ๋ธ์ ์ํด ์ฃผ๋๋ฉ๋๋ค. ์๋ ๋ฐฉ์์ ๋ํ ๊ฐ์ํ๋ ๋ถ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1๋จ๊ณ: ์ ์
WebRTC ํผ์ด(ํผ์ด A๋ผ๊ณ ๊ฐ์ )๊ฐ ํตํ๋ฅผ ์์ํ๋ฉด SDP ์ ์์ ์์ฑํฉ๋๋ค. ์ด ์ ์์๋ ์ง์ํ๋ ๋ชจ๋ ์ค๋์ค ๋ฐ ๋น๋์ค ์ฝ๋ฑ๊ณผ ๊ด๋ จ ๋งค๊ฐ๋ณ์ ๋ฐ ๊ธฐ๋ณธ ์์๊ฐ ํฌํจ๋ฉ๋๋ค. ์ ์์ ์ ํธ ์๋ฒ๋ฅผ ํตํด ๋ค๋ฅธ ํผ์ด(ํผ์ด B)๋ก ์ ์ก๋ฉ๋๋ค.
SDP ์ ์์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ชจ์ต์ ๋๋ค (๊ฐ์ํ๋ ์ค๋ํซ):
v=0 ... a=rtpmap:102 opus/48000/2 a=rtpmap:103 VP8/90000 a=rtpmap:104 H264/90000 ...
์ด ์ค๋ํซ์์:
a=rtpmap
์ค์ ์ฝ๋ฑ์ ์ค๋ช ํฉ๋๋ค.- ์ซ์ (์: 102, 103)๋ ์ธ์ ๋ด์์ ์ฝ๋ฑ์ ๋ก์ปฌ ์๋ณ์์ธ ํ์ด๋ก๋ ์ ํ์ ๋๋ค.
opus/48000/2
๋ ์ํ ์๋ 48000Hz ๋ฐ 2 ์ฑ๋(์คํ ๋ ์ค)์ธ Opus ์ฝ๋ฑ์ ๋ํ๋ ๋๋ค.VP8/90000
๋ฐH264/90000
๋ ์ผ๋ฐ์ ์ธ ๋น๋์ค ์ฝ๋ฑ์ ๋๋ค.
2๋จ๊ณ: ์๋ต
ํผ์ด B๋ SDP ์ ์์ ๋ฐ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ํผ์ด A์ ์ง์ ์ฝ๋ฑ ๋ชฉ๋ก์ ๊ฒํ ํ๊ณ ์์ฒด ์ง์ ์ฝ๋ฑ ๋ชฉ๋ก๊ณผ ๋น๊ตํฉ๋๋ค. ๋ชฉํ๋ ๋ ํผ์ด ๋ชจ๋ ์ฒ๋ฆฌํ ์ ์๋ ๊ฐ์ฅ ๋์ ๊ณตํต ์ฝ๋ฑ์ ์ฐพ๋ ๊ฒ์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๊ณตํต ์ฝ๋ฑ์ ์ ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํผ์ด A์ ๊ด๊ณ ๋ ์ฝ๋ฑ์ ๋ฐ๋ณตํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ์์ ํ์๋ ์์๋๋ก (์ข ์ข ํผ์ด A์ ๊ธฐ๋ณธ ์ค์ ์ ๋ฐ์ํจ).
- ํผ์ด A ๋ชฉ๋ก์ ๊ฐ ์ฝ๋ฑ์ ๋ํด ํผ์ด B๋ ํด๋น ์ฝ๋ฑ์ ์ง์ํ๋์ง ํ์ธํฉ๋๋ค.
- ์ผ์นํ๋ ํญ๋ชฉ์ ์ฐพ์ ๊ฒฝ์ฐ: ์ด ์ฝ๋ฑ์ ํด๋น ๋ฏธ๋์ด ์ ํ(์ค๋์ค ๋๋ ๋น๋์ค)์ ๋ํด ์ ํ๋ ์ฝ๋ฑ์ด ๋ฉ๋๋ค. ํผ์ด B๋ ์ด ์ ํ๋ ์ฝ๋ฑ๊ณผ ํด๋น ๋งค๊ฐ๋ณ์๋ฅผ ํฌํจํ๋ SDP ์๋ต์ ์์ฑํ๊ณ ํ์ด๋ก๋ ์ ํ์ ํ ๋นํฉ๋๋ค. ์๋ต์ ์ ํธ ์๋ฒ๋ฅผ ํตํด ํผ์ด A๋ก ๋ค์ ์ ์ก๋ฉ๋๋ค.
- ๋ชจ๋ ์ฝ๋ฑ์ ํ์ธํ ํ ์ผ์นํ๋ ํญ๋ชฉ์ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ: ์ด๋ ํด๋น ๋ฏธ๋์ด ์ ํ์ ๋ํ ๊ณตํต ์ฝ๋ฑ ํ์ ์คํจ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ํผ์ด B๋ ํด๋น ๋ฏธ๋์ด ์ ํ์ ์๋ต์์ ์๋ตํ๊ฑฐ๋ (ํตํ์ ๋ํด ์ค๋์ค ๋๋ ๋น๋์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋นํ์ฑํ) ๋์ฒด ํ์์ ์๋ํ ์ ์์ต๋๋ค.
ํผ์ด B์ SDP ์๋ต์ ํฉ์๋ ์ฝ๋ฑ์ ํฌํจํฉ๋๋ค.
v=0 ... m=audio 9 UDP/TLS/RTP/SAVPF 102 ... a=rtpmap:102 opus/48000/2 ... m=video 9 UDP/TLS/RTP/SAVPF 103 ... a=rtpmap:103 VP8/90000 ...
์๋ต์ ์ด์ ํผ์ด B๊ฐ ํฉ์๋ ์ฝ๋ฑ์ ์ฌ์ฉํ ํ์ด๋ก๋ ์ ํ(์: Opus์ ๊ฒฝ์ฐ 102, VP8์ ๊ฒฝ์ฐ 103)์ ์ง์ ํ์์ ์ ์ ์์ต๋๋ค.
3๋จ๊ณ: ์ฐ๊ฒฐ ์ค์
๋ ํผ์ด๊ฐ SDP ์ ์ ๋ฐ ์๋ต์ ๊ตํํ๊ณ ๊ณตํต ์ฝ๋ฑ์ ๋์ํ๋ฉด ๋ฏธ๋์ด ๊ตํ์ ์์ํ๊ธฐ ์ํ ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ WebRTC ์คํ์ ์ด ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏธ๋์ด ์ ์ก(UDP๋ฅผ ํตํ RTP)์ ๊ตฌ์ฑํ๊ณ ํผ์ด ํฌ ํผ์ด ์ฐ๊ฒฐ์ ์ค์ ํฉ๋๋ค.
์ฝ๋ฑ ์ ํ์ ์ํฅ์ ๋ฏธ์น๋ ์์ธ
๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋จํ์ง๋ง (์ฒซ ๋ฒ์งธ ๊ณตํต ์ฝ๋ฑ ์ฐพ๊ธฐ), ์ค์ ๊ตฌํ ๋ฐ ์ ํ๋ ์ฝ๋ฑ์ ์ฌ๋ฌ ์์ธ์ ์ํฅ์ ๋ฐ์ต๋๋ค.
1. ๋ธ๋ผ์ฐ์ ๊ตฌํ ๋ฐ ๊ธฐ๋ณธ๊ฐ
๋ค์ํ ๋ธ๋ผ์ฐ์ (Chrome, Firefox, Safari, Edge)๋ WebRTC์ ์์ฒด ๋ด๋ถ ๊ตฌํ๊ณผ ์์ฒด ๊ธฐ๋ณธ ์ฝ๋ฑ ๊ธฐ๋ณธ ์ค์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Chrome/Chromium ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ๋ ์ผ๋ฐ์ ์ผ๋ก VP8 ๋ฐ Opus๋ฅผ ์ฐ์ ํฉ๋๋ค.
- Firefox๋ Opus ๋ฐ VP8๋ฅผ ์ ํธํ์ง๋ง ํ๋ซํผ์ ๋ฐ๋ผ H.264์ ๋ํด ๋ค๋ฅธ ๊ธฐ๋ณธ ์ค์ ์ ๊ฐ์ง ์ ์์ต๋๋ค.
- Safari๋ ์ญ์ฌ์ ์ผ๋ก H.264 ๋ฐ Opus์ ๋ํ ๊ฐ๋ ฅํ ์ง์์ ์ ๊ณตํ์ต๋๋ค.
์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ SDP ์ ์์ ์ง์๋๋ ์ฝ๋ฑ์ ๋์ดํ๋ ์์๊ฐ ํ์ ๊ฒฐ๊ณผ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ ๊ธฐ๋ณธ ์ค์ , ๊ฐ์ฅ ํจ์จ์ ์ธ ๋๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ง์๋๋ ์ฝ๋ฑ์ ๋จผ์ ๋์ดํฉ๋๋ค.
2. ์ด์ ์ฒด์ ๋ฐ ํ๋์จ์ด ๊ธฐ๋ฅ
๊ธฐ๋ณธ ์ด์ ์ฒด์ ๋ฐ ํ๋์จ์ด๋ ์ฝ๋ฑ ์ง์์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ผ๋ถ ์์คํ ์ ํน์ ์ฝ๋ฑ(์: H.264)์ ๋ํด ํ๋์จ์ด ๊ฐ์ ์ธ์ฝ๋ฉ/๋์ฝ๋ฉ์ ๊ฐ์ง ์ ์์ด ์ฌ์ฉํ๊ธฐ์ ๋ ํจ์จ์ ์ ๋๋ค.
- ๋ชจ๋ฐ์ผ ์ฅ์น๋ ๋ฐ์คํฌํฑ ์ปดํจํฐ์ ๋ค๋ฅธ ์ฝ๋ฑ ์ง์ ํ๋กํ์ ๊ฐ์ง ์ ์์ต๋๋ค.
3. ๋คํธ์ํฌ ์กฐ๊ฑด
SDP ์ด๊ธฐ ํ์์ ์ง์ ์ ์ธ ๋ถ๋ถ์ ์๋์ง๋ง, ๋คํธ์ํฌ ์กฐ๊ฑด์ ์ ํ๋ ์ฝ๋ฑ์ ์ฑ๋ฅ์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. WebRTC์๋ ๋์ญํญ ์ถ์ (BE) ๋ฐ ์ ์์ ์ํ ๋ฉ์ปค๋์ฆ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ฝ๋ฑ์ด ์ ํ๋ ํ:
- ์ ์ ๋นํธ ์ ์ก๋ฅ : Opus ๋ฐ VP9์ ๊ฐ์ ์ต์ ์ฝ๋ฑ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋คํธ์ํฌ ๋์ญํญ์ ๋ฐ๋ผ ๋นํธ ์ ์ก๋ฅ ๋ฐ ํ์ง์ ์กฐ์ ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ํจํท ์์ค ์๋ (PLC): ํจํท์ด ์์ค๋๋ฉด ์ฝ๋ฑ์ ํ์ง ์ ํ๋ฅผ ์ต์ํํ๊ธฐ ์ํด ๋๋ฝ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ธกํ๊ฑฐ๋ ์ฌ๊ตฌ์ฑํ๋ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค.
- ์ฝ๋ฑ ์ ํ (๋ ์ผ๋ฐ์ ): ์ผ๋ถ ๊ณ ๊ธ ์๋๋ฆฌ์ค์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋คํธ์ํฌ ์กฐ๊ฑด์ด ํฌ๊ฒ ๋ณ๊ฒฝ๋๋ฉด ๋์ ์ผ๋ก ์ฝ๋ฑ์ ์ ํํ๋ ค๊ณ ์๋ํ ์ ์์ง๋ง, ์ด๋ ๋ณต์กํ ์์ ์ ๋๋ค.
์ด๊ธฐ ํ์์ ํธํ์ฑ์ ๋ชฉํ๋ก ํ๋ฉฐ, ์ง์์ ์ธ ํต์ ์ ์ ํ๋ ์ฝ๋ฑ์ ์ ์์ ํน์ฑ์ ํ์ฉํฉ๋๋ค.
4. ์ ํ๋ฆฌ์ผ์ด์ ๋ณ ์๊ตฌ ์ฌํญ
๊ฐ๋ฐ์๋ JavaScript API๋ฅผ ํตํด SDP ์ ์/์๋ต์ ์กฐ์ํ์ฌ ์ฝ๋ฑ ์ ํ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ์ด๊ฒ์ ๊ณ ๊ธ ๊ธฐ์ ์ด์ง๋ง ๋ค์์ ํ์ฉํฉ๋๋ค.
- ํน์ ์ฝ๋ฑ ๊ฐ์ ์ ์ฉ: ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์ฝ๋ฑ์ ๋ํ ์๊ฒฉํ ์๊ตฌ ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ(์: ๋ ๊ฑฐ์ ์์คํ ๊ณผ์ ์ํธ ์ด์ฉ์ฑ์ ์ํด), ํด๋น ์ฝ๋ฑ์ ๊ฐ์ ๋ก ์ ํํ๋๋ก ์๋ํ ์ ์์ต๋๋ค.
- ์ฝ๋ฑ ์ฐ์ ์์ ์ง์ : SDP ์ ์ ๋๋ ์๋ต์์ ์ฝ๋ฑ ์์๋ฅผ ๋ณ๊ฒฝํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ธฐ๋ณธ ์ค์ ์ ์ ํธํ ์ ์์ต๋๋ค.
- ์ฝ๋ฑ ๋นํ์ฑํ: ์ฝ๋ฑ์ด ๋ฌธ์ ๊ฐ ์๋ ๊ฒ์ผ๋ก ์๋ ค์ก๊ฑฐ๋ ํ์ํ์ง ์์ ๊ฒฝ์ฐ ๋ช ์์ ์ผ๋ก ์ ์ธํ ์ ์์ต๋๋ค.
ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ ์ ์ด ๋ฐ SDP ์กฐ์
๋ธ๋ผ์ฐ์ ๋ SDP ํ์์ ๋ง์ ๋ถ๋ถ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ์ง๋ง, ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ WebRTC JavaScript API๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
1. `RTCPeerConnection.createOffer()` ๋ฐ `createAnswer()`
์ด ๋ฉ์๋๋ SDP ์ ์ ๋ฐ ์๋ต ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. `setLocalDescription()`์ ์ฌ์ฉํ์ฌ `RTCPeerConnection`์ ์ด๋ฌํ ์ค๋ช ์ ์ค์ ํ๊ธฐ ์ ์ SDP ๋ฌธ์์ด์ ์์ ํ ์ ์์ต๋๋ค.
2. `RTCPeerConnection.setLocalDescription()` ๋ฐ `setRemoteDescription()`
์ด ๋ฉ์๋๋ ๊ฐ๊ฐ ๋ก์ปฌ ๋ฐ ์๊ฒฉ ์ค๋ช ์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. `setLocalDescription` (์ ์์) ๋ฐ `setRemoteDescription` (์๋ต์)์ด ๋ชจ๋ ์ฑ๊ณต์ ์ผ๋ก ํธ์ถ๋๋ฉด ํ์์ด ๋ฐ์ํฉ๋๋ค.
3. `RTCSessionDescriptionInit`
`RTCSessionDescriptionInit`์ `sdp` ์์ฑ์ SDP๋ฅผ ํฌํจํ๋ ๋ฌธ์์ด์ ๋๋ค. ์ด ๋ฌธ์์ด์ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ ์์ ํ ๋ค์ ๋ค์ ์กฐ๋ฆฝํ ์ ์์ต๋๋ค.
์: VP8๋ณด๋ค VP9 ์ฐ์ ์์ ์ง์
VP9๊ฐ VP8๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋๋ก ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์? ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ SDP ์ ์์ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ๋์ด๋ ์ ์์ต๋๋ค.
a=rtpmap:103 VP8/90000 a=rtpmap:104 VP9/90000
SDP ์ ์์ ๊ฐ๋ก์ฑ์ VP9์ ์ฐ์ ์์๋ฅผ ์ง์ ํ๊ธฐ ์ํด ์ค์ ๋ฐ๊พธ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
let offer = await peerConnection.createOffer(); // SDP ๋ฌธ์์ด ์์ let sdpLines = offer.sdp.split('\n'); let vp8LineIndex = -1; let vp9LineIndex = -1; for (let i = 0; i < sdpLines.length; i++) { if (sdpLines[i].startsWith('a=rtpmap:') && sdpLines[i].includes('VP8/90000')) { vp8LineIndex = i; } if (sdpLines[i].startsWith('a=rtpmap:') && sdpLines[i].includes('VP9/90000')) { vp9LineIndex = i; } } if (vp8LineIndex !== -1 && vp9LineIndex !== -1) { // VP9๊ฐ VP8 ๋ค์ ๋์ด๋ ๊ฒฝ์ฐ VP8 ๋ฐ VP9 ์ค ๊ตํ if (vp9LineIndex > vp8LineIndex) { [sdpLines[vp8LineIndex], sdpLines[vp9LineIndex]] = [sdpLines[vp9LineIndex], sdpLines[vp8LineIndex]]; } } offer.sdp = sdpLines.join('\n'); await peerConnection.setLocalDescription(offer); // ... ์ ์์ ์๊ฒฉ ํผ์ด๋ก ์ ์ก ...
์ฃผ์: ์ง์ SDP ์กฐ์์ ๋ถ์์ ํ ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ์ ๋ฐ์ดํธ๋ก ์ธํด SDP ํ์์ด ๋ณ๊ฒฝ๋ ์ ์์ผ๋ฉฐ ์๋ชป๋ ์์ ์ ํ์์ ์ค๋จ์ํฌ ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ผ๋ฐ์ ์ผ๋ก ๊ณ ๊ธ ์ฌ์ฉ ์ฌ๋ก ๋๋ ํน์ ์ํธ ์ด์ฉ์ฑ์ด ํ์ํ ๊ฒฝ์ฐ์ ์์ฝ๋ฉ๋๋ค.
4. `RTCRtpTransceiver` API (์ต์ ์ ๊ทผ ๋ฐฉ์)
์ฝ๋ฑ ์ ํ์ ์ํฅ์ ๋ฏธ์น๋ ๋ ๊ฐ๋ ฅํ๊ณ ๊ถ์ฅ๋๋ ๋ฐฉ๋ฒ์ `RTCRtpTransceiver` API๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ๋ฏธ๋์ด ํธ๋์ ์ถ๊ฐํ ๋(์: `peerConnection.addTrack(stream.getAudioTracks()[0], 'audio')`), ํธ๋์์๋ฒ๊ฐ ์์ฑ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํธ๋์์๋ฒ๋ฅผ ๊ฐ์ ธ์ direction
๋ฐ ๊ธฐ๋ณธ ์ฝ๋ฑ์ ์ค์ ํ ์ ์์ต๋๋ค.
ํธ๋์์๋ฒ์ ๋ํ ์ง์ ์ฝ๋ฑ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
const transceivers = peerConnection.getTransceivers(); transceivers.forEach(transceiver => { if (transceiver.kind === 'audio') { const codecs = transceiver.rtpSender.getCapabilities().codecs; console.log('์ง์๋๋ ์ค๋์ค ์ฝ๋ฑ:', codecs); } });
๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ๋ณดํธ์ ์ผ๋ก ํธ๋์์๋ฒ์ ์ง์ `setPreferredCodec` ๋ฉ์๋๊ฐ ์๋ ๊ฒ์ ์๋์ง๋ง, WebRTC ์ฌ์์ ๋ธ๋ผ์ฐ์ ๊ฐ SDP์ ํ์๋ ์ฝ๋ฑ ์์๋ฅผ ์กด์คํ๋๋ก ํ์ฌ ์ํธ ์ด์ฉ์ฑ์ ๋ชฉํ๋ก ํฉ๋๋ค. ๋ ์ง์ ์ ์ธ ์ ์ด๋ ์ข ์ข `createOffer`/`createAnswer`๋ฅผ ํตํด SDP ์ ์/์๋ต ์์ฑ์ ์กฐ์ํ๊ณ ์ค๋ช ์ ์ค์ ํ๊ธฐ ์ ์ ์ฝ๋ฑ์ ํํฐ๋ง/์ฌ์ ๋ ฌํ์ฌ ์ป์ต๋๋ค.
5. `RTCPeerConnection` ์ ์ฝ ์กฐ๊ฑด ( `getUserMedia`์ฉ)
`navigator.mediaDevices.getUserMedia()`๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏธ๋์ด ์คํธ๋ฆผ์ ์ป์ ๋ ์์ฒญ๋๋ ๋ฏธ๋์ด์ ํ์ง ๋๋ ์ ํ์ ์ํฅ์ ๋ฏธ์น๋ ์ ์ฝ ์กฐ๊ฑด์ ์ง์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ์ฝ ์กฐ๊ฑด์ ์ฃผ๋ก ํผ์ด ๊ฐ์ ์ฝ๋ฑ ํ์์ด ์๋ ๋ฏธ๋์ด ์บก์ฒ ์์ฒด์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๊ณผ์ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก
๊ธ๋ก๋ฒ WebRTC ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๊ฒ์ ๋ฏธ๋์ด ํ์๊ณผ ๊ด๋ จ๋ ๊ณ ์ ํ ๊ณผ์ ๋ฅผ ์ ์ํฉ๋๋ค.
1. ๊ธ๋ก๋ฒ ๋ธ๋ผ์ฐ์ ๋ฐ ์ฅ์น ํํธํ
์ ์ธ๊ณ์ ์ผ๋ก ๋ค์ํ ์ฅ์น, ์ด์ ์ฒด์ ๋ฐ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ด ์ฌ์ฉ๋ฉ๋๋ค. WebRTC ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด ํํธํ ์ ๋ฐ์ ๊ฑธ์ณ ์ํํ๊ฒ ์๋ํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ์ฃผ์ ์ฅ์ ๋ฌผ์ ๋๋ค.
- ์: ๊ตฌํ Android ์ฅ์น๋ฅผ ์ฌ์ฉํ๋ ๋จ๋ฏธ ์ฌ์ฉ์๋ ์ต์ iOS ์ฅ์น๋ฅผ ์ฌ์ฉํ๋ ๋์์์ ์ฌ์ฉ์์ ๋ค๋ฅธ H.264 ํ๋กํ ๋๋ ์ฝ๋ฑ ์ง์์ ๊ฐ์ง ์ ์์ต๋๋ค.
2. ๋คํธ์ํฌ ๊ฐ๋ณ์ฑ
์ธํฐ๋ท ์ธํ๋ผ๋ ์ ์ธ๊ณ์ ์ผ๋ก ํฌ๊ฒ ๋ค๋ฆ ๋๋ค. ์ง์ฐ ์๊ฐ, ํจํท ์์ค ๋ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋์ญํญ์ ๊ทน์ ์ผ๋ก ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ์: ์์ ๋ฝ์ ๊ณ ์ ๊ด์ฌ์ ๋คํธ์ํฌ์ ์๋ ๋ ์ฌ์ฉ์ ๊ฐ์ ํตํ๋ ๋๋จ์์์์ ๋์ด ์ง์ญ์ ์๋ ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ์ ์๋ ์ฌ์ฉ์ ๊ฐ์ ํตํ์ ๋งค์ฐ ๋ค๋ฅธ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
3. ๋ ๊ฑฐ์ ์์คํ ๊ณผ์ ์ํธ ์ด์ฉ์ฑ
๋ง์ ์กฐ์ง์ด ์ต์ WebRTC ์ฝ๋ฑ ๋๋ ํ๋กํ ์ฝ์ ์์ ํ ์ง์ํ์ง ์๋ ๊ธฐ์กด ํ์ ํ์ ํ๋์จ์ด ๋๋ ์ํํธ์จ์ด์ ์์กดํฉ๋๋ค. ์ด ๊ฒฉ์ฐจ๋ฅผ ํด์ํ๋ ค๋ฉด G.711 ๋๋ H.264์ ๊ฐ์ด ๋ ํจ์จ์ ์ด์ง๋ง ๋ ์ผ๋ฐ์ ์ธ ์ฝ๋ฑ์ ๋ํ ์ง์์ ๊ตฌํํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก:
- ์ค๋์ค์ ๊ฒฝ์ฐ Opus ์ฐ์ : Opus๋ WebRTC์์ ๊ฐ์ฅ ๋ค์ฉ๋๋ก ์ฌ์ฉ๋๊ณ ๋๋ฆฌ ์ง์๋๋ ์ค๋์ค ์ฝ๋ฑ์ ๋๋ค. ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด์์ ํ์ํ ์ฑ๋ฅ์ ์ ๊ณตํ๋ฉฐ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ ฅํ ๊ถ์ฅ๋ฉ๋๋ค. SDP ์ ์์์ ๋์ ๋๊ฒ ๋์ด๋๋๋ก ํ์ญ์์ค.
- ๋น๋์ค์ ๊ฒฝ์ฐ VP8/VP9 ์ฐ์ : VP8 ๋ฐ VP9๋ ์คํ ์์ค์ด๋ฉฐ ๋๋ฆฌ ์ง์๋ฉ๋๋ค. H.264๋ ์ผ๋ฐ์ ์ด์ง๋ง VP8/VP9๋ ๋ผ์ด์ ์ค ๋ฌธ์ ์์ด ์ข์ ํธํ์ฑ์ ์ ๊ณตํฉ๋๋ค. ๋์ ํ๋ซํผ ์ ๋ฐ์ ๊ฑธ์ณ ์ง์์ด ์ผ๊ด๋๋ฉด ๋ ๋์ ์์ถ ํจ์จ์ฑ์ ์ํด VP9๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
- ๊ฐ๋ ฅํ ์ ํธ ์๋ฒ ์ฌ์ฉ: ์์ ์ ์ธ ์ ํธ ์๋ฒ๋ ๋ค์ํ ์ง์ญ์ ๊ฑธ์ณ SDP ์ ์ ๋ฐ ์๋ต์ ํจ์จ์ ์ด๊ณ ์์ ํ๊ฒ ๊ตํํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- ๋ค์ํ ๋คํธ์ํฌ ๋ฐ ์ฅ์น์์ ๊ด๋ฒ์ํ๊ฒ ํ ์คํธ: ์ค์ ๋คํธ์ํฌ ์กฐ๊ฑด์ ์๋ฎฌ๋ ์ด์ ํ๊ณ ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๊ธฐ๋ฐ์ ๋ํํ๋ ๋ค์ํ ์ฅ์น ๋ฐ ๋ธ๋ผ์ฐ์ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ์ญ์์ค.
- WebRTC ํต๊ณ ๋ชจ๋ํฐ๋ง: `RTCPeerConnection.getStats()` API๋ฅผ ํ์ฉํ์ฌ ์ฝ๋ฑ ์ฌ์ฉ๋, ํจํท ์์ค, ์งํฐ ๋ฐ ๊ธฐํ ์งํ๋ฅผ ๋ชจ๋ํฐ๋งํ์ญ์์ค. ์ด ๋ฐ์ดํฐ๋ ๋ค์ํ ์ง์ญ์์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์ ๋ฐ ์ฝ๋ฑ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ๋์ฒด ์ ๋ต ๊ตฌํ: ์ต์ ์ ๋คํ๋ ๋์์ ํน์ ์ฝ๋ฑ์ ๋ํ ํ์์ด ์คํจํ๋ ์๋๋ฆฌ์ค์ ๋๋นํ์ญ์์ค. ์ฐ์ํ ๋์ฒด ๋ฉ์ปค๋์ฆ์ ๋ง๋ จํ์ญ์์ค.
- ๋ณต์กํ ์๋๋ฆฌ์ค์ ๊ฒฝ์ฐ ์๋ฒ ์ธก ์ฒ๋ฆฌ(SFU/MCU) ๊ณ ๋ ค: ๋ง์ ์ฐธ๊ฐ์๊ฐ ์๊ฑฐ๋ ๋ นํ ๋๋ ํธ๋์ค์ฝ๋ฉ๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ํ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ์ ํ์ ์ ๋ฌ ๋จ์(SFU) ๋๋ ๋ค์ ์ ์ด ์ฅ์น(MCU)๋ฅผ ์ฌ์ฉํ๋ฉด ์ฒ๋ฆฌ๋ฅผ ์คํ๋ก๋ํ๊ณ ํด๋ผ์ด์ธํธ ์ธก ํ์์ ๋จ์ํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ์๋ฒ ์ธํ๋ผ ๋น์ฉ์ ์ถ๊ฐํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ํ์ค ์ต์ ์ ๋ณด ์ ์ง: WebRTC๋ ๋์์์ด ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ์๋ก์ด ์ฝ๋ฑ ์ง์, ํ์ค ๋ณ๊ฒฝ ๋ฐ ๋ธ๋ผ์ฐ์ ๋ณ ๋์์ ํ์ ํ์ญ์์ค.
๊ฒฐ๋ก
WebRTC ๋ฏธ๋์ด ํ์ ๋ฐ ์ฝ๋ฑ ์ ํ ์๊ณ ๋ฆฌ์ฆ์ ๋ณต์กํด ๋ณด์ด์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ๋ ํผ์ด ๊ฐ์ ๊ณตํต์ ์ ์ฐพ๋ ๊ฒ์ ๊ดํ ๊ฒ์ ๋๋ค. SDP ์ ์/์๋ต ๋ชจ๋ธ์ ํ์ฉํ์ฌ WebRTC๋ ๊ณต์ ์ค๋์ค ๋ฐ ๋น๋์ค ์ฝ๋ฑ์ ์๋ณํ์ฌ ํธํ ๊ฐ๋ฅํ ํต์ ์ฑ๋์ ์ค์ ํ๋ ค๊ณ ํฉ๋๋ค. ๊ธ๋ก๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์๊ฒ ์ด ํ๋ก์ธ์ค๋ฅผ ์ดํดํ๋ ๊ฒ์ ๋จ์ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋์ด ๋ณดํธ์ฑ์ ์ํ ๋์์ธ์ ๋๋ค.
Opus ๋ฐ VP8/VP9์ ๊ฐ์ด ๊ฐ๋ ฅํ๊ณ ๋๋ฆฌ ์ง์๋๋ ์ฝ๋ฑ์ ์ฐ์ ์ํ๊ณ ๋ค์ํ ๊ธ๋ก๋ฒ ํ๊ฒฝ์์ ์ฒ ์ ํ ํ ์คํธ๋ฅผ ์ํํ๋ ๊ฒ์ ์ํํ๊ณ ๊ณ ํ์ง์ ์ค์๊ฐ ํต์ ์ ๊ธฐ๋ฐ์ ๋ง๋ จํ ๊ฒ์ ๋๋ค. ์ฝ๋ฑ ํ์์ ๋์์ค๋ฅผ ๋ง์คํฐํจ์ผ๋ก์จ WebRTC์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ๋ฐํํ๊ณ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ํ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค.