一. 说明
AVAudioFifo 是 FFMPEG 提供的一个先入先出的音频缓冲队列. 主要要以下几个特点:
操作在样本级别而不是字节级别.
支持多通道的格式, 不管是 planar 还是 packed 类型.
当写入一个已满的 buffer 时会自动重新分配内存.
二. 主要函数
av_audio_fifo_alloc(): 根据采样格式, 通道数和样本个数创建一个 AVAudioFifo.
av_audio_fifo_realloc(): 根据新的样本个数为 AVAudioFifo 重新分配空间.
av_audio_fifo_write(): 将数据写入 AVAudioFifo. 如果可用的空间小于传入 nb_samples 参数 AVAudioFifo 将自动重新分配空间.
av_audio_fifo_size(): 获取当前 AVAudioFifo 中可供读取的样本数量.
av_audio_fifo_read(): 从 AVAudioFifo 读取数据.
av_audio_fifo_read() 的声明在 libavutil/audio_fifo.h, 如下所示.
- /**
- * Read data from an AVAudioFifo.
- *
- * @see enum AVSampleFormat
- * The documentation for AVSampleFormat describes the data layout.
- *
- * @param af AVAudioFifo to read from
- * @param data audio data plane pointers
- * @param nb_samples number of samples to read
- * @return number of samples actually read, or negative AVERROR code
- * on failure. The number of samples actually read will not
- * be greater than nb_samples, and will only be Less than
- * nb_samples if av_audio_fifo_size is Less than nb_samples.
- */
- int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples);
三. 参考链接
1. FFMPEG: Audio FIFO Buffer
2. FFMPEG 示例转封装转码 - transcoding https://www.jianshu.com/p/f04e0028dd14
来源: http://www.bubuko.com/infodetail-3459765.html