FFMPEG格式错误的AAC比特流已检测到:使用音频比特流过滤器'aac_adtstoasc'修复此错误

doğ*_*an 4 c++ encoding ffmpeg aac transcoding

我正在使用ffmpeg transcoding.c示例。当我将视频编码器编解码器设置为AV_CODEC_ID_H264,将音频编码器编解码器设置为AV_CODEC_ID_AAC时,出现以下错误。

在此处输入图片说明

我该如何解决这个问题。

doğ*_*an 5

首先,感谢您的回答。

我的问题的解决方案是AVBitStreamFilterContext *。我在“ encode_write_frame”方法中添加了以下几行,这没关系。

if(ifmt_ctx->streams[stream_index]->codec->codec_type == AVMEDIA_TYPE_VIDEO && ifmt_ctx->streams[stream_index]->codec->codec_id == AV_CODEC_ID_H264){
    AVBitStreamFilterContext* h264BitstreamFilterContext = av_bitstream_filter_init("h264_mp4toannexb");
    av_bitstream_filter_filter(h264BitstreamFilterContext, ofmt_ctx->streams[stream_index]->codec, NULL, &enc_pkt.data, &enc_pkt.size, enc_pkt.data, enc_pkt.size, 0);
} else if(ifmt_ctx->streams[stream_index]->codec->codec_id == AV_CODEC_ID_AAC) {        
    AVBitStreamFilterContext* aacBitstreamFilterContext = av_bitstream_filter_init("aac_adtstoasc");
    av_bitstream_filter_filter(aacBitstreamFilterContext, ofmt_ctx->streams[stream_index]->codec, NULL, &enc_pkt.data, &enc_pkt.size, enc_pkt.data, enc_pkt.size, 0);
}
Run Code Online (Sandbox Code Playgroud)