gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:53:48 29 4
gpt4 key购买 nike

我使用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原子提供,因此无需读取完整文件。

关于c++ - 使用IMFSourceReader进行音频流传输(Microsoft Media Foundation),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59679646/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com