我正在使用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