c++ - 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
文件发布到我的网络服务器。就这样继续下去,播放列表不断更新,但没有片段文件发布到我的服务器。它们都被写入磁盘并永远保留在那里。
我错过了一面旗帜吗?
解决方案
这hls_segment_filename
不仅适用于基本名称,还接受包括协议在内的完全限定路径。如果仅提供基本名称,则假定文件协议并将工作目录用于输出位置。
推荐阅读
- python - 禁用八卦、交际和心跳对芹菜工人有什么后果?
- java - 单击该面板时如何在面板上设置新的背景颜色?
- javascript - Highcharter 工具提示和绘图选项 - 关键字 this
- jhipster - JHipster Registry 无法显示客户端应用程序指标
- c++ - 如何调整我的代码以确保我的迭代器代码接受用户输入?
- typescript - 尝试使用 TypeScript 和 vue-property-decorator 汇总 Vue
- crash - 为什么在 Glide 4.9.0 中使用 .asBitmap() 会崩溃
- c# - 在显示阴影时准确设置表单边界
- java - Java Spring Reactive Rest API 测试类给出错误 - 空指针异常
- javascript - 尝试将数字增加给定值