基本概念:
采样率:每秒对音频数据采样的个数(44100hz)
采样位数:存储采样数据的位数(16bit 2字节)
输出声道:单声道、立体声(左右声道)等
重采样: 就是把目标音频按照一定的格式重新采样编码成新的音频数据, 方便统一处理,一般的采样标准是:44100HZ、16bit、双声道
FFmpeg重采样
采样对象:解码出来的音频帧(AVframe)
使用函数:SwrContext
swr_ctx = swr_alloc_set_opts(
struct SwrContext *s, // 传NULL
int64_t out_ch_layout, // 输出声道布局
enum AVSampleFormat out_sample_fmt, //输出采样位数格式
int out_sample_rate, //输出采样率
int64_t in_ch_layout, // 输入声道布局
enum AVSampleFormat in_sample_fmt, //输入采样位数格式
int in_sample_rate, //输入采样率
int log_offset, // NULL
void *log_ctx); // NULL
Int nb = swr_convert(swr_ctx,
&out_buffer, //转码后输出的PCM数据大小
frame->nb_samples, //输出采样个数
(const uint8_t **) frame->data, //原始压缩数据
frame->nb_samples); //输入采样个数
计算PCM数据大小:
size = 采样个数 * 声道数 * 单个采样点大小
如:44100HZ、16bit、立体声(2个声道)
size = 44100 * 2 * (16/8)