2017-04-23 6 views
0

ffmpeg를 통해 스트리밍하는 hls를 사용했습니다.
스트리밍 시작 시간이 몇 초 동안 지연됩니다.
매우 지연되는 동안 스트림에서 4k 비디오의 스 트리밍을 원할 때.
내가 할 수있는 일은 무엇입니까?HLS 스트리밍 FFMPEG의 대기 시간 줄이기

+0

인코딩의 대기 시간을 줄이는 방법에 대해 이야기하고 있습니까? 아니면 비디오를 재생하기 전에 필요한 버퍼링 프로세스에 대해 묻는 것입니까? 4k 비디오와 같은 높은 비트 전송률의 비디오로만 길어질 수 있습니까? – Brad

+0

@ 브래드 나는 살아있는 스트림의 재생에 인코딩의 대기 시간을 줄이는 것에 대해 이야기하고 있습니다. 그러나 당신이 저에게 요청한 두 가지 모두를 도와주십시오. 스트리밍에이 코드를 사용했습니다. 내 필요에 따라 더 나아질 것을 권고 해주십시오. '는 FFmpeg - 재 -i input.mp4 -s CGA -f HLS -hls_list_size 0 -g 48 -vcodec libx264 -c하십시오 AAC를 200P/out.m3u8 \t \t -s NHD -f HLS -hls_list_size 0 -g 48 -vcodec libx264 -c : aac 360p/out.m3u8' – parsa

답변

1

4K 비디오

...

은 물론 그것을하지, 몇 초

예 존재합니다. 매우 높은 비트 전송률을 재생하기에 충분한 데이터를 버퍼링하는 데는 시간이 걸립니다. 뿐만 아니라 HLS 플레이어는 일반적으로 시작 부분을 디코딩하기 전에 몇 개의 세그먼트가 필요합니다. @iangetz에 따르면, 세그먼트 길이를 줄일 수 있지만 이제 모든 여분의 HTTP 요청으로 인해 더 많은 오버 헤드가 생길 것입니다.

는 HLS를 사용하지 마십시오

HLS 스트리밍을위한 대기 시간을 줄일 수 있습니다. HLS 또는 DASH와 같은 다른 세그먼트 화 된 스트리밍 프로토콜은 낮은 대기 시간에 맞게 최적화되어 있습니다. HTTP CDN 재사용, 네트워크 변경 (예 : Wi-Fi에서 LTE로 전환) 및 고객이 선택할 수있는 (종종 동적으로) 품질을 유지하면서 재생할 수 있도록 최적화되었습니다.

세그먼트 화 된 프로토콜의 본질은 서버/CDN에 개별적으로 업로드되어 업로드 될 비교적 큰 버퍼가 필요합니다. 이것은 매우 유용하지만 낮은 대기 시간이 필요한 경우에는 좋은 절충안이 아닙니다.

대기 시간이 중요한 경우 완전히 다른 기술이 필요합니다. WebRTC를 살펴보십시오. 이 기술을 사용하면 비디오 스트림을 실시간으로 재생할 수 있으며 코덱은 품질보다 지연 시간에 최적화되어 안정성이 낮아 대기 시간이 단축됩니다.또한 유통 인프라에 상당한 투자가 필요합니다.

4k 비디오에 관심이있는 사람이 낮은 대기 시간의 품질 저하가 가치가 있다고 생각하는 상황을 상상할 수 없습니다. 원하는 모든 것을 가질 수는 없습니다 ... 실제로 중요한 것을 선택하고 거기에서 최적화해야합니다. 대기 시간을 줄이려면 품질을 낮추고 인프라를 지원하는 데 많은 시간과 돈을 투자해야합니다. 고품질의 안정적인 스트림을 원하면 기존의 HTTP 기반 CDN에서 DASH (또는 HLS)를 사용하여 좋은 인코딩 매개 변수를 유지할 수 있습니다.

+0

고마워요.이 링크에 대해 아무 것도 모릅니다. [https://trac.ffmpeg.org/wiki/HWAccelIntro](https:/ /trac.ffmpeg.org/wiki/HWAccelIntro) 하지만 알고 싶은 것은 hls 라이브 스트리밍과 함께 낮은 대기 시간을 갖는 데 도움이된다는 것입니다. – parsa

+0

@parsa No. 하드웨어 가속을 사용하면 CPU에서 실행하는 대신 인코딩 작업을 GPU로 오프로드 할 수 있습니다. – Brad

2

플레이어가 버퍼를 재생하기 전에 충분한 콘텐츠로 채우고있는 것 같습니다.

'hls_time'을 사용하여 비디오 세그먼트 크기를 줄일 수 있으므로 각 세그먼트가 더 빨리 다운로드되지만 서버에 더 많은 HTTP 요청이 발생합니다. 또한 'hls_init_time'으로 첫 번째 세그먼트를 줄이고 다른 세그먼트는있는 그대로 둘 수 있습니다.

http://ffmpeg.org/ffmpeg-all.html#hls-1

hls_init_time의 초 초 초기 대상 세그먼트의 길이를 설정한다. 기본값은 0입니다.이 시간이 첫 번째 m3u8 목록을 통과하면 키 프레임에서 세그먼트가 잘립니다. 재생 목록이 채워지면 ffmpeg는 과 동일한 기간에 세그먼트를 자릅니다. hls_time

hls_time 초 대상 세그먼트 길이를 초 단위로 설정합니다. 기본값 값은 2입니다. 시간이 지나면 다음 키 프레임에서 세그먼트가 잘립니다.

또 다른 옵션은 플레이어가 재생을 시작하기 전에 필요한 버퍼의 양을 줄이는 것입니다. 어떤 플레이어를 사용하고 있는지 잘 모르지만 대부분이 옵션이 있습니다. 지연 스트리밍의 시작에서