1.aac文件使用avformat_write_header函数写不进去,发现MP4需要的是aac的裸流。因此需要AVBitStreamFilterContext* aacbsfc = av_bitstream_filter_init("aac_adtstoasc");将aac去头部。
2.生成的MP4文件系统自带的windows播放不出,但是vlc和ffplay能播放出来,使用Mp4Explorer.exe也打不开其格式。后来发现是MP4 moov box中的avcc box为空导致。最终通过以下代码解决。其中sps和pps都是包含0x00000001起始码。
// 设置视频流的参数
AVStream *videoStream = avformat_new_stream(outputFormatContext, videoCodec);
if (!videoStream) {
// 处理错误
return -1;
}
videoCodecContext = videoStream->codec;
videoCodecContext->codec_id = AV_CODEC_ID_H264;
videoCodecContext->codec_type = AVMEDIA_TYPE_VIDEO;
// 设置 SPS 和 PPS 数据
videoCodecContext->extradata = extradata; // 包含 SPS 和 PPS 数据的字节流
videoCodecContext->extradata_size = extradata_size; // 字节流大小