基于FFmpeg的视频播放器之八:音频重采样

一.什么是音频重采样

音频重采样就是改变音频的采样率、采样格式、声道数等参数,使之按照我们期望的参数输出。比如我们将采样率 48kHz、采样格式 f32le、声道数 1 的音频 A 转换成采样率 44.1kHz、采样格式 s16le、声道数 2 的音频 B。
那么为什么需要对音频重采样?列举一个经典用途,有些音频编码器对输入的原始PCM数据是有特定参数要求的,比如要求必须是44100_s16le_2。但是你提供的PCM参数可能是48000_f32le_1。这个时候就需要先将48000_f32le_1转换成44100_s16le_2,然后再使用音频编码器对转换后的PCM进行编码。

二.使用FFmpeg API实现音频重采样

使用libavresample 音频重采样的核心步骤:
swr_alloc_set_opts(创建上下文,设置参数)
swr_init(初始化)
swr_convert(具体音频帧转换)
swr_free(释放上下文占用资源)
音频重采样在FFmpeg源码中也有demo:ffmpeg\doc\examples\resampling_audio.c
我这里将重采样做了简单封装,如下所示:

#include "QHResample.h"

#include 

QHResample::QHResample(ResampleParameter parameter)
    : m_resampleBufferSize(0)
    , m_resampleBuffer(nullptr)
{
    m_resampleParameter.srcChannels = parameter.srcChannels;
    m_resampleParameter.srcSamplerate =

你可能感兴趣的:(基于FFmpeg的视频播放器,音视频,音频重采样)