我使用MFCreateSourceReaderFromByteStream创建具有自定义IMFByteStream的IMFSourceReader,该IMFByteStream从远程HTTP源获取数据。
当源是m4a文件时,一切都会按预期工作。但是,当源是mp3时,在下载整个文件之前,函数MFCreateSourceReaderFromByteStream不会返回。关于如何避免这种行为并在下载结束之前开始解码音频的任何想法?
假设您正在使用默认的媒体基础源,也许这是MP3文件源和MPEG-4文件源的默认行为。
为了确认这一点,您可以尝试使用自定义音频mpeg文件源,例如我实现的这一源:MFSrMpeg12Decoder
此mediafoundation源仅管理mp1 / mp2音频文件,并执行解码。这不是mp3,但一旦存在有效的mpeg音频头,它就提供字节流,并且不读取完整文件(您可以信任我。 。)。
这将确认默认的MP3文件源需要在提供字节流之前读取完整的文件。
一个可能的答案是MP3文件源读取整个文件以查看是否存在可变比特率,从而提供正确的文件持续时间(MF_PD_DURATION)。对于m4a音频文件,持续时间由moov原子提供,因此无需读取完整文件。