Media Foundation SinkWriter(MP4 FastStart)

时间:2014-12-27 15:38:15

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

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

我检查并确认托管该文件的http网站支持Accepts-Ranges标题字段,过了一段时间我发现问题的发生是因为文件没有使用"快速启动& #34;允许逐步下载视频的标志。

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

1 个答案:

答案 0 :(得分:2)

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

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

  

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

     

为了使mpeg4接收器使用此属性,字节流   传入时一定不能慢慢寻求或远程寻找。

     

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

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

另见: