【发布时间】:2017-11-27 16:58:58
【问题描述】:
我正在使用 ffmpeg 保存带有 .m3u8 url 的实时流。我经常看到以下消息。这会导致输出视频冻结。
skipping 5 segments ahead, expired from playlists
我怎样才能告诉 ffmpeg 只写帧而忽略它们已过期?我宁愿看一段断断续续的视频,也不愿让它冻结。
【问题讨论】:
标签: ffmpeg
我正在使用 ffmpeg 保存带有 .m3u8 url 的实时流。我经常看到以下消息。这会导致输出视频冻结。
skipping 5 segments ahead, expired from playlists
我怎样才能告诉 ffmpeg 只写帧而忽略它们已过期?我宁愿看一段断断续续的视频,也不愿让它冻结。
【问题讨论】:
标签: ffmpeg
老问题,但是WTH...也许它可以帮助某人。
如果我对情况的理解正确,则该消息意味着 ffmpeg 正在跳过 5 个完整块(“段”)的下载。
这不是关于“过期帧”,而是“我已安排下载但不再在播放列表上发布的块”。
5 个块/段可能长达几秒钟,而不仅仅是 5 帧。这就是你看到冻结的原因。
也许您可以尝试对输入使用一些过滤器,这样输出多路复用器可能会填补分段间隙。看一下叠加过滤器,例如:https://ffmpeg.org/ffmpeg-filters.html#Examples-82
【讨论】:
ffmpeg(通常通过youtube-dl)记录它时,我经常查看一个存在此问题的站点。网络播放器没有这样的问题,所以我很清楚跳过的片段是可用的,并且缺少在录制中显示为冻结的动作。您可以在 ffmpeg 日志输出中每个 URL 末尾的 ts 编号中看到这一点。对于通常的进程,每个数字相差 1,但有时相差更大,即跳过的数字。但我不知道如何让ffmpeg 不跳过这些片段。也许我需要深入研究ffmpeg 源代码。