13

我正在尝试使用媒体源扩展 API 将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

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

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

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

2 回答 2

12

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

基本上,您将生成一个fMP4with ,并将用于初始化的框和您生成的每个 MP4 片段的框H264发送到浏览器。你必须用 JavaScript 编写播放器,你可能无法使用标准的 DASH 播放器。moovmoof+mdat

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

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

于 2015-06-04T12:19:22.190 回答
1

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

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

于 2015-09-11T10:59:07.677 回答