通过ffmpeg直播HLS,如何强制客户端从头开始播放?从第一段

Posted

技术标签:

【中文标题】通过ffmpeg直播HLS,如何强制客户端从头开始播放?从第一段【英文标题】:Live streaming HLS via ffmpeg, How to force client to start playing from the beginning? From 1st segment 【发布时间】:2015-05-12 21:22:03 【问题描述】:

有没有办法(可能通过 ffmpeg 选项或标志)强制客户端播放器在实时流式传输时始终从头开始播放列表,而不是实时中流?

假设用户在流开始后 100 万进入,而不是在 100 万开始观看,播放器将从视频的开头开始,所以零分钟。

这是我的 ffmpeg 命令:

ffmpeg -f "screen capture" -s 1280x720 -r 30 -i :0.0+nomouse -f alsa -ac 2 -i pulse -async 30 -vcodec libx264 -pix_fmt yuv420p -acodec libfdk_aac -ar 44100 -b:a 64k -threads 0 -s 640x360 -f hls -g 1 -hls_time 1 -hls_list_size 1 -hls_allow_cache 0 /hls/#@stream_name/index.m3u8

谢谢!

【问题讨论】:

【参考方案1】:

使用-hls_list_size 0 将所有片段保留在播放列表中。使用大于 0 的值将导致播放列表使用 hls_list_size 长度的滑动窗口。

另外值得注意的是,使用-hls_time 1 会大大增加您的播放列表文件大小。 Apple 推荐的值为 6 秒,因此您应该尝试将其增加到所需关键帧间隔的倍数。

【讨论】:

谢谢,我会尝试,我正在尝试将 hls_time 值保持在较低水平,因为这是一个直播,我想保持播放器找到播放列表并开始播放的时间,似乎播放器在开始播放之前正在等待几个片段,因此 hls_time 越长,延迟似乎就越高。你知道这个延迟问题的另一种解决方案吗? 播放前需要3段。但是使用 hls-time 是不够的,您还需要指定 1s 的关键帧间隔。您可以为此使用 -g(GOP 大小)选项。例如:-g 30 将每 30 帧插入一个 iframe,并且由于您的帧速率为 30 fps,因此转换为 1 iframe / s 苹果推荐-hls_time是6 @Abhay 是的,他们同时更改了值。

以上是关于通过ffmpeg直播HLS,如何强制客户端从头开始播放?从第一段的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg基于HLS实现大视频分片下载播放[视频直播二]

FFmpeg基于HLS实现大视频分片下载播放[视频直播二]

使用Nginx+FFMPEG搭建HLS直播转码服务器

FFMPEG 流媒体协议

如何在直播中使用 FFMpeg 将 dvb 字幕转换为文本格式,或者如何优化 dvb 刻录过程?

如何通过 hls.js 跳转到 hls 流中的具体 UTC 时间戳