一.什么是音频重采样
音频重采样就是改变音频的采样率、采样格式、声道数等参数,使之按照我们期望的参数输出。比如我们将采样率 48kHz、采样格式 f32le、声道数 1 的音频 A 转换成采样率 44.1kHz、采样格式 s16le、声道数 2 的音频 B。
那么为什么需要对音频重采样?列举一个经典用途,有些音频编码器对输入的原始PCM数据是有特定参数要求的,比如要求必须是44100_s16le_2。但是你提供的PCM参数可能是48000_f32le_1。这个时候就需要先将48000_f32le_1转换成44100_s16le_2,然后再使用音频编码器对转换后的PCM进行编码。
二.使用FFmpeg API实现音频重采样
使用libavresample 音频重采样的核心步骤:
swr_alloc_set_opts(创建上下文,设置参数)
swr_init(初始化)
swr_convert(具体音频帧转换)
swr_free(释放上下文占用资源)
音频重采样在FFmpeg源码中也有demo:ffmpeg\doc\examples\resampling_audio.c
我这里将重采样封装为初始化重采样、重采样和关闭重采样三个步骤。
1.初始化重采样
int QHAudioResample::openResample(AVCodecContext *codecContext, A