【问题标题】:nginx-rtmp + ffmpeg move mp4's moov to head on the flynginx-rtmp + ffmpeg 动态移动 mp4 的 moov
【发布时间】:2017-02-14 00:47:33
【问题描述】:

我有以下用例:

1) Alice 发布流到 nginx-rtmp 服务器

2)服务器将流转为m​​p4(如果我理解正确,默认是flv,需要编解码器转换)

3) Bob 应该能够在 Alice 仍在发布时对该 mp4 文件进行范围请求

不过,似乎 ffmpeg 将 flv 转换为 mp4 的命令只能在完全生成 mp4 文件时才能完成,然后 ffmpeg 将执行第二遍并将“moov”移动到其新文件的头部

我们的用例是允许 Bob 使用范围请求来检索 mp4 文件,同时 Alice 从时间 0(即从第二个 Alice 开始发布)开始发布(即尽快观看 Alice 的视频)。因此,以 mp4 的 moov 为首,执行范围请求和实现功能很简单。原始 RTMP 似乎不能解决我们的问题,因为我们不能让 Bob 从时间 0 开始观看 Alice 的录音。

问题是: 1) 是否可以在 flv 尚未完全生成时执行此操作? 2) 还有什么想法我们应该如何使用 nginx-rtmp/ffmpeg 来实现我们想要的功能?

非常感谢

【问题讨论】:

    标签: video nginx ffmpeg mp4 rtmp


    【解决方案1】:

    不,这是不可能的(除非您构建一个完全自定义的播放器,在这种情况下为什么要使用 MP4)。您需要的是一种可流式传输或碎片化的格式,例如 HLS 或 CMAF。

    【讨论】:

    • 有没有办法将 h.264 帧甚至某些 mpeg 音频帧的字节动态“馈送”到 HTML5 浏览器解码器?这就是媒体源扩展 (MSE) 的意义所在吗?它是否允许设置 AVC 解码器配置和音频特定配置(PPS 和 SPS)?我不明白为什么只包含 MPEG a/v 数据的 FLV 不能在浏览器中播放(因为它现在基本上是 mp4 格式的变体)。
    • @VC.One 刚刚尝试了 flv 在这种情况下可以工作。即我只需要将http服务器指向记录的flv,并且满足所有必要的要求
    • FLV 肯定不是 MP4 的变体。 MSE 使用 CMAF,这就是我在回答中这么说的原因。 (或者你的意思是 f4v。因为这是 MP4 的变体,但这只是 adobe 试图混淆你。不要让他们)
    猜你喜欢
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多