新旧版本的ffmpeg音频AAC编码注意事项

关于新旧版本的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);//写文件尾

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值