1.创建AAC编码器
ffmpeg编码过程:
创建并打开编码器:
2. 输入输出数据
编码器打开之后,需要对输入输出的数据进行格式定义
输入API avcodec_send_frame
输出API avcode_receive_packet
生成空间之后,里面还是空的,没有具体的数值,这就需要将重采样的数据,拷贝至av_frame中.
然后,就可以开始真正的编码工作.
开始编码:avcodec_send_frame
获得编码之后的数据:avcodec_receive_packet
eagain: 编码器没有数据,或者数据已经不够编码器进行编码
eof:数据已经到末尾
编完码的数据,再写入文件当中.
缓冲区遗存数据,导致播放数据不全
编码之后,保存数据,实际上还有一部分数据处在缓冲区,并没有进行编码,此时告知eagain重新读取数据,采集已经结束掉了,缓冲区数据依然留存一部分,如何让这部分数据也吐出来?
在while循环结束之后,也就是数据编码结束之后,再次调用一次encode,强制将编码器缓冲区的音频进行编码输出.
结束之后,需要将之前的avframe和avpacket进行释放