FFMPEG 之 AVSwresample

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() 右可恢复。

 

2.2 转换

swr_convert(struct SwrContext *s, uint8_t *out_arg[SWR_CH_MAX], int out_count,const uint8_t *in_arg [SWR_CH_MAX], int  in_count)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值