如何在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++ 中使用 ffmpeg 动态更改视频的音轨?

如何在 C 程序中使用 Gstreamer 在视频中动态添加和删除字幕

如何在 C# 中使用 TaskScheduler 设置“仅在登录时运行”和“运行方式”?

如何使用 ffmpeg 在视频中的任意位置显示大量字幕?