【问题标题】:Media Foundation SinkWriter (MP4 FastStart)媒体基础 SinkWriter (MP4 FastStart)
【发布时间】:2023-04-08 16:26:01
【问题描述】:

我正在使用 Media Foundation 在经过一系列过滤器后从输入 MP4 创建 MP4 (H264 + AAC) 输出文件。视频的创建工作完美,视频在本地复制没有问题。问题是,当远程执行(通过网络播放器甚至 VLC)时,视频在完全下载之前不会开始播放。

我检查并确认托管该文件的 http 网站支持 Accepts-Ranges 标头字段,一段时间后我发现问题的发生是因为该文件尚未使用允许的“快速启动”标志创建渐进式下载视频。

我试图在网上搜索解决方案,但我一直无法找到一种方法来使用 Media Foundation 的 Sinkwriter 应用该标志。任何的想法? (我不能使用任何外部应用程序来执行此操作,因为此代码将在 Windows 应用商店环境中运行)

【问题讨论】:

    标签: c++ winapi video com ms-media-foundation


    【解决方案1】:

    渐进式下载要求在 MPEG-4 文件中 moov 框位于 mdat 框之前,这通常需要在生成文件时进行额外的工作,这不是 Media Foundation 的默认行为。

    媒体基金会介绍了MF_MPEG4SINK_MOOV_BEFORE_MDAT attribute 来处理这个问题:

    mpeg4 媒体接收器的默认行为是在之后写入 'moov' 'mdat' 框。设置此属性会导致生成的文件写入 'mdat' 框之前的'moov'。

    为了让 mpeg4 sink 使用这个属性,字节流 传入的不能是slow seek或者remote for。

    此功能涉及额外的文件复制/重新混合。

    注意最低要求。或者,您需要对文件进行后处理以将moov 框移到开头。

    另见:

    【讨论】:

    • 谢谢,该标志在我的情况下不起作用,我最终编写了一个小型 MP4 解析器并在 MDAT 之前手动移动 MOOV(也更改了 STCO 的偏移量)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多