关于音频重采样计算的理解

av_rescale_rnd(swr_get_delay(swr_ctx, 48000) + 1024, 44100, 48000, AV_ROUND_UP);

这里48000是输入音频A的采样率,44100是输出视频B的采样率,这行代码的意思是说,如果转换1024个音频A,能够生成多少个音频B,那为什么要使用swr_get_delay呢,大家可以这么理解,当我们的项目是一个实时的推流项目的时候,假设我们的输入音频是48000采样率,推流输出需要44100的采样率,为了保证音视频的同步,我们必须保证每秒钟能够输出44100 * 2个采样点B(这里假设是双声道),但是要知道重采样本身也需要时间,因此,我们需要将这个时间计算出来,转换为相当于几个输入音频A的采样点,这样就可以保证每秒的输出为44100*2个采样点B,从而保证音视频的同步。

注意:

多出来的采样点B用静默音0来填充。

猜你喜欢

转载自blog.csdn.net/u011711997/article/details/83818443