-
Notifications
You must be signed in to change notification settings - Fork 2
개발 일지 view All
Sunny edited this page Dec 3, 2024
·
2 revisions
Cam' On 주요 서비스에 대한 구현 과정에 대해 설명하고 있습니다.
- 실시간 방송 및 다대다 스트리밍 환경을 구현하기 위해 WebRTC와 Mediasoup을 선택.
- WebRTC는 실시간 미디어 스트림 전송에 최적화된 기술.
- Mediasoup은 SFU(Selective Forwarding Unit)를 제공하여 네트워크 자원을 효율적으로 사용 가능.
WebRTC와 Mediasoup을 선택한 이유
- WebRTC와 Mediasoup을 활용해 실시간 방송 송출 및 시청 기능을 구축.
- 방송 시작/종료 UI를 간소화하여 사용자 경험을 최적화.
방송 송출 및 시청 구현
- 스트림의 해상도, 비트레이트, 프레임레이트를 유동적으로 조정하는 기능 구현.
- 네트워크 상태를 감지하여 자동으로 화질 변경.
화질 조정 기능 구현
- Canvas API를 사용하여 화면 공유와 캠 영상 스트림을 하나의 화면으로 통합.
- 통합된 화면을 Mediasoup을 통해 스트림으로 송출.
Canvas Api를 사용한 방송 송출 화면 구성
- 방송 송출 중에도 다른 작업이 가능하도록 송출 화면을 새로운 브라우저 창에서 열리는 방식으로 개선.
- 송출 화면 UI를 독립적으로 관리할 수 있어 사용자 경험 개선.
방송 송출 창을 새로운 창으로 띄우기
- Mediasoup과 FFmpeg을 활용해 실시간 썸네일 생성 및 녹화 데이터 저장 기능 구현.
- 저장된 녹화본은 Object Storage를 통해 관리.
실시간 썸네일과 녹화 기능 구현
- Swagger UI를 통해 API 문서를 자동 생성하여 개발자 간의 협업 효율성 증대.
- API 테스트 및 사용성을 높이기 위해 엔드포인트와 데이터 모델 문서를 시각적으로 제공.
Swagger를 적용해보자
- Husky와 Lint-Staged를 사용하여 커밋 전에 코드 린트와 테스트를 자동 실행.
- 코드 품질을 유지하고 릴리스 전 문제를 사전에 방지.
husky로 커밋 전 테스트 실행 구축 하기
- 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