我正在使用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没有为此解释提供任何好的文件。如果有些人可以提供更多相关信息,那将是很有帮助的。
答案 0 :(得分:1)
FFMS2目前不支持输出平面音频。最近的修订版(2.17之后)自动交错平面音频,而libav之前的旧版本增加了对平面音频的支持,只是忽略了第一个之后的所有平面。