SwrContext
重采样上下文
创建分配空间
SwrContext *swrContext = swr_alloc();
设置参数
struct SwrContext *swr_alloc_set_opts(struct SwrContext *s,
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, void *log_ctx);
out_ch_layout:输出声道
out_sample_fmt:输出音频格式 s16 或者float32(无法播放),
out_sample_rate 采样率
初始化
re = swr_init(swrContext);
清理
void swr_free(struct SwrContext **s)
转化函数
int swr_convert(struct SwrContext *s, uint8_t **out, int out_count,
const uint8_t **in , int in_count);
out 指针数组,可能多通道和 视频转化函数sws_scale类似
out_count 单声道的样本数量
例子:
if(avCodecContext==audioCodecContext){
uint8_t *out[2] = {0};
out[0] = ( uint8_t *)pcm;
//nb_samples 单声道样本数量,一般1024个
int len = swr_convert(
swrContext,out,
avFrame->nb_samples,
(const uint8_t **)avFrame->data,
avFrame->nb_samples
);
LOGE("swr_convert len = %d !", len);
}