-
Notifications
You must be signed in to change notification settings - Fork 2
webRTC로 실시간 방송이 가능할까?
Seungheon Han edited this page Dec 3, 2024
·
1 revision
webRTC
는 실시간 통신을 위해 설계된 기술이다. 기본 설계 철학이 P2P에 기반을 두고 있어, 주로 화상 회의, 실시간 현업 도구 등 소규모 실시간 상호작용에서 많이 사용된다.
또한, WebRTC는 이름에서도 알 수 있듯이 웹(Web) 기반으로 설계되어 별도의 소프트웨어 설치 없이 브라우저에서 바로 사용할 수 있는 장점이 있다. 이 때문에 WebRTC는 모든 주요 브라우저에서 네이티브로 지원되며, 데스크톱과 모바일을 포함한 다양한 플랫폼에서 쉽게 실시간 통신을 구현할 수 있다.
그럼 이걸 실시간 방송 스트리밍 서비스에 적용할 수 없을까??
현재 실시간 방송 스트리밍 서비스에서 방송을 하려면 다음과 같은 과정을 거친다.
- OBS와 같은 인코더 프로그램 사용
- RTMP 서버로 인코딩된 데이터 전송
- RTMP 서버에서 받은 데이터를 HLS 또는 DASH로 변환
- HLS/DASH 세그먼트를 CDN에 분산 캐싱하여 다수의 시청자들에게 전달
현재 만들고자 하는 서비스에서 다수의 사용자들이 출석을 하면 자동으로 방송이 켜져야 한다. 즉, 사용자가 별도로 OBS와 같은 인코더 프로그램을 실행하고, 설정하는 과정을 생략하고 브라우저만으로 쉽게 방송을 시작할 수 있어야 한다.
그럼 webRTC의 SFU, MCU를 활용하여 실시간 방송을 구현하면 P2P 방식이 아니니까 가능하지 않을까??
- 중앙 서버에서 실시간 데이터 관리: SFU나 MCU를 사용하면 모든 데이터를 중앙 서버에서 중계하게 되어, P2P 방식이 아닌 서버 기반 연결 구조를 만들 수 있다. 이렇게 하면 데이터가 서버를 거쳐가므로 안정적으로 실시간 방송 데이터를 저장하고 관리할 수 있다.
- 클라이언트 요청 시 데이터 제공: 중앙 서버에 실시간으로 전송된 데이터를 일정 시간 단위로 저장할 수 있고, 클라이언트가 요청할 때마다 서버에서 데이터를 제공할 수 있다. 이 구조는 RTMP와 유사하게 서버가 데이터를 중계하면서 방송을 제공할 수 있게 한다.
- 인코더 불필요: RTMP와 달리 WebRTC는 브라우저와 애플리케이션에서 기본 코덱(VP8, H.264)을 지원하므로, 별도의 인코더 없이 실시간 방송이 가능하다. 이는 사용자가 간편하게 브라우저만으로 방송을 시작할 수 있는 환경을 제공한다.
- 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