1 简述
AVSWResample它是一个音频处理库, 能够实现音频的重采样,样本格式转换,以及音频混流等等,要想使用这个库,需先获得SwrContext 结构体, 这可以通过swr_alloc()或者 swr_alloc_set_opts() 。 在swr_alloc_set_opts()中,包含两步,第一步调用swr_alloc(),第二步通过av_opt_set_int()等AVOption 函数去设置lswr 库。而swr_alloc() 没有去初始化lswr 库, 所以需要通过AVOption API 去设置lswr 库。通过AVOption 设置完lswr 库之后,必须调用swr_init()函数,这样lswr库才能生效,若重新设置,也需调用。
2 使用流程
大体上分为三步:初始化, 转换, 退出。
2.1 初始化
第一种方法, 通过如下一支API 的调用搞定,将如何转换的参数一并设下去。
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)
第二种方法:
step 1:SwrContext *swr_alloc(void);// 申请swr_alloc() 结构体
step 2: 通过av_opt_set_int()去设置lswr 库如何转换
step 3:int swr_init(struct SwrContext *s) ;// 通过调用init函数去使设置生效。与之对应的是swr_close()只是将SwrContext 设置的值清空, 通过swr_init() 右可恢复。