如何在c ++中使用ffmpeg编码视频时设置moov原子位置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在c ++中使用ffmpeg编码视频时设置moov原子位置相关的知识,希望对你有一定的参考价值。
我正在使用c ++中的ffmpeg将一些h264视频编码到mp4容器中。但结果视频将moov原子(或元数据?)放在视频文件的末尾,这对于互联网流媒体来说是不利的。那么如何将moov原子位置设置在前面呢?
答案
你需要使用ffmpeg的faststart标志将moov原子放在MP4文件的开头,Here是标志的解释。以编程方式,您需要在输出上下文中设置标志,这是示例代码及其为我工作,
AVFormatContext *outFormatCtx;
// Write MOOV atom at the begining of the MP4 file
MOVMuxContext *mov = NULL;
mov = (MOVMuxContext *)outFormatCtx->priv_data;
mov->flags |= FF_MOV_FLAG_FASTSTART;
另一答案
MOVMuxContext是内部标头,不应直接访问。它的实现不是API的一部分,它可以改变。官方的方法是通过AVDictionary设置选项:
AVDictionary* options = nullptr;
av_dict_set( &options, "movflags", "faststart", 0 );
avio_open2(..., &options);
以上是关于如何在c ++中使用ffmpeg编码视频时设置moov原子位置的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 FFMPEG 和 C 将音频和视频写入同一个文件?
使用 Spring MVC 时如何在 Freemarker 视图中设置内容类型?
如何在 C 程序中使用 Gstreamer 在视频中动态添加和删除字幕