니꼴라스 선생님이 작성해준 1:1 Peer To Peer 예제 소스에서 크게 벗어나진 않는다.
https://github.com/Yumin2019/WebRTC-P2P-Implement/tree/p2p-one-to-one
1:1 코드와 달라진 부분)
1:1 코드에서는 미리 PeerConnection을 생성하는 것이 가능했다. 왜냐면 Room에 들어올 인원이 2명으로 한정되어 있었기에 Id값이 없더라도 그냥 Room에 Socket 이벤트를 주는 방식으로 개발되어 있었기 때문이다.
1:N의 방식에서는 새로운 유저가 들어온 시점에 Offer를 만드는 부분과 Answer을 만드는 시점(다른 클라이언트)에 각각 서로의 Id를 key로하는 PeerConnection을 만들어 주는 것이 핵심이다.
1:N을 구현하는 순간부터 사실상 Room내부에 event를 막 날리다가는 SDP, ICE candidate 처리가 꼬일 수밖에 없다. 따라서 자신이 처리하는 이벤트를 누구한테 보낼 것인지 명확하게 지정해야 한다. 또한 PeerConnection을 만드는 시점에 등록해주는 콜백들이 누구와 통신하는지(Id)값을 가져야 하는 것이다.
1:1 예제에서는 video 요소를 미리 추가했지만 이번에는 클라이언트 연결/종료에 따라 video element를 추가/삭제 하도록 처리했다.
구현 소스)
https://github.com/Yumin2019/WebRTC-P2P-Implement/tree/p2p-one-to-many
참고자료
https://millo-l.github.io/WebRTC-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-1-N-P2P/
'프로그래밍 > WebRTC' 카테고리의 다른 글
[Mediasoup] communication-between-client-and-server - 1 (1) | 2023.09.20 |
---|---|
[WebRTC] SFU 서버 구현 (1) | 2023.09.19 |
[WebRTC] WebRTC 미디어 서버와 활용 방안 (0) | 2023.09.16 |
[WebRTC] WebRTC 기본 개념과 Peer to Peer (0) | 2023.09.16 |
WebSocket과 Socket.io 차이 (0) | 2023.09.10 |
댓글