Skip to content

Latest commit

 

History

History
37 lines (22 loc) · 2.27 KB

File metadata and controls

37 lines (22 loc) · 2.27 KB

질문과 답변

특별한 목적을 가진 chunked transfer encode 사용 예 - HLS 와 LHLS

HLS 란?

  • HLS는 HTTP Live Streaming 의 약자로 Apple 에서 만든 비디오 전송 프로토콜
  • 크게 playlist 인 m3u8 파일과 각각의 미디어 세그멘트 파일로 구성된다
  • live streaming 시 client player 는 m3u8 playlist 에 명시되어있는 미디어 세그멘트 파일을 요청해 재생하며 동시에 m3u8 playlist 도 주기적으로 요청해 갱신한다
    • m3u8 파일 내용 예

      image

  • HLS 에서 송출자가 보낸 영상을 시청자가 보기 위해선 위 사진에서 볼 수 있듯이 서버에서 미디어 세그멘트 파일을 생성하고, m3u8 에 업데이트 한 후 시청 클라이언트가 갱신된 m3u8 파일을 받아가 생성되니 미디어 세그멘트 파일을 요청해야 한다
    • 그만큼 송출/시청 영상 사이의 딜레이가 발생 (player buffer 와 같은 다른 지연 요소들을 고려하지 않더라도)

LHLS (Low Latency HLS, twitch 에서 사용중인 HLS protocol 확장, Apple 에서 정의한 Low Latency HLS - LLHLS 와는 전혀 다름)

  • HLS 에서의 송출/시청 간 딜레이를 줄여보기 위해 개선된 프로토콜

  • 아직 완성되지 않은(file stream 이 아직 닫히지 않은) 미디어 세그멘트를 m3u8 에 추가

  • 아직 만들어지지 않은 (file stream 이 아직 생성되지 않은) 미디어 세그먼트를 m3u8 에 추가

    image

  • client 는 생성중인 미디어 세그멘트 파일을 transfer-encode : chunked 를 통해 실시간으로 생성되는 파일을 받아와 미디어 세그멘트 파일 생성을 기다리는 시간만큼 딜레이를 줄일 수 있다

Brotli

https://github.com/google/brotli

Q. chunked encoding일 시, content length가 없으므로 캐시가 무시되는가?

Q. content length를 클라이언트에서 문제가 발생했는지 어떻게 검증할 수 있을까.

Q. content length는 왜 잘못 계산되는걸까.

Q. 엔터티 헤더 vs 메시지 헤더?