使用IMFSourceReader(Microsoft Media Foundation)进行音频流传输

问题描述 投票:2回答:1

我使用MFCreateSourceReaderFromByteStream创建具有自定义IMFByteStream的IMFSourceReader,该IMFByteStream从远程HTTP源获取数据。

当源是m4a文件时,一切都会按预期工作。但是,当源是mp3时,在下载整个文件之前,函数MFCreateSourceReaderFromByteStream不会返回。关于如何避免这种行为并在下载结束之前开始解码音频的任何想法?

c++ windows ms-media-foundation
1个回答
0
投票

假设您正在使用默认的媒体基础源,也许这是MP3文件源和MPEG-4文件源的默认行为。

为了确认这一点,您可以尝试使用自定义音频mpeg文件源,例如我实现的这一源:MFSrMpeg12Decoder

此mediafoundation源仅管理mp1 / mp2音频文件,并执行解码。这不是mp3,但一旦存在有效的mpeg音频头,它就提供字节流,并且不读取完整文件(您可以信任我。 。)。

这将确认默认的MP3文件源需要在提供字节流之前读取完整的文件。

一个可能的答案是MP3文件源读取整个文件以查看是否存在可变比特率,从而提供正确的文件持续时间(MF_PD_DURATION)。对于m4a音频文件,持续时间由moov原子提供,因此无需读取完整文件。

© www.soinside.com 2019 - 2024. All rights reserved.