减少HLS流式FFMPEG的延迟

时间:2017-04-23 12:33:03

标签: ffmpeg streaming video-streaming hls

我通过ffmpeg使用了hls流媒体。
在流延迟开始时存在几秒钟。
当我想要在流中存在4k视频流时非常延迟。
我能做什么?

3 个答案:

答案 0 :(得分:3)

  

4k视频

...

  

在流媒体延迟的开始存在几秒钟

是的,当然可以。缓冲足够的数据以播放非常高的比特率需要时间。不仅如此,你的HLS播放器在解码甚至开始之前通常需要一些片段。正如@iangetz所说,你可以减少段长度,但现在由于所有额外的HTTP请求,你将会有更多的开销。

  

减少HLS流的延迟

不要使用HLS。 HLS或任何其他分段流传输协议(如DASH)都针对低延迟进行了优化。它针对重复使用HTTP CDN进行了优化,可以在网络变化(例如从WiFi到LTE)以及客户端可选择(通常是动态)质量的情况下进行回放。

分段协议的本质需要将相对较大的缓冲区分块,然后单独上传到服务器/ CDN。这非常有用,但如果你需要低延迟,这不是一个很好的权衡。

如果延迟对您很重要,您需要一种完全不同的技术。看看WebRTC。利用这项技术,实时视频流,编解码器针对质量延迟进行了优化,降低了可靠性,有利于延迟。它还需要对分销基础设施进行大量投资。

我无法想象有人关心4k视频的人认为降低质量会导致低延迟的折衷。你不能拥有你想要的一切......你必须选择对你来说真正重要的东西并从那里进行优化。如果你想要低延迟,你将不得不降低你的质量,花费大量的金钱和时间在基础设施上来支持这项工作。如果您需要高质量和可靠的流,您可以保留良好的编码参数,同时使用DASH(或HLS)在现有的基于HTTP的CDN上进行分解。

答案 1 :(得分:2)

玩家可能会在开始播放前为其缓冲区填充足够的内容。

您可以使用“hls_time”缩小视频片段大小,以便每个片段的下载速度更快,但这会对您的服务器产生更多的HTTP请求。此外,您可以使用'hls_init_time'缩小第一个细分,并保留其他细分。

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

  

hls_init_time seconds设置初始目标段长度   秒。默认值为0.将在下一个关键帧上剪切段   在此时间已经过了第一个m3u8列表。最初之后   填充播放列表ffmpeg将在持续时间等于的时间内剪切片段   hls_time

     

hls_time seconds以秒为单位设置目标段长度。默认   值为2.在此时间之后,将在下一个关键帧上剪切段   已经过去了。

另一种选择是减少播放器开始播放前所需的缓冲量。我不确定你使用的是哪个播放器,但大多数都有此选项。

答案 2 :(得分:1)

low latency HLS in ffmpeg现在有特定的选项。尽管目前支持“社区”低延迟(LHLS),但在主要的HLS播放器之一(hls.js)中,moves to deprecate倾向于苹果公司Low Latency HLS的最新发展。