마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

실시간 스트리밍 지연시간이 왜 생기는 건가요?

0 추천
wowza를 통해 확인해본 프로토콜은 RTMP, HLS, DASH 3가지 인데

RTMP는 3초? 4초정도, RTMP, HLS는 30초 이상의 지연시간이 있네요

왜 이런 지연시간이 생기는지, 지연시간이 이렇게 차이나는지 알고 싶습니다.
이름없음 님이 2018년 8월 9일 질문

1개의 답변

0 추천

 RTMP 는 영상 원본이 A라 할 때 세션을 맺은 후 A에서 NAL 데이터를 추출해서 클라이언트로 바로 전송합니다.

이와 달리 HLS는 A 에서 각 세그먼트를 생성( 1.ts, 2.ts, 3.ts .... ) 하고, 이 segment에 대한 리스트 (m3u8)를 생성해 둬야,  클라이언트에서 리스트를 다운 받고 리스트에 해당하는  세그먼트(ts)를 다운 받아 재생할 수 있는  구조입니다.(DASH는 1.m4v, 2.m4v. 같은 세그먼트와 mpd 를 리스트로 사용한다는 것만  다르고 거의 동일 합니다.)

즉 m3u8 에 들어있는 ts 파일 리스트 갯수에 따라  (ts 파일 시간 * 갯수) + 리스트 생성 시간이 추가로 들어갑니다.   예를 들어 ts 파일 한개당 시간이 5 초이고 m3u8에 있는 ts 파일 리스트가 5개라면,  최소 25초 만큼의 딜레이가 존재할 수 밖에 없습니다.

 

익명사용자 님이 2018년 8월 9일 답변
2018년 8월 9일 수정
RTMP를찾아봤는데 지연시간을 줄이기 위해서 bufferlength 옵션을 디폴트값3 에서 0으로 수정하라고 하더군요 HLS,DASH 에서는 chunk 크기(duration target?)를 10초 > 2초까지 낮추면 딜레이가 현저히 줄어든다는데 그럼 RTMP의 bufferlength와 HLS의 Chunk랑 같은 개념인가요?

그리고 이 값들을 낮추면 딜레이는 줄어들지만 생기는 문제점엔 뭐가있을까요?
RTMP의 bufferlength 가 뭘 의미하는지 모르겠네요.. ffmpeg이나 vlc에서 받아 재생하는 버퍼 길이를 말하는건가요? 프로토콜 자체의 값은 아닌 것으로 생각됩니다.

HLS,DASH chunk 크기가 ts 파일 한개당 시간이라 보시면 됩니다.
m3u8에 1.ts, 2.ts, 3.ts 경로가 있다 할 때,
10초 짜리 ts면 세 ts를 생성하기 위해 30초의 시간이 필요합니다.
2초 짜리 ts면 두세 ts를  생성하기 위해 6초의 시간이 필요하구요.
따라서 Chunk 사이즈가 줄어들면 딜레이가 줄어듭니다.

문제점이라면 live 재생의 경우 플레이 리스트를 서버에서 재생 시간에 맞춰 변경하고,
단말에서 이 변경 된 정보를 받아가야 하는데, 이 주기가 짧아져서, 트래픽&부하가 상대적으로 높을 수 있습니다.

예를 들어 m3u8에 정의된 ts 경로 갯수가 동일하게 3개라  할 때, 10초 짜리 ts로 이뤄진 리스트는 30초 간 재생 가능한 목록이 있는것에 반해  2초 짜리 ts로 리스트라면 6초 간만 재생이 가능하기 때문에, 10초 ts라면 30초 이내 목록을 업데이트 받으면 되나, 2초 로 된 ts라면  6초가 되기전에 플레이 리스트를 업데이트 받아야 합니다.
궁금한게 있습니다. RTMP는 TCP 기반인데 지연시간이 짧은 이유를 찾고 있습니다. 작성자님이 말씀하신 RTMP세션을 맺은후 nal데이터를 추출해서 클라이언트로 바로 보내는것이 RTMP 의 짧은 지연시간의 이유가 될 수 있을까요 ?
...