2

这是我使用 ffmpeg 的 libav* 解码音频流的过程

[videofile]-->(读取音频包)--> [pkts queue]-->(解码器)-->扬声器的样本缓冲区

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

[videofile]--> (读取音频包)--> [pkts queue] --> (decoder)--> [samples buffer] --> 说话者的样本缓冲区

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

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

4

2 回答 2

1

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

于 2012-11-28T07:38:40.890 回答
1

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

av_sample_fmt_is_planar(frame->format) 

检查 您应该确保将正确格式的样本传递给扬声器的文档。

如果没有,那么您可以使用 libswresample 进行示例格式转换。

在这里解释了 AVFrame 如何包含平面和非平面数据

于 2013-10-01T10:40:12.107 回答