以下是我使用ffmpeg的libav *
解码音频流的过程[录像档案] - GT; (读取音频包) - > [pkts queue] - > (解码器) - > 发言者的样本缓冲区
由于某种原因,我需要在解码器之后插入一个缓冲区
[录像档案] - GT; (读取音频包) - > [pkts queue] - > (解码器) - > [样品缓冲液] - >发言者的样本缓冲区
samples buffer
中的音频样本是LPCM 16位。要保存音频sample buffer
的pts,我将保存第一个样本的pts。通过这种方式,我可以计算缓冲区中任何样本的pts。
问题是只有当音频流包含连续的音频样本时,计算才是正确的。 ffmpeg的解码音频帧是否总是包含连续的样本?
答案 0 :(得分:1)
为什么不是这样呢?解码器将按照将其呈现给上层的顺序给出数据。
答案 1 :(得分:1)
ffmpeg的解码音频帧可能包含平面或非平面格式的样本。 您可以使用
进行检查av_sample_fmt_is_planar(frame->format)
检查documentation 你应该确保你以正确的格式将样本传递给发言者。
如果没有,那么你可以使用libswresample进行样本格式转换。
在here
中解释了AVFrame如何包含平面和非平面数据