使用 mp4box 直播短跑内容
Posted
技术标签:
【中文标题】使用 mp4box 直播短跑内容【英文标题】:Live streaming dash content using mp4box 【发布时间】:2015-08-17 12:29:00 【问题描述】:我正在尝试使用媒体源扩展 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 套接字将其逐块发送到 javascript 客户端,该客户端将其提供给媒体源 API。
但是,这不是直播内容的好方法。
我现在要做的是创建一个管道,以便实时完成,并尽可能降低延迟。
使用 FFmpeg,可以将输出重定向到 stdout
而不是 out.mp4
并获取内容。
我不知道是否可以将 MP4Box 合并到管道中。
-
MP4Box 能否从非文件源获取输入数据?
MP4Box 能否在实时到达时逐步抓取此类内容(从文件或其他来源)?即,如果流停止 1 秒并自动恢复,请稍等片刻。
同样的问题,但对于输出:它可以输出到不是文件的东西(例如
stdout
)吗?它可以逐步这样做,以便每当输出数据准备好时,我就可以接受并传输它发送到网络客户端,本质上是生成一个永无止境的虚线 MP4。
【问题讨论】:
【参考方案1】:您不需要 MP4Box 来生成所需的输出,但您需要自己分块内容以在生成的文件中查找框。
基本上,您将生成一个带有H264
的fMP4
,并将moov
框发送到浏览器以进行初始化,并将moof+mdat
框发送到您生成的每个MP4 片段。您必须使用 JavaScript 编写播放器代码,您可能无法使用标准 DASH 播放器。
要生成正确的分段 MP4,您需要将其传递给 ffmpeg:-movflags empty_moov+omit_tfhd_offset+frag_keyframe+default_base_moof
。
确保使用可用的最新版本。
【讨论】:
您必须使用可用于 x264 的参数。我要检查的第一个是-tune zerolatency
,然后从那里开始工作。
@Silvia 正如 Pablo 所建议的,我不再使用 MP4box,因为我已经使用 ffmpeg 进行了所有设置。我仍在努力解决延迟问题,但除此之外,它运行良好。 ffmpeg 命令是:“ffmpeg -i rtsp://172.20.28.52:554/h264 -vcodec copy -an -f mp4 -reset_timestamps 1 -movflags empty_moov+default_base_moof+frag_keyframe -loglevel quiet -” 我正在抓取 ffmpeg 输出通过标准输出并使用网络套接字将其流式传输到网络
@gelbarm 当您通过 websocket 发送帧时,您是否需要以任何方式拆分帧(例如,每帧只有一个 MP4 片段)?或者任何数量的字节都可以工作,因为视频/媒体源正确地重建了片段?我正在尝试做完全相同的事情,但它只有 10% 的时间有效。
@PhilippeCayouette 您需要在片段级别执行此操作。基本上,您可以解析框边界中的编码字节流并发送moof
+mdat
框。一旦你正确初始化它(使用moov
框),它就可以被媒体源对象解析。
@PabloMontilla 你能分享一种方法来拆分 moov/moof+dat 片段中的流以将它们正确发送到客户端吗?【参考方案2】:
据我了解,您的解决方案不是流式传输,而是逐步下载单个 MP4 文件。我理解正确吗?
我最近启动了RTP2DASH 项目,从 RTP 数据源进行真正的 DASH 直播。它仍然是非常“alpha”的,但它应该很容易被简单的用例采用。
【讨论】:
没有。我的解决方案确实是视频流。虽然数据的内容是碎片化的 mp4 格式,但数据从不写入文件。 我明白了,但仍然不是 DASH,对吧?没有清单,也没有多重品质。它将 RTSP 流转换为渐进式下载。 正确。它不是自适应流媒体解决方案。这是一种尽可能低的延迟 - 单一质量的解决方案。 其中一个好处是这种解决方案不需要转码。它很轻。您可以从单个服务器流式传输数百个流。 我的建议也不需要转码,但你会得到一个 DASH 流。我的印象是,使用 DASH 是一种要求——当然,如果您使用 html5 视频标签进行渐进式下载,它会尽可能地轻量级。我在 IBC 上遇到了 mistserver.org 家伙。他们去年的展示正是您从树莓派流向数百个客户的方式。可能值得一看!以上是关于使用 mp4box 直播短跑内容的主要内容,如果未能解决你的问题,请参考以下文章