TIL

24/02/01 TIL __ rtmp 프로토콜, hls 프로토콜을 이용한 스트리밍 서비스

GABOJOK 2024. 2. 1. 23:49

 

 

 

실시간 스트리밍 서비스에서 가장 중요한 실시간 방송 파트는 다른 다른 팀원2분이 맡아 진행했었다.

생소한 분야다 보니 난이도가 있었는데, 실제 구현을 하면서도 잘 이해가 안가는 상황이 있었고,

담당하지 않은 사람들은 더욱 이해를 제대로 못하는 상황이 있었다.

 

어떻게 흘러가는지라도 파악을 하기 위해 정리한다. 

 

실시간 스트리밍 에는 다양한 도구가 있지만,

현재 우리 프로젝트에서는 nginx의 rtmp모듈과 hls, obs스튜디오를 사용했다.

 

다른 스트리밍 도구들은 없는지 알아봤는데 꽤 많이 존재했다. 

 

 

 

 

⚽️ MPEG-DASH

  • 사용자 네트워크 조건에 따라 자동으로 비디오 품질 조절
  • 안정적

⚽️ Apple Low Latency HLS

  • 낮은 지연시간.(HLS의 새로운 버전)
  • 실시간 스트리밍 최적화(실시간 이벤트 같은 라이브 스트리밍에 적합.)

⚽️ WEB RTC

  • 소규모 인원일 경우 적합
  • 매우 낮은 지연시간.


⚽️ SRT

  • 불안정한 네트워크에서도 높은 신뢰성 유지
  • (엔드 투 엔드 암호화 인증으로) 데이터 전송시 보안이 높아 실시간 스포츠, 속보 등 사용되기도 한다


⚽️ RTMP

  • 지연시간이 낮아 실시간 서비스에 적합
  • 실시간 오디오 비디오 데이터 전송을 위한 프로토콜
  • 많은 스트리밍 소프트웨어와 호환

 

⚽️ HLS 

  • 사용자의 네트워크 속도에 따라 스트리밍 품질을 자동으로 조절하는 특성이 있어 안정적이다.
  • 적응형 비트 전송률 스트리밍 기능 덕분
  • 전체 영상을 모두 받지 않아도 바로 영상을 재생할 수 있게 하는 프로토콜
  • http기반으로 다양한 기기, 플랫폼에서 지원되는 스트리밍 프로토콜
  • 그러나 비디오가 작게 분할되어 전송되어, 지연시간이 있다..
  • 서버에서 RTMP 스트림을 받아 이를 HLS 포멧으로 바꾸어 시청자에게 보여준다.

 

 

 

이런 특성들이 있는데,

rtmp가 가장 레퍼런스가 많아 선택하였다.

지연시간이 짧아 서비스에 적합하다 판단했고,

hls 프로토콜도 함께 사용해 클라이언트에게 보여줄수 있도록 했다.

 

RTMP
 실제 미디어 스트리밍 데이터를 전송하는 프로토콜이 아니며, 
 사용자가 멀티미디어 스트리밍을 제어할 수 있도록 도와주는 프로토콜.

 

 

 

현재 스트리밍의 흐름을 살펴보면,

  1. obs studio에서 생성한 영상을 rtmp 프로토콜을 타고 flv(flash video) 형태로 서버에 전송
  2. 전송 받은 FLV 스트림을 일정하게 잘라서 ts파일로 변환하고,
  3. ts 파일로 변환하기 위해 hls 프로토콜을 사용한다. ( 크롬 hls 확장프로그램 )
  4. 여러 TS 조각들은 m3u8재생목록 파일에 담기게 된다.
  5. 각각의 파일들은 url이 있고, 이것을 통해 웹브라우저에서 실시간 스트리밍을 하는 형태로 진행된다.

 

 

 

일단 오늘은 이정도로만 이해하고 넘어가려 한다. 

다음에는 좀더 많은걸 이해할 수 있음 좋겟다.