我正在尝试使用媒体源扩展 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 )通过 Web Sockets 一块一块地发送到 JavaScript 客户端,然后将其提供给媒体源 API。

但是,这对于实时内容来说并不是一个好方法。

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

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

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

    基本上,您将使用 fMP4 生成一个 H264 ,然后将 moov 框发送到浏览器进行初始化,并将 moof+mdat 框发送到浏览器,用于生成每个 MP 片段。您必须用 JavaScript 对播放器进行编码,您可能无法使用标准的 DASH 播放器。

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

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

    关于ffmpeg - 使用 mp4box 实时流式传输破折号内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30617673/

    10-12 17:18