使用IMFSourceReader(Microsoft媒体基金会)进行音频流传输

audio streaming with IMFSourceReader (Microsoft Media Foundation)

本文关键字:音频流 传输 基金会 IMFSourceReader Microsoft 媒体 使用      更新时间:2023-10-16

我使用 MFCreateSourceReaderFromByteStream 创建一个 IMFSourceReader,其中包含一个自定义的 IMFByteStream 从远程 HTTP 源获取数据。

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

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

要确认这一点,您可以尝试使用自定义音频 mpeg 文件源,例如我实现的这个: MFSrMpeg12解码器

此媒体基础源仅管理 mp1/mp2 音频文件,并执行解码。这不是mp3,但是一旦有有效的音频mpeg标头,它就会提供字节流,并且不会读取完整文件(您可以相信我...

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

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