-
Notifications
You must be signed in to change notification settings - Fork 2
11 14 회의
Seungheon Han edited this page Nov 30, 2024
·
4 revisions
- 기능: 방송 종료 시 관련된 데이터 및 연결을 정리.
-
로직:
-
router.close()
호출로 Router를 종료. - 관련 이벤트를 처리하여 연결 데이터 삭제.
-
private roomTransports = new Map<string, IRoomTransportInfo>();
private producers = new Map<string, mediasoup.types.Producer[]>();
private consumers = new Map<string, mediasoup.types.Consumer[]>();
router.close();
transport.on('routerclose', (roomId) => {
transport.close();
// this.roomTransports 객체 삭제
this.roomTransports.delete(roomId);
});
producer.on('transportclose', (transportId) => {
producer.close();
// this.producers 객체 삭제
this.producers.delete(transportId);
});
consumer.on('transportclose', (transportId) => {
consumer.close();
// this.consumers 객체 삭제
this.consumers.delete(transportId);
});
consumer.on('producerclose', () => {
consumer.close();
// this.consumers 객체 삭제
this.consumers.delete(transportId);
});
- router가 close되면 tranpos
- WebSocket이 자동으로 끊기면 transport가 자동으로 close().
- 방송자가 끊겼을 때: stopBroadcast 호출.
- 시청자가 끊겼을 때: leaveBroadcast 호출 및 transport.close().
- 서버에서 직접 처리할 필요 없다
- Producer와 Consumer의 resume 사용
- 클라이언트 코드
consumer.resume();
socket.emit('resumeConsumer');
- 서버 코드
socket.on('resumeConsumer', async () => {
// consumerId로 consumer 찾기
await consumer.resume();
});
-
클라이언트에서 Resume/Pause
- 클라이언트에서 Producer가
resume
또는pause
상태를 변경하면, 미디어 스트림 전송을 중지하거나 재개. - 서버로 이벤트를 전송해 상태 변경 요청.
- 클라이언트에서 Producer가
-
서버에서 Resume/Pause
- 서버에서 Producer가
resume
또는pause
상태를 변경하면, 실제 미디어 스트림 전송 자체를 중지하거나 재개. -
리소스 절약 목적:
- 클라이언트가 데이터를 수신하지 않는 상태에서는 스트림을 중지하여 네트워크 리소스 낭비 방지.
- 서버에서 Producer가
-
리소스 낭비를 고려할 경우
- 클라이언트 요청에 따라 서버의 Producer와 Consumer 상태도 동기화.
- 클라이언트가 미디어 데이터를 수신하지 않을 경우 Server Producer를
pause
하여 스트림 중지.
-
리소스 낭비를 고려 안 할 경우
- 서버의 Producer와 Consumer는 항상 스트림을 유지.
- 구현이 간단하며 실시간 방송 특성을 유지.
Client Producer | Server Producer | Room 상태 | Server Consumer | Client Consumer |
---|---|---|---|---|
resume |
resume |
유지 | resume |
resume |
pause |
resume |
유지 | resume |
resume |
resume |
resume |
유지 | resume |
pause |
resume |
resume |
유지 | pause |
resume |
-
클라이언트 Producer의 Resume
- 서버에 미디어 스트림 전송을 재개하도록 요청.
-
서버 Producer의 Resume
- 실제 미디어 스트림을 재개하여 데이터를 송출.
-
리소스 최적화가 필요할 경우:
- 클라이언트와 서버 모두에서
pause/resume
상태를 적극 관리. - 미디어 데이터를 수신하지 않는 경우 스트림 중지로 리소스 절약.
- 클라이언트와 서버 모두에서
-
항상 스트림 유지가 필요할 경우:
- 서버의 Producer와 Consumer 상태를 변경하지 않고 스트림을 유지.
- 안정성과 단순한 구조 유지.
- Mediasoup 포트 매핑 문제
- swagger 같은 응답 코드에 다양한 응답 보여주기
- Sudo가 계속 비밀번호를 요청함
- Docker 이미지가 너무 크다
- Git action에서 도커 이미지 빌드 시간을 단축시켜보자
- Docker compose를 이용해서 메모리 사용률을 줄여보자
- 방송 녹화 시 CPU 과부하 문제를 해결해보자
- Release 브랜치? 너 필요해?
- 로딩이 너무 짧아…!
- NestJS ORM으로 무엇을 사용해야 할까?
- WebRTC를 이용한 1:N 스트리밍 서비스에서 시그널링 서버가 필요할까?
- 실시간 채팅 구현: 인메모리 방식을 선택한 이유
- MySQL 아키텍처 개선: DB 의존성 분리와 서버 역할 명확화
- 브라우저 창이 최소화되면 비디오 송출이 안된다…!
- Mediasoup 기본 개념
- DLTS와 Signaling
- Tell, Don't Ask (TDA) 원칙이란
- VPC(Virtual Private Cloud) 학습 정리
- 순환참조: A 서비스 ‐ B 서비스 vs. A 서비스 ‐ B 레포지토리
- Dto 메서드 전략
- WebRTC란?
- 자바스크립트 패키지 매니저(npm, yarn, pnpm)
- shadcn/ui을 이용해 UI 개발 생산성 높이기
- React 이벤트 핸들러 네이밍(on vs handle)
- React-router-dom의 createBrowserRouter을 사용해보기
- fetch vs axios