2020-08-13

关于新旧版本的ffmpeg音频AAC编码补一个坑,为后续学习开发的人作为借鉴:

(1)旧版本的编码函数是 

//编码函数
avcodec_encode_audio2(pCodecCtx, &pkt, frame, &got_frame);

(2)新版本的编码函数是

//进行编码aac
ret = avcodec_send_frame(ac, pcm);

//编码
//此处的编码出来的是裸流,数据没有AAC常规的头7个字节
ret = avcodec_receive_packet(ac, &pkt);

(3)用来来咋一看起来没什么区别,其中新旧版本之间有个差别:旧版本编码完成后的pkt.data的AAC数据是带有7个字节的dts的;而对于使用新版本的编码函数,编码AAC得到的数据pkt.data中的数据是裸流数据,不包含7个字节AAC的dts头部的。这一点对于使用第三方rtmp库进行推流尤为需要注意的。

(4)因此旧版本获取到的数据后可以直接write进文本中保存为aac文件即可播放,而对于使用新版得到的数据需要使用如下函数来保存或者自己手动添加dts头数据进行保存。

avformat_write_header(ic, NULL);//写入头部信息
av_write_frame(ic, &pkt);//写入裸数据
av_write_trailer(ic);//写文件尾

 

你可能感兴趣的:(新旧版ffmpeg函数接口注意,ffmpeg,aac)