【问题标题】:Multiple input MFT in Microsoft Media FoundationMicrosoft Media Foundation 中的多输入 MFT
【发布时间】:2013-09-20 10:42:09
【问题描述】:

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

注意:我尝试了 Windows SDK 7.1 附带的 TopoEdit,也是“开发 Microsoft® 媒体基础应用程序”的作者修复很少的版本

我认为 TopoEdit 可能存在问题,因此我在代码中构建了拓扑(通过修改“开发 Microsoft® 媒体基础应用程序”的第 9 章中的代码),但它仍然失败,@ 上出现“E_UNEXPECTED Catastrophic failure” 987654325@ 在 Session Start 事件中的 HRESULT CPlayer::ProcessEvent(CComPtr<IMFMediaEvent>& mediaEvent) 内。

此时,我认为 AudioMixerMFT 可能存在问题,因此我编写了一个自定义 MFT,它有 2 个输入,其作用类似于简单的直通(仅发送第一个输入并忽略第二个输入)。我在 TopoEdit 中构建了一个拓扑,并且效果很好:

但是当我将“Audio 2.wav”连接到 MFT 时,它崩溃了。现在我尝试在我自己的代码中使用这个自定义 MFT,它再次使用单个输入但在应用两个输入时失败并出现“E_UNEXPECTED Catastrophic failure”。

不确定可能是什么问题,我开始怀疑是否支持多输入 MFT,我遇到了一个帖子 http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/21596e11-c4e2-480a-b28f-9e2f5fa8820d/mutlinput-and-multioutput(是的,它很旧)说它不支持。

有没有人能够从 MFNode 成功运行 AudioMixerMFT? Microsoft Media Foundation 的任何替代品?或任何提示将不胜感激。谢谢

【问题讨论】:

  • 双输入 MFT 和 DMO 都可以工作。 DirectShow 是 MF 的替代选项。双输入 DMO 无法在 DirectShow 中开箱即用,但自定义 DirectShow 过滤器能够完成这项工作。
  • 感谢@RomanR。如果您知道的话,能否请您指出一些示例双输入 MFT。顺便说一句,对可能出现的问题有任何猜测,TopoEdit 或 MFT 的问题?
  • 手头没有示例代码,抱歉。您应该能够在调试器上看到连接问题(您的 MFT 在SetOutputType 中返回错误代码,或者在错误发生之前)。问题很可能出在您的 MFT 上,但问题缺乏细节来猜测它。通常,双输入组件很难实现,因为它们必须同步流,但您还没有达到这一点。

标签: c++ ms-media-foundation


【解决方案1】:

MFNode 是我的开源项目。

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

您必须提供自定义媒体会话才能使其正常工作(实现 IMFMediaSession)。

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

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

... CTedTopologyNode* pNode = m_pEditor->FindNode(pConn->GetOutputNodeID()); ...

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

编辑

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

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

我稍后会修复。

PS:特别感谢“开发 Microsoft 媒体基础应用程序”一书。创建自定义 MediaSession 对我有很大帮助。

【讨论】:

    猜你喜欢
    • 2017-03-28
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多