728x90
반응형

HLS

  • HLS: HTTP Live Streaming
    • 콘텐츠를 작은 세그먼트로 나누어서 .m3u8 파일과 .ts 세그먼트 파일로 구성함
    • 즉 비디오를 2-10초 정도의 작은 .ts(Transport Stream)으로 나누게 됨
    • m3u8 파일이 모든 세그먼트와 재생 정보를 관리하는 익덱스 파일
    • 적응형 비트레이트: 네트워크 상태에 따라 다양한 화질 선택 가능
  • m3u8 형식 혹은 .ts 파일이 hls 스트리밍에 사용되는 파일 형식

예시

manifest.m3u8 (메인 인덱스 파일)
|- quality_high.m3u8 (고화질 인덱스)
|  |- segment0_high.ts
|  |- segment1_high.ts
|  |- ...
|- quality_medium.m3u8 (중간 화질 인덱스)
|  |- segment0_medium.ts
|  |- ...
|- quality_low.m3u8 (저화질 인덱스)
   |- segment0_low.ts
   |- ...

FFMPEG 이용한 m3u8 파일 변환

  • 여러개의 .ts 파일과 .m3u8 파일이 생김
    • m3u8 파일이 각 ts 파일에 대한 인덱스 역할을 함
ffmpeg -i <video_file>.mp4 -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls <output_file>.m3u8

HTTP Streaming vs HLS

주요 차이점

  1. 적응성
    • HLS: 네트워크 상태에 따라 화질을 자동으로 조정
    • HTTP 스트리밍: 단일 화질만 제공, 적응형 기능 없음
  2. 지연 시간
    • HLS: 일반적으로 10-30초 지연 발생
    • HTTP 스트리밍: 버퍼링 시간만큼의 지연
  3. 대역폭 효율
    • HLS: 현재 네트워크 상태에 맞는 최적의 화질 제공
    • HTTP 스트리밍: 고정 화질로 네트워크 상태가 좋지 않으면 버퍼링 발생
  4. 서버 부하
    • HLS: 여러 화질의 세그먼트를 미리 생성해야 함
    • HTTP 스트리밍: 단일 파일만 제공하므로 서버 부하 낮음
  5. 구현 복잡성
    • HLS: 인코딩, 세그먼트화, 인덱스 파일 관리 등 복잡한 과정 필요
    • HTTP 스트리밍: 단순히 파일을 제공하는 것만으로 가능
  6. 확장성
    • HLS: CDN과 연계하여 우수한 확장성 제공
    • HTTP 스트리밍: CDN 활용 가능하나 적응형 기능 부재
  7. 호환성
    • HLS: iOS, Safari에서 네이티브 지원, 다른 브라우저는 추가 라이브러리 필요
    • HTTP 스트리밍: 대부분의 브라우저에서 네이티브 지원

간단한 비유

  • HLS는 도서관에서 책의 각 장을 필요할 때마다 가져오는 것과 같음
  • 일반 HTTP 스트리밍은 책 전체를 한 번에 빌려오는 것과 같음
728x90
반응형

+ Recent posts