如何在c ++中使用ffmpeg编码视频时设置moov原子位置

问题描述 投票:4回答:2

我正在使用c ++中的ffmpeg将一些h264视频编码到mp4容器中。但结果视频将moov原子(或元数据?)放在视频文件的末尾,这对于互联网流媒体来说是不利的。那么如何将moov原子位置设置在前面呢?

c++ ffmpeg mp4 h.264
2个回答
2
投票

你需要使用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;

3
投票

MOVMuxContext是内部标头,不应直接访问。它的实现不是API的一部分,它可以改变。官方的方法是通过AVDictionary设置选项:

AVDictionary* options = nullptr;
av_dict_set( &options, "movflags", "faststart", 0 );
avio_open2(..., &options);
© www.soinside.com 2019 - 2024. All rights reserved.