如何通过libavcodec解码音频帧?

时间:2012-11-28 04:33:27

标签: ffmpeg libavcodec libav libavformat

以下是我使用ffmpeg的libav *

解码音频流的过程
  

[录像档案] - GT; (读取音频包) - > [pkts queue] - > (解码器) - >   发言者的样本缓冲区

由于某种原因,我需要在解码器之后插入一个缓冲区

  

[录像档案] - GT; (读取音频包) - > [pkts queue] - > (解码器) - >   [样品缓冲液] - >发言者的样本缓冲区

samples buffer中的音频样本是LPCM 16位。要保存音频sample buffer的pts,我将保存第一个样本的pts。通过这种方式,我可以计算缓冲区中任何样本的pts。

问题是只有当音频流包含连续的音频样本时,计算才是正确的。 ffmpeg的解码音频帧是否总是包含连续的样本?

2 个答案:

答案 0 :(得分:1)

为什么不是这样呢?解码器将按照将其呈现给上层的顺序给出数据。

答案 1 :(得分:1)

ffmpeg的解码音频帧可能包含平面或非平面格式的样本。 您可以使用

进行检查
av_sample_fmt_is_planar(frame->format) 

检查documentation 你应该确保你以正确的格式将样本传递给发言者。

如果没有,那么你可以使用libswresample进行样本格式转换。

here

中解释了AVFrame如何包含平面和非平面数据