繁体   English   中英

DirectShow.Net没有过滤器的组合,但在GSpot中很好

[英]DirectShow.Net no combination of filters but fine in GSpot

我正在尝试使用来自“ http://directshownet.sourceforge.net/ ”的DirectShot.Net包装器从许多视频文件中提取帧。

每当我运行DxScan示例应用程序时。 我收到“找不到中间过滤器的组合来建立连接”。 WMV文件,MP4文件,AVI文件会发生这种情况。 我指向示例应用程序的任何媒体。

如果我使用GSpot编解码器工具打开任何视频并要求其渲染图形,那么这样做就没有问题。 因此,机器绝对可以播放内容。

我使用Win 7 64位。 针对x64,x86或自动引发相同的错误。 包括以管理员身份运行Visual Studio。

我修改了示例代码,以尝试找到包含下面Romain R建议的视频媒体类型的正确引脚。

我正在使用:

            IEnumPins epins;
            capFilter.EnumPins(out epins);
            IntPtr fetched = Marshal.AllocCoTaskMem(4);
            IPin[] pins = new IPin[1];
            while (epins.Next(1, pins, fetched) == 0)
            {
                PinInfo pinfo;
                pins[0].QueryPinInfo(out pinfo);
                IEnumMediaTypes mtypes;
                pins[0].EnumMediaTypes(out mtypes);
                AMMediaType[] types = new AMMediaType[1];
                while(mtypes.Next(1, types, new IntPtr()) == 0){
                    var majorType = types[0].majorType;
                    if (majorType == MediaType.Video)
                    {
                         //This is never reached
                    }
                }
            }

对于MP4文件,它永远不会点击上面的注释行。 但是,对于WMV文件,该演示现在可以正确运行。

大概是因为找不到合适的MP4文件过滤器。 由于内容将在Windows Media Player中正常播放,因此这是晦涩的。

这可能是原因吗?

DxScan示例正在以不可靠的方式构建过滤器图,尤其是假设它从为媒体文件提供的源过滤器抓取的第一个针是视频针。 并非总是如此。 更好的图形构建方法应该可以解决。 您可能需要逐步查找错误所在的行。 最有可能的是,它将连接到采样采集滤波器输入引脚。

UPD。 请注意,原始过滤器可能没有输入引脚,因此它们之间需要其他过滤器,即所谓的解析器/解复用器过滤器,它将流转换为视频帧和音频样本,这种情况可能会发生。 DirectShow API提供了Render*方法来协助图形构建,建议该链的必需链接,并且DxScan正在或可能无法进行直接连接。

也就是说,DxScan可能不是最好的示例,本机API的MSDN示例/参考可能更适合DirectShow。

您的游乐场以及主要的研究和API探索工具应该是Windows SDK中的GraphEdit(GraphStudio或GraphStudioNext作为替代的改进选项),而不是DirectShow.NET包装器库示例。

由于内容将在Windows Media Player中正常播放,因此这是晦涩的。

WMP不使用DirectShow进行播放。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM