我正在尝试使用“ http://directshownet.sourceforge.net/ ”中的 DirectShot.Net 包装器从多个视频文件中提取帧。
每当我运行 DxScan 示例应用程序时。我得到一个“找不到中间过滤器的组合来建立连接”。WMV 文件、MP4 文件、AVI 文件会发生这种情况。我指向示例应用程序的任何媒体。
如果我使用 GSpot 编解码器工具打开任何视频并要求它渲染图形,它会毫无问题地这样做。所以机器绝对有能力播放内容。
我在Win 7 64位。针对 x64、x86 或 Auto 会引发相同的错误。包括以管理员身份运行 Visual Studio。
我已修改示例代码以尝试找到包含以下 Romain R 建议的视频媒体类型的正确 pin。
我在用着:
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 媒体播放器中正常播放。
这是一个可能的原因吗?