我正在努力将两个音频流混合到单个输出流中。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?有微软媒体基金会的候补成员吗?否则任何暗示都会被感激的。谢谢
发布于 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对我有很大帮助。
https://stackoverflow.com/questions/18825357
复制相似问题