使用 mp4box 直播破折号内容

Live streaming dash content using mp4box

我正在尝试使用媒体源扩展 [=45] 将 H.264 内容直播到 HTML5 =].

以下方法效果很好:

ffmpeg -i rtsp://10.50.1.29/media/video1 -vcodec copy -f mp4 -reset_timestamps 1 -movflags frag_keyframe+empty_moov -loglevel quiet out.mp4

然后: mp4box -dash 1000 -frag 1000 -frag-rap out.mp4

我可以获取 MP4Box 输出 (out_dashinit.mp4) 并通过 Web 套接字将其逐块发送到提供它的 JavaScript 客户端到媒体来源 API.

但是,这不是直播内容的好方法。

我现在想做的是创建一个单一的管道,以便实时并尽可能减少延迟。 使用 FFmpeg 可以将输出重定向到 stdout 而不是 out.mp4 并获取内容。 我不知道是否可以将 MP4Box 合并到管道中。

  1. MP4Box 可以从非文件来源获取输入数据吗?
  2. MP4Box 能否在实时到达时逐步抓取此类内容(从文件或其他来源)?即,如果流停止 1 秒并自动恢复,稍等片刻。
  3. 同样的问题,但对于输出:它能输出到不是文件的东西吗(比如stdout),它能逐步输出,这样每当输出数据准备好时,我就可以接受它并将其传输到 Web 客户端,本质上生成一个永无止境的虚线 MP4。

您不需要 MP4Box 来生成所需的输出,但您需要自己将内容分块以在生成的文件中查找框。

基本上你会用H264生成一个fMP4,并向浏览器发送初始化的moov框和MP4每个片段的moof+mdat框你产生的。您必须在 JavaScript 中编写播放器代码,您可能无法使用标准的 DASH 播放器。

要生成正确的分段 MP4,您需要将其传递给 ffmpeg:-movflags empty_moov+omit_tfhd_offset+frag_keyframe+default_base_moof

务必使用可用的最新版本。

据我了解您的解决方案,您不是在流式传输而是在逐步下载单个 MP4 文件。我理解正确吗?

我最近启动了 RTP2DASH 项目来从 RTP 数据源进行真正的 DASH 直播。它仍然非常 'alpha' 但对于简单的用例应该很容易采用。