gpt4 book ai didi

C++ FFMPEG 不写入 AVCC 框信息

转载 作者:可可西里 更新时间:2023-11-01 18:33:09 27 4
gpt4 key购买 nike

我正在尝试使用 C++ 中的 FFMPEG API 将原始 H264 编码为 mp4 容器。一切正常,但 AVCC 框为空,并返回错误:[iso 文件] 框“avcC”大小 8 无效

如果我然后在输出文件上使用命令行工具:

ffmpeg -i output.mp4 -vcodec copy fixed.mp4

输出文件有效,并且 AVCC 填充了所需的信息。我不知道为什么这个命令行参数有效,但我无法使用 API 产生相同的结果。

我在 C++ 代码中做了什么(也在函数调用之间做了一些事情):

outputFormat_ = av_guess_format( "mp4", NULL, NULL ); //AV_CODEC_H264
formatContext_ = avformat_alloc_context();
formatContext_->oformat = outputFormat_;
...
AVDictionary *opts = NULL;
char tmpstr[50]; sprintf(tmpstr, "%i", muxRate * KILOBYTESTOBYTES);
av_dict_set(&opts, "muxrate", tmpstr, 0);
avformat_write_header( formatContext_, &opts);
av_write_trailer(formatContext_);

此输出是正确的,只是它缺少 AVCC 信息。这是手动添加的(并相应地固定框的长度)让我可以很好地播放视频。知道为什么 API 调用没有生成 AVCC 信息吗?

作为引用,这里是修复前 mp4 中的字符:

.avc1.........................€.8.H...H..........................................ÿÿ....avcC....stts

及之后:

avc1.........................€.8.H...H..........................................ÿÿ...!avcC.B€(ÿá..gB€(Ú.à.—•...hÎ<€....stts

最佳答案

我的 MP4 文件也有空 AVCC 框的问题。事实证明,我在调用 avcodec_open2 之后 AVCodecContext 实例上设置了 CODEC_FLAG_GLOBAL_HEADER 标志。应在调用 avcodec_open2 之前设置标志。

关于C++ FFMPEG 不写入 AVCC 框信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15897849/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com