【问题标题】:no combination of intermediate filters could be found找不到中间过滤器的组合
【发布时间】:2014-05-30 20:40:50
【问题描述】:

我正在使用 Visual Studio 制作一个 Windows 窗体应用程序。该应用程序允许您输入您希望为照片命名的名称,然后将该图像保存到网络上的特定位置。当我在笔记本电脑上使用它时效果很好。但是,当我尝试在桌面上运行它时,它不起作用。相反,我得到了消息:

System.Runtime.InteropServices.COMException (0x80040217): 否 可以发现中间过滤器的组合使 连接。

在 DirectShowLib.DsError.ThrowExceptionForHR(Int32 hr)

在 OrderProductCapture.Capture.SetupGraph(DsDevice dev, Int32 iWidth, Int32 iHeight, Int16 iBPP, Control hControl)

在 OrderProductCapture.Capture.ctor(Int32 iDeviceNum, Int32 iWidth, Int32 iHeight, Int16 iBPP, Control hControl)

在 OrderProductCapture.frmMain.ctor()

调用堆栈说:

OrderProductCapture.exe!OrderProductCapture.Capture(int iDeviceNum, int iWidth, int iHeight, short iBPP, System.Windows.Forms.Control hControl) Line 82
OrderProductCapture.exe!OrderProductCapture.frmMain.frmMain() Line 50
OrderProductCapture.exe!OrderProductCapture.Program.Main() Line 19

我已经在谷歌上搜索过很多次,并且我已经查看了关于 SO 的大多数类似问题。两台计算机都使用 Windows 7 专业版。任何帮助都会很棒。

这是我的代码捕获异常的代码。我认为代码没有错,因为它在我的笔记本电脑上运行良好。

public Capture(int iDeviceNum, int iWidth, int iHeight, short iBPP, Control hControl)
    {
        DsDevice [] capDevices;

        // Get the collection of video devices
        capDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);

        if (iDeviceNum + 1 > capDevices.Length)
        {
            throw new Exception("No video capture devices found at that index!");
        }

        try
        {
            // Set up the capture graph
            SetupGraph( capDevices[iDeviceNum], iWidth, iHeight, iBPP, hControl);

            // tell the callback to ignore new images
            m_PictureReady = new ManualResetEvent(false);
        }
        catch
        {
            Dispose();
            throw;
        }
    }

【问题讨论】:

  • 异常的调用栈是什么?
  • This is the code where my code catches the exception 并再次抛出它。
  • @Matt 我添加了调用堆栈信息

标签: c# directshow


【解决方案1】:

当必须在媒体格式之间进行转换时,您可以以编程方式强制它使用某些特定的过滤器链并根据您的需要对其进行严格配置,但 DirectSHOW 还具有“猜测”要使用的正确工具的能力。它知道所有正式安装在操作系统中的微型媒体处理程序,并尝试匹配它们,以便构建最终所需的“转换”。

然而,DirectShow 仍然需要安装这些微型转换器。 DS 能够分析和连接它们,但不会为您提供任何外来媒体类型的支持。通常,如果操作系统是“新鲜干净”的,即使是非异国情调也会有问题。

如果我没记错的话,这个错误基本上意味着(在这台有问题的机器上)缺少一些“编解码器”。

这些东西通常伴随着任何东西:

  • 网络摄像头/麦克风/声卡驱动程序
  • 音频处理软件(声音编辑器、媒体录音机、媒体播放器等)
  • “编解码器包”,例如 CCCP(真的,不要被他们的标志弄糊涂了)
  • 特定编解码器/过滤器包
  • (...)

我现在要做的第一件事是:

  • 回忆一下我尝试转换的内容
  • 尝试阅读所有错误消息和日志,看看是否提到了一些错误的过滤器,可能需要重新安装
  • 比较哪些音频相关软件安装在程序运行的机器上与有问题的机器上
  • 根据上述情况,尝试推断缺少什么编解码器
  • 查找、下载、安装

另外,您可以阅读SetupGraph() 函数的代码。我敢打赌,对所使用的格式有一个明确的参考,这可能会指出缺少什么编解码器。

编解码器有时也会损坏(实际上不是它们本身,但它们的配置和注册条目可能会损坏)。如果您确定机器上提供了正确的编解码器,重新安装或“修复”(如果他们有这样的选项)它们会有所帮助。

【讨论】:

  • m_pinStill = DsFindPin.ByCategory(capFilter, PinCategory.Still, 0);我只是注释掉了这部分并使用了预览图钉。它起作用了,尽管我确定您对编解码器是正确的。我只是找不到相关的过滤器。
  • 哇,安装 CCCP 成功了。全世界的工人,联合起来!
猜你喜欢
  • 2012-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
相关资源
最近更新 更多