我正在使用Media Foundation通过一系列过滤器从输入MP4中创建MP4(H264 + AAC)输出文件。视频的创建工作完美,并且可以在本地无问题地复制视频。问题在于,当远程执行(通过网络播放器或VLC)时,视频只有在完全下载后才能开始播放。

我检查并确认托管该文件的http网站支持Accepts-Ranges标头字段,过了一会儿我才发现问题是由于未使用允许快速下载的“快速启动”标志创建的文件视频。

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

最佳答案

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

Media Foundation引入了MF_MPEG4SINK_MOOV_BEFORE_MDAT attribute来处理此问题:


  mpeg4媒体接收器的默认行为是在之后写入'moov'
  'mdat'框。设置此属性会使生成的文件写入
  'mdat'框之前的'moov'。
  
  为了使mpeg4接收器使用此属性,字节流
  传入的内容不能慢速搜索或远程获取。
  
  此功能涉及额外的文件复制/重新混合。


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

也可以看看:


How to generate "moov before mdat" MP4 video files with Media Foundation

07-24 09:24