函数
1> swr_alloc:申请内存
2> swr_alloc_set_opts:设置参数
@param SwrContext *s:音频重采样上下文
@param int64_t out_ch_layout:输出的声道样式
@param AVSampleFormat out_sample_fmt:输出的采样格式
@param int out_sample_rate:输出采样率
@param int64_t in_ch_layout:输入的声道样式
@param AVSampleFormat in_sample_fmt:输入的采样格式
@param int in_sample_rate:输入的采样率
@param int log_offset, void *log_ctx:日志参数
3> swr_init:初始化
4> swr_convert:转换
@param SwrContext *s:音频重采样上下文
@param uint8_t **out, int out_count:输出的数据和单通道数据大小
@param uint8_t **in, int in_count:输出的数据和单通道数据大小
5> swr_free:释放
示例程序
代码:
void transAudioSamples(AVFrame *frame)
{
// 申请上下文空间
SwrContext *ctx = swr_alloc();
// 设置上下文空间参数
swr_alloc_set_opts(ctx,
av_get_default_channel_layout(2), AV_SAMPLE_FMT_S16, frame->sample_rate,
av_get_default_channel_layout(frame->channels), (AVSampleFormat)frame->format, frame->sample_rate,
0, 0);
// 初始化
int ret = swr_init(ctx);
if (0 != ret) {
// 错误处理
swr_free(&ctx);
return;
}
uint8_t *pcm = new uint8_t[frame->nb_samples * 2 * frame->channels];
uint8_t *dstData[2] = {0};
dstData[0] = pcm;
// 重采样
ret = swr_convert(ctx, dstData, frame->nb_samples, (const uint8_t **)frame->data, frame->nb_samples);
cout << "swr sample = " << ret << endl;
// 释放上下文空间
swr_free(&ctx);
}
输出: