在输入和输出之间使用不同数量的样本对音频ffmpegc++进行编码

encode audio ffmpeg c++ with different number of samples between input and output

本文关键字:样本 音频 ffmpegc++ 编码 输出 输入 之间      更新时间:2023-10-16

我正在尝试制作一个音频编码器来对直播流进行编码。我从webrtc源获取音频流。源音频缓冲区的属性是(我无法更改它):

number of samples: 480 
sample size: 2 bytes 
sample rate: 44100Hz 
number of channels: 1

我正在使用MP2编解码器对音频进行编码。它预计音频样本数为1152(不能改变),这与源(480)不同

我使用生成音频帧

frame->nb_samples = 480;
avcodec_fill_audio_frame(frame, nb_channels(=1), sample_fmt(=AVCodecContext sample_fmt), temp_audio_buffer(=source), 480, 0);

我听到一个"剁碎"的声音。据我所知,这是因为每帧中样本数量的差异。

有没有办法以某种方式填充整个帧(1152个样本)?我能对这个直播流进行编码吗?

感谢

填充缓冲区,直到您拥有必要数量的样本,然后对缓冲区进行编码。使用余数启动下一个缓冲区。