该问题常见于FFmpeg中对音频编解码的操作中。解决方法是使用av_audio_fifo进行音频采样大小的重采样。
示例代码:
AVAudioFifo *fifo; AVFrame *input_frame; int output_sample_rate; int output_channels;
// 初始化AVAudioFifo fifo = av_audio_fifo_alloc(output_sample_format, output_channels, MAX_FIFO_SIZE);
// 填充AVFrame int nb_samples = input_frame->nb_samples; int nb_channels = input_frame->channels; int sample_rate = input_frame->sample_rate; int data_size = av_samples_get_buffer_size(NULL, nb_channels, nb_samples, input_frame_format, 1);
AVAudioFifo *fifo; av_audio_fifo_write(fifo, (void **)input_frame->data, nb_samples);
// 从AVAudioFifo读取重采样后的AVFrame AVFrame *output_frame; output_frame->nb_samples = av_audio_fifo_read(fifo, (void **)output_frame->data, output_frame->nb_samples);
// 清空AVAudioFifo av_audio_fifo_reset(fifo);