我正在尝试使用媒体源扩展 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 合并到管道中。
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/