使用Microsoft Media Foundation

时间:2017-01-26 13:48:27

标签: c audio decoding ms-media-foundation

我的问题基本上是我对这个框架的新手和我正在寻找如何使用媒体基础中的非文件来源的指针,因为这方面的文档似乎缺乏我的想法。下面是我正在做什么以及我现在正在使用的方法的一些信息,但我不知道这是否是使用框架的正确方法。

我目前正在尝试使用Microsoft Media Foundation来解码我通过蓝牙获取的音频,然后将其作为PCM音频发送。在查看ms media foundation的文档时,似乎几乎所有示例都假设源是文件。

tutorial for decoding audio为例,他们使用了MFCreateSourceReaderFromURL,由于我的源文件不是文件,因此无法使用{<1}}。

因为我想按照教程进行操作并尽可能少地改变我认为我只需要改变我创建源阅读器的方式,其余的过程也是一样的。我查看了其他有关我的目的的SourceReaders availableMFCreateSourceReaderFromByteStream声音。

我是否有可能只需要创建一个字节流并不断填充我随时都能通过播出的数据以及MFCreateSourceReaderFromByteStream创建的媒体源处理这个问题?或者我是否需要创建自定义媒体源并在API的较低部分进行更多手动工作以使这样的工作正常工作?

或者当源不是文件时,源阅读器可能是完全错误的方法?在关于源阅读器here的主页中,他们有以下图片:

Image describing what a Source Reader is

此图片显示源阅读器中的媒体源仅指向源文件,这是一个真正的限制还是简单和示例?

我用简单的c写这个,但指向c ++文档或示例很好,因为将c ++转换为c通常非常简单,而且似乎没有c的文档。

修改 我添加了一个关于我得到的数据类型的图像,红色区域是我在下面的评论Source中引用的数据块。 enter image description here

1 个答案:

答案 0 :(得分:1)

非文件来源不是准确的说明。它有文件结构,只是文件吗?结构不同?原始流?

如果您使用源阅读器查看示例,他们会假设流处理程序的存在和使用能够将传入流解析为具有已知类型和属性的基本流。然后您或Media Foundation可以应用解码器或以其他方式转换数据。

当您指定数据“以块为单位”时,很可能您对另一个显式使用AAC Decoder的选项感兴趣。您可以创建它的实例,初始化输入和输出类型,然后使用压缩音频提供它并在输出上提取解码的PCM。解码器有MFT接口。