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

라이브 스트리밍 프로토콜 질문입니다.

0 추천
개발자는 아니지만 회사다니면서 남는시간에 관심분야 공부나 해볼까 해서

방송어플을 보고있는데 뭐부터 봐야할지 몰라 이것저것 보다 프로토콜을 보게되었습니다

RTSP RTMP HLS DASH 등등 여러개가 있던데 HLS 하고 DASH는 RTSP,RTMP보다 지연시간이 꽤나 길더군요

와우자 디폴트옵션으로 한 40초정도 지연시간이 생기는데 둘다 HTTP기반이고 ABS가 적용되는걸로 알고있습니다.

둘다 같은 기반에 같은 기술이 적용되는데 DASH가 HLS보다 약간 더 빠른 이유가 뭘까요?

그리고 RTSP, RTMP, RTP(?) 보다 Dash, HLS가 많이 사용되는 이유는 뭐죠?

마지막으로 방송어플이다 보니 1:N 이면서 지연시간을 최대한 줄이는게 좋겠다 싶어 찾아보니 WebRTC라는것도 있더군요

DASH, HLS대신 WebRTC를 사용하는건 별로일까요?
로아 (390 포인트) 님이 2018년 8월 7일 질문

2개의 답변

0 추천
 
채택된 답변

둘다 같은 기반에 같은 기술이 적용되는데 DASH가 HLS보다 약간 더 빠른 이유가 뭘까요?

=> 그때 그 때 다릅니다. 일반적으로 DASH는 ISO BMFF 기반의 컨테이너를 사용하면서, 

 initSegment라는 코덱 정보가 들어간 초기화 파일 부터 로드 한 후 재생을 하게 하나,

 HLS는 MPEGTS를 사용하면서 PMT 테이블 같이 코덱 정보가 일정 주기로 계속 내려오다보니, 코덱 정보가 내려오는 이전의 데이터를 사용 못 해서 , 코덱 초기화 시간만큼 늦게 시작될 수 있습니다.

단지 DASH의 경우 특허가 복잡해서 ISO BMFF 기반의 컨테이너 대신 MPEGTS 컨테이너를 사용하여 재생하는 빈도가 늘어나고 있습니다.

RTSP, RTMP, RTP(?) 보다 Dash, HLS가 많이 사용되는 이유는 뭐죠?

tcp interleave 방식이 있긴하지만, 일반적인 경우 모두 Udp 방식 전송으로 전송 딜레이가 DASH, HLS보다 빠른 장점이있습니다. 하지만 udp 특성상 drop 이 되면서 화면이 깨지는 문제가 존재합니다.  또한 특정 포트를 열어 전송을 해야하다보니, 방화벽 이슈가 있을 가능성도 높습니다. 마지막으로 RTSTP, RTMP, RTP의 경우 소켓을 직접 open하여 send하는 구조라 서버에서  session을 계속 관리 해 줘야해서, 서버에서 할일이 많습니다.

Dash, HLS는 http 기반이라 HTTP 서버에 파일만 올려두면, 세션관리를 별도로 할 필요도 없고,  방화벽 이슈나 드랍이슈도 해결 됩니다. 또한  playlist를 계속 업데이트 받아 해당 시간에 필요한 파일만 받기 때문에, 서버측 부하도 줄어듭니다.

DASH, HLS대신 WebRTC를 사용하는건 별로일까요?

용도에 따라 다릅니다. DASH, HLS 서버의 경우 구축이 간단하지 않고 공개 소드도 별로 없다보니, 원하시는 기능이 된다면 WebRTC를 사용하셔도 상관없습니다.

 

익명사용자 님이 2018년 8월 8일 답변
로아님이 2018년 8월 8일 채택됨
영상 디코딩 하는건 동일합니다.
HLS는 영상 데이터가 0.ts, 1.ts, 2.ts 와 같은 MPEG2TS 컨테이너로 이뤄진 segment 파일의 주소가 m3u8 파일에 있으며, 재생 시점에 따라 필요한 인덱스의 ts 파일을 다운받아 재생합니다.
ts 파일에서 h264 데이터를 추출하려면  PAT, PMT 같은 PSI(Program specific information) 를 먼저 구하여 PID(Program ID) 같은 것을  구한 후 이 값을 기준으로 각 ElementsStream에서 h264 같은 데이터를 추출해 냅니다. 문제는 0.ts, 1.ts 같은 각 파일에  PAT, PMT  정보가 들어있는게 아니라. 용량 문제로 주기적으로 들어 있습니다.
예를 들어 1초짜리 1s이고 3초마다 정보가 들어있을 경우  0.ts  3,ts, 6.ts 에  정보가 들어 있다보니, 1.ts 부터 받아 재생을 시도할 경우 바로 재생 못 하고 2.ts를 받는 시점 부터 재생이 됩니다.

DASH는 hls의 m3u8에 해당하는 mpd 파일에0.ts, 1.ts 같은 파일 경로와 함께  initSegment 경로가 있는데,
이 경로에 PAT, PMT  같은 정보에 해당하는 데이터가 들어 있는 경우가 많습니다..
1.ts를 재생할 시점에  initSegment에 있는 init.m4v 같은 파일을 먼저 받아 코덱 정보를 초기화 하면,  1.ts (ISO BMF 형식의 경우 1.m4v) 를 받는 시점 부터 바로 재생이 가능
한거죠..
(단 인코딩 형식에 따라 initSegment 에 아무 데이터가 없는 경우도 있으니 100%는 아닙니다.)
0 추천
DASH나 HLS는 서버/클라이언트의 구조이기에.. 리소스를 많이 사용하게 됩니다. 그렇지만 WebRTC의 경우는 P2P 구조라서 서버 리소스를 제한적으로 사용할 수 있게에 용도에 따라 사용하시면 되겠습니다. ^^
mcsong (44,040 포인트) 님이 2018년 8월 8일 답변
...