wav音频channel_layout为0

在使用ffmpeg解码wav数据的时候,通道数是正确的,但是stream->codecpar->channel_layout为0,如果此时

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);

进行音频数据换的时候,需要通道布局的参数。如果直接将解码器的channel_layout做参数给swr_alloc_set_opts()肯定会出错。所以可以通过stream->codecpar->channels通道个数进行判断,如果channels通道个数为1,那么强制通道布局为AV_CH_LAYOUT_MONO,如果channels通道个数为2,那么强制通道布局为AV_CH_LAYOUT_STEREO。

格式工厂转换的mp3文件帧数

通过格式工厂换的mp3解码第一package数据只包含47个音频帧(一般都是包含1152个数据帧),而且最后一个package解出的音频帧个数也是不固定的,所以向alsa设备中填入数据的时候注意音频对齐。否则大概率会在结束的时候产生噪声。数据对齐可以参考: