首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microsoft Media Foundation中的多输入MFT

Microsoft Media Foundation中的多输入MFT
EN

Stack Overflow用户
提问于 2013-09-16 10:06:28
回答 1查看 1.6K关注 0票数 2

我正在努力将两个音频流混合到单个输出流中。MFNode有一个AudioMixerMFT,但是当我试图构建这样的拓扑时,TopoEdit会崩溃&执行它:

注意:我尝试了WindowsSDK7.1附带的TopoEdit &也是“开发微软媒体基金会应用程序”(应用程序)的作者很少修复的那个。

我认为这可能是TopoEdit的一些问题,所以我在代码中构建了拓扑(通过修改来自“应用程序”的Ch#9的代码),但是它仍然失败了,因为在会话启动事件上,在HRESULT CPlayer::ProcessEvent(CComPtr<IMFMediaEvent>& mediaEvent)内部的mediaEvent->GetStatus(&hrStatus)上出现了'E_UNEXPECTED灾难性故障‘。

现在,我认为这可能是AudioMixerMFT的一些问题,所以我编写了一个带有2个输入的自定义MFT,它的作用就像一个简单的传递(只发送第一个输入&忽略第二个输入)。我在TopoEdit类中构建了一个拓扑结构,它起了作用:

但是当我把“Audio 2. But”连接到MFT时,它就崩溃了。现在,我尝试在我自己的代码中使用这个定制的MFT &它在单个输入中再次工作,但是当应用两个输入时,它在“E_UNEXPECTED灾难性故障”中失败。

不知道是什么问题,我开始怀疑是否支持多输入MFT,我偶然发现一个帖子http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/21596e11-c4e2-480a-b28f-9e2f5fa8820d/mutlinput-and-multioutput (是的,它很老)说它是不支持的。

有谁能够成功地从AudioMixerMFT上运行MFNode?有微软媒体基金会的候补成员吗?否则任何暗示都会被感激的。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-28 14:31:26

MFNode是我的开源项目。

如果您阅读MFNode的文档,您将看到TopoEdit在MFT中不会处理多个输入流。是的,TopoEdit崩溃了。您可以修复TopoEdit源代码中的错误。它只是一个TopoEdit不检查的空指针。但不幸的是,这并没有解决问题。TopoEdit无法在两个输入流上调用ProcessInput两次,然后调用ProcessOutput。

您必须提供一个自定义媒体会话以使其工作(实现IMFMediaSession)。

在MFNode项目的下一次更新中,我将提供一个播放器来使用所有的MFNode,特别是MFNode音频混合器。

编辑:在CTedEditorVisualObjectEventHandler::NotifyObjectDeleted :在tededit.cpp中,TopoEdit崩溃:

..。m_pEditor->FindNode(pConn->GetOutputNodeID());.

pNode可以是空指针,而TopoEdit不检查。

编辑

我更新了我的项目。检查MFNodePlayer。我使用自定义的MediaSession来处理波混频拓扑。

它工作得很好,但它并不完美,因为有两件事。如果您停止了topo,然后重放,它将失败(因为我必须停止所有源,并且可能重置时间时钟和字节流)。其次,有一个函数以递归的方式处理IMFTransform。很难调试。

我过会儿再修。

特别感谢“开发微软媒体基金会应用程序”一书。创建自定义MediaSession对我有很大帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18825357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档