我发现Microsoft Media Foundation生成了MPEG4文件,其中MDAT原子位于MOOV原子之前。流媒体需要MDAT之前的MOOV。我以为解决我的问题的方法是在创建接收器时使用MF_MPEG4SINK_MOOV_BEFORE_MDAT属性,但是我似乎无法使其发挥作用。我的代码与http://blogs.msdn.com/b/eternalcoding/archive/2013/03/06/developing-a-winrt-component-to-create-a-video-file-using-media-foundation.aspx大致相同。在该示例中,我将在设置MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS之前将属性设置为UINT32 TRUE。
最佳答案
如果您无法让编码器在开始时输出带有moov原子的文件,则始终可以在之后更正该文件。这两个实用程序都应在Windows上运行,然后解决问题。 (尽管名称中带有“qt”,但它们都可以正确处理.mp4文件)
https://github.com/danielgtaylor/qtfaststart
http://ffmpeg.zeranoe.com/blog/?p=59