Node.js의 mediasoup로 SFU를 구현할 수 있다
- Mediasoup는 여러개의 worker로 이루어져있다
- Worker와 CPU는 일대일 매핑된다
- 1개의 router에는 1개의 room이 할당된다, 1개의 worker에 여러개의 router가 있을 수 있다
- transport는 데이터를 주고받는 경로이다
- Producer: media를 생성한다
- Consumer : media를 전달받는다
연결 생성
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 파라미터 전달
연결 종료
LP가 connection close 한 경우
- RP, RC, LC 닫아야함
LC가 connection close 한 경우
- RC 닫아야함
'프로젝트' 카테고리의 다른 글
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 |