首页 > 解决方案 > ffmpeg 仅发布播放列表,但不发布 HLS 片段

问题描述

我正在启动一个 ffmpeg 进程,该进程应该将 HLS“编码”数据发送到网络服务器,该服务器会将其分发给请求它的客户端。我正在使用以下命令行:

                "ffmpeg",
                "-hide_banner",
                "-f", "rawvideo",
                "-pixel_format", "rgb32",
                "-video_size", "800x600",
                "-framerate", "22",
                "-i", "-",
                "-f", "hls",
                "-c:v", "libx264",
                "-crf", "17",
                "-preset", "ultrafast",
                "-hls_time", "1",
                "-flags", "+cgop",
                "-g", "30",
                "-hls_segment_filename", "%d.ts",
                "-method", "POST",
                fmt::format("http://localhost:8082/video/{}/live.m3u8", _uuid)

或者具体来说ffmpeg -hide_banner -f rawvideo -pixel_format rgb32 -video_size 800x600 -framerate 22 -i - -f hls -c:v libx264 -crf 17 -preset ultrafast -hls_time 1 -flags +cgop -g 30 -hls_segment_filename %d.ts -method POST http://localhost:8082/video/ee811a74-7a48-4c4e-8c82-371c1cbbff05/live.m3u8

输出的前几行看起来不错:

[hls @ 0x224aeb0] Opening '0.ts' for writing
Output #0, hls, to 'http://localhost:8082/video/ee811a74-7a48-4c4e-8c82-371c1cbbff05/live.m3u8':

文件名被拾取,URL 也被正确识别。生成第一个文件后,我还会收到POST对上述 URL 的请求,其中live.m3u8包含以下播放列表:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:1
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:1.363667,
0.ts

但我没有将0.ts文件发布到我的网络服务器。就这样继续下去,播放列表不断更新,但没有片段文件发布到我的服务器。它们都被写入磁盘并永远保留在那里。

我错过了一面旗帜吗?

标签: c++ffmpeg

解决方案


hls_segment_filename不仅适用于基本名称,还接受包括协议在内的完全限定路径。如果仅提供基本名称,则假定文件协议并将工作目录用于输出位置。


推荐阅读