有谁知道是否可以使用 C# 从位置 X 上的视频 (.wmv) 中获取帧/图像,而无需安装 DirectX 并在 Windows 2008 上工作(我希望尽可能少安装的网络服务器)。
甚至使用 directx 的简单解决方案也可以。
亨克
您实际上需要研究的是DirectShow,它是 Windows 的通用媒体(音频和视频)库。它曾经是 DirectX 的一部分,但几年前它分支并成为 Windows(平台)SDK 的一部分。我还应该在这里指出,自从 Windows Vista 支持Media Foundation以来,它现在已被弃用。从我读过的内容来看,它是一个更好的库(DirectShow 对于复杂的任务来说是地狱),但不幸的是,由于缺乏对 XP 和更早版本的支持,目前仅针对 Media Foundation 并不可行......
我能做的最好的事情就是向您指出DirectShow.NET,它是 DirectShow 的 .NET 包装库,目前相当稳定且经过良好测试。它包括可以帮助您开始的各种示例,但绝不是一个简单的解决方案。另外,我强烈建议您查看此 CodeProject 文章/示例应用程序。它处理网络摄像头视频捕获和文件(包括 WMV)的视频播放。稍微玩一下,学习如何进行帧搜索/单帧捕获(我认为该项目甚至可能有一些代码来做到这一点)应该可以满足您的需求。也许您甚至会在该 CodeProject 应用程序的 DirectShow.NET 示例中的某处找到精确的解决方案。
当然,如果可以的话,我会建议一个更简单的解决方案,但是你现在几乎被 DirectShow 的可怕所困扰。总之祝你好运!
你应该试试FFmpeg。
查看 Windows Media Format SDK,它旨在让您直接访问 WMV (/WMA/ASF) 文件中的帧。
http://msdn.microsoft.com/en-us/library/dd757738(VS.85).aspx
特别是,您对用于读取这些文件的同步 API 感兴趣(IWMSyncReader 是接口名称)。WMFSDK 中有一些相当不错的示例;我相信对您来说最有趣的将是 WMSyncReader,它将向您展示如何从位置 X 开始挖掘 WMV 文件并获取帧。