WebRTC (SFU) - boostcampwm-2022/web36-Japari GitHub Wiki
- ์ ํฌ ์กฐ๋ SFU ๋ฏธ๋์ด ์๋ฒ๋ก mediasoup๋ฅผ ์ฌ์ฉํ์ฌ ํ์๋ํ๋ฅผ ๊ตฌํํ์์ต๋๋ค. ์ ํฌ์ ํ๋ซํผ์ ๊ฒฝ์ฐ, ํ ๋ฐฉ์ ์ต๋ 8๋ช
์ด ๋ฐฉ์ ๋ค์ด๊ฐ๊ฒ ๋๋๋ฐ, ์๊ท๋ชจ N:M ํ์์ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ์ ์ ํฉํ SFU ๋ฐฉ์์ ์ฑํํ์ต๋๋ค.
- SFU ๋ฐฉ์์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ํ์์์ด ์๋ฒ์๊ฒ๋ง ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ฃผ๊ธฐ ๋๋ฌธ์ P2P ๋ฐฉ์๋ณด๋ค ํด๋ผ์ด์ธํธ์ ๋ถํ๊ฐ ํ์ ํ ์ค์ด๋ค๊ฒ ๋ฉ๋๋ค.
- ๋ก์ง
- ์ ์ ๊ฐ ๋ก์ปฌ stream์ ์ค์
- ํด๋น ๋ฐฉ์ router๋ก๋ถํฐ, ์๋ค๋ฉด router๋ฅผ ์์ฑ
- ์ฝ๋ฑ ์ ํ, ํด๋ญ์๋ ๋ฑ์ด ๋ด๊ธด ์ ๋ณด๋ฅผ ๋ฐ์ device๋ฅผ ์์ฑ
- ๊ทธ๋ฆฌ๊ณ transport๋ฅผ ์์ฑํ์ฌ ๋ค๋ฅธ ์ฌ๋์ ์คํธ๋ฆผ์ consumeํ๊ฑฐ๋, ์์ ์ ์คํธ๋ฆผ์ produce
-
์ฒ์ ๋ฐ๋ชจ๋ฅผ ์ฐธ๊ณ ํ์ฌ ๊ตฌํํ์ ๋, ์ฅ์น๊ฐ ์์ด์ผ๋ง ํด๋น ๋ฐฉ์ peer๋ก ๋ฑ๋ก๋์ด ๋ค๋ฅธ ์ฌ๋๋ค์ ์คํธ๋ฆผ์ ๋ฐ์ ์ ์์์ง๋ง, ์ดํ ์ฅ์น๊ฐ ์์ด๋ ๋ฐฉ์ ์ ์ฅํ๋ฉด peer์ consumer๋ก ๋ฑ๋กํ์ฌ ๋ค๋ฅธ ์ฌ๋์ ์คํธ๋ฆผ์ ๋ฐ์ ์ ์๋๋ก ๊ฐ์ ํ์์ต๋๋ค.
const getLocalStream = () => { navigator.mediaDevices.getUserMedia({...}) .then(...) .catch(error => { localUserMedia = false; ... }); } const createSendTransport = async () => { // ์ฅ์น๊ฐ ์๋ค๋ฉด ๋ฐ๋ก consumer๋ก ๋ฑ๋ก if (!localUserMedia) { getProducers(); return; } // ์ฅ์น๊ฐ ์๋ค๋ฉด ์คํธ๋ฆผ์ produceํ consumer๋ก ๋ฑ๋ก socket.emit("media/createWebRtcTransport", { consumer: false }, (transportOptions: TransportOptions) => { producerTransport = device.createSendTransport(transportOptions); handleCreateProducerTransport(); }); };