媒体基础 SinkWriter (MP4 FastStart)
Posted
技术标签:
【中文标题】媒体基础 SinkWriter (MP4 FastStart)【英文标题】:Media Foundation SinkWriter (MP4 FastStart) 【发布时间】:2014-12-27 15:38:15 【问题描述】:我正在使用 Media Foundation 在经过一系列过滤器后从输入 MP4 创建 MP4 (H264 + AAC) 输出文件。视频的创建工作完美,视频在本地复制没有问题。问题是,当远程执行(通过网络播放器甚至 VLC)时,视频在完全下载之前不会开始播放。
我检查并确认托管该文件的 http 网站支持 Accepts-Ranges 标头字段,一段时间后我发现问题的发生是因为该文件尚未使用允许的“快速启动”标志创建渐进式下载视频。
我试图在网上搜索解决方案,但我一直无法找到一种方法来使用 Media Foundation 的 Sinkwriter 应用该标志。任何的想法? (我不能使用任何外部应用程序来执行此操作,因为此代码将在 Windows 应用商店环境中运行)
【问题讨论】:
【参考方案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
框移到开头。
另见:
How to generate "moov before mdat" MP4 video files with Media Foundation【讨论】:
谢谢,该标志在我的情况下不起作用,我最终编写了一个小型 MP4 解析器并在 MDAT 之前手动移动 MOOV(也更改了 STCO 的偏移量)以上是关于媒体基础 SinkWriter (MP4 FastStart)的主要内容,如果未能解决你的问题,请参考以下文章
如何将音频添加到使用 SinkWriter 创建的 mp4 文件中?
MF SinkWriter mp4 文件的播放持续时间是添加音频样本时的一半时间,图像的播放速度也快两倍
从 SinkWriter 或 ICodecAPI 或 IMFTransform 获取编码器名称