【问题标题】:audio streaming with IMFSourceReader (Microsoft Media Foundation)使用 IMFSourceReader 进行音频流式传输(Microsoft Media Foundation)
【发布时间】:2020-01-10 10:15:06
【问题描述】:

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

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

【问题讨论】:

    标签: c++ windows ms-media-foundation


    【解决方案1】:

    假设您使用默认的 mediafoundation 源,这可能是 MP3 文件源和 MPEG-4 文件源的默认行为。

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

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

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

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

    【讨论】:

    • 确实如此。我对各种音频文件进行了测试。可变比特率 mp3 需要完全下载。恒定比特率 mp3 没有。
    猜你喜欢
    • 1970-01-01
    • 2013-02-04
    • 2018-04-13
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多