프로젝트

MediaSoup, SFU

NickTop 2024. 2. 9. 18:56

Node.js의 mediasoup로 SFU를 구현할 수 있다

 

Worker

- Mediasoup는 여러개의 worker로 이루어져있다

- Worker와 CPU는 일대일 매핑된다

- 1개의 router에는 1개의 room이 할당된다, 1개의 worker에 여러개의 router가 있을 수 있다

- transport는 데이터를 주고받는 경로이다

- Producer: media를 생성한다

- Consumer : media를 전달받는다

 

연결 생성

sequence diagram

Producer

1. Client가 Router rtpCapability 요청 [RtpCapability : mediasoup로 연결가능한 endpoint]
2. DEVICE 생성(mediasoup-client) + local media stream 만듬
3. webRTC transport 요청
4. Router creates WebRTC Transport (RP: remote producer)
5. Router가 transport parameter[transportId + Ice + DTLS] 전달
6. transport parameter로 SEND Transport 생성 (LP : local producer)
7. connect, produce 이벤트 호출
 - connect parameter : dtls
 - produce parameter : kind (), rtpParameter
8. RP가 producer id 생성 및 client들에게 produce id 전달

 

* ICE (Interactive Connectivity Establishment) 
 - connection에 쓸 수 있는 후보군들을 모은 후 가능한 connection으로 연결함

* DTLS

 - SSL로 security 보장

Consumer

1. Client가 Router rtpCapability 요청
2. WebRTC Transport 생성 (RC : Remote Consumer)
3. Router가 transport parameter[transportId + Ice Candidate + DTLS] 전달
4. Client가 Device rtpCapability (서버의 rtpcapability와 다름) + producerId 전달
5. produce에서 생성하는 내용을 consume 할수있는 지 확인 후 rtpcapability, producerId 로 consume method 호출
6. RC가 consumerId, kindm rtpparameter 전달
7. client가 connect 함수 호출로 DTLS 파라미터 전달

 

연결  종료

close diagram

LP가 connection close 한 경우
- RP, RC, LC 닫아야함
LC가 connection close 한 경우
- RC 닫아야함

 

 

 

 

https://www.youtube.com/watch?v=DOe7GkQgwPo

'프로젝트' 카테고리의 다른 글

Ngrok  (0) 2023.12.24
[윈도우 스크립트] 포트번호로 프로세스 종료하기  (0) 2023.10.23
[Linux][Gradle] springboot 빌드 및 실행  (0) 2023.08.13
GDB  (0) 2023.05.07
vscode python c module print 하기  (0) 2023.04.24