0

我正在使用 ffms2(ffmpegsource) 一个围绕 libav 的包装器来从文件中获取视频和音频帧。视频解码工作正常。但是我在音频解码方面遇到了一些问题。FFMS2 提供了一个简单的函数FFMS_GetAudio(FFMS_AudioSource *A, void *Buf, int64_t Start, int64_t Count, FFMS_ErrorInfo *ErrorInfo);api 来获取解码后的缓冲区。解码后的数据在用户提供的缓冲区中返回。

对于单通道,数据的解释是直接的,数据字节从用户缓冲区的第一个位置开始。然而,当涉及到两个通道时,根据 FFMS_GetAudioProperties 返回的样本格式,解码的数据有两种可能是平面的或交错的。在我的例子中,样本格式总是平面的,这意味着解码的数据将在两个独立的数据平面数据[0]和数据[1]中。这就是 libav/ffmpeg 和 portaudio 所解释的,它们认为平面数据位于两个单独的数据平面中。

但是 FFMS_GetAudio 只从用户那里获取单个缓冲区。所以我可以假设平面数据 data[0] = buf, data[1] = buf + offset,其中 offset 是 FFMS_GetAudio 返回的缓冲区长度的一半。

FFMS 没有为这种解释提供任何好的文件。如果有人能提供更多有关这方面的信息,那将是很大的帮助。

4

1 回答 1

1

FFMS2 目前不支持输出平面音频。最近的修订版(2.17 后)自动交错平面音频,而 libav 之前的旧版本添加了对平面音频的支持,只是忽略了第一个之后的所有平面。

于 2013-05-01T20:04:31.613 回答