本文主要是介绍再谈使用ffmpeg进行单纯音频编解码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我们在原来的文章中探讨了将源音频数据直接编码为AAC流写入文件的方法,这次我们将深入推导出将音频数据编码为原始AAC数据的途径。
(1)首先,我们找到编码主函数
int avcodec_encode_audio2 | ( | AVCodecContext * | avctx, |
AVPacket * | avpkt, | ||
const AVFrame * | frame, | ||
int * | got_packet_ptr | ||
) |
1、avctx为编码上下文
2、输出量:avpkt的(data,size,destuct)为核心元素,data/size可设可不设,当自己设定时,需要保证data空间足够,并且需要自己管理内存,即重载destruct;当设为NULL时,ffmpeg会帮我们分配;其他的数据交给 av_init_packet() 自动分配。
3、输入量:frame的(data,nb_samples)为核心元素,设置方式也分三种:当编码器支持CODEC_CAP_DELAY,这一帧可以为空帧,即为NULL;当编码器支持CODEC_CAP_VARIABLESIZE,每次的frame可以变化;其他的情况下,frame->nb_samples=avctx->frame_size,将最后一帧大小设为剩余的采样点数目。
4、got_packet_ptr:0代表输出为空,1代表不为空。
int avcodec_encode_audio2 | ( | AVCodecContext * | avctx, |
AVPacket * | avpkt, | ||
const AVFrame * | frame, | ||
int * | got_packet_ptr | ||
) |
其最后一帧设为剩余的采样值数目 |
这篇关于再谈使用ffmpeg进行单纯音频编解码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!