音频重采样,指的是将音频从一个采样格式转换到另一个转换格式,可以通过强大的音视频工具ffmpeg实现。
音频重采样的使用场景之一是:当我们要播放一段音频时解封装得到了一段音频原始数据(PCM数据),可是我们使用的播放器(如SDL)不支持该采样格式的音频原始数据,这时就需要进行音频重采样。
音频重采样用到的结构体
SwrContex 重采样上下文
AVFrame 存放解码后数据的结构体
音频重采样用到的函数
1、创建重采样上下文
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);
2、初始化重采样上下文
int swr_init(struct SwrContext *s);
3、初始化帧数据(在堆内开辟空间)
AVFrame *av_frame_alloc(void);
4、初始化重采样输出AVFrame中data的空间(在堆内开辟空间)
int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels,
int nb_samples, enum AVSampleFormat sample_fmt, int align);
5、重采样函数
int swr_convert(struct SwrContext *s, uint8_t **out, int out_count,
const uint8_t **in , int in_count);
6、重采样结束后需要释放相关数据,首先是AVFrame中的data部分
void av_freep(void *ptr);
7、释放AVFrame
void av_frame_free(AVFrame **frame);
8、释放重采样上下文
void swr_free(struct SwrContext **s);