Android/Mediasoup

WebRTC와 Mediasoup

show2888 2021. 11. 17. 17:11
반응형

개념

WebRTC 는 기본적으로 P2P 프로토콜이다. 1:1 통신의 경우 중간에 서버를 경유할 필요가 없이 직접 Peer 간 연결이 되면 되지만 N:N 통신의 경우 Peer들 간에 Mesh 형태로 트래픽이 발생되고 Peer에서 들어오는 Traffic 을 Mixing 해야 한다.

 

그래서 P2P의 한쪽 Peer에 Server를 두고, 들어오는 Traffic을 Server에서 Mixing 해서 내보내는 MCU(Multipoint Control Unit) 방식과, Mixing 하지 않고 Traffic을 선별적으로 배분해서 보내주는 SFU(Selective Forwarding Unit) 방식이 있다.


즉, MCU는 수신되는 미디어 영상을 조작하고 전송하지만 SFU는 수신된 미디어를 그대로 포워딩 해준다.

 

그 중 Mediasoup은 SFU방식이며 특징으로 NodeJS API가 있다.

출처: https://alnova2.tistory.com/1291 [몽상가]


Android에서 WebRTC와 Mediasoup

 

WebRTC는 기본적으로 클라이언트와 서버로 되어있다. c++기반으로 되어있는 클라이언트 부분을 빌드해 .so파일로 가져오고 그것을 JAVA코드로 사용 할수있다. 

Mediasoup역시 클라이언트사이드 서버사이드가 분리되어 있으며 클라이언트 사이드는 서버사이드와 통신하기 쉽게 구조화 되어있다. 그리고 클라이언트 내부는 WebRTC를 갖고있기때문에 WebRTC와 유사하다. 이를 이용해 Mediasoup에 미디어데이터를 전송하면 Mediasoup이 중앙에서 데이터를 포워딩 해준다.

 

사용

Send)

1. 빌더를 이용해 PeerConnectionFactory를 만들어준다. 여기서 비디오와 오디오 트랙을 생성함

2. 통신을 위한 소켓을 만들어준다. 이때 소켓은 미디어를 보내주는 소켓과 받아오는 소켓 둘다 만들어준다. 그리고 이 소켓으로 미디어서버와 connect한다.

3. Mediasoup의 device 클래스를 load한다.

4. device를 이용해 SendTransport를 만든다.

5. PeerConnectionFactory로 통해 만들어진 트랙을 앞서만든 sendTransport에 produce해준다.

 

Receive)

기본적으로 Send와 동일하나 몇가지 차이점이 있다.

SendTransport 대신 RecvTransport를 사용한다.

produce를 한후 consume을 해야한다. RecvTransport를 통해 consume이 가능하다.

consume을 하게되면 미디어 데이터를 받아오게된다.

 

반응형