我目前正在为 Media Foundation 播放器编写一些自定义 EVR。
到目前为止一切正常,但我需要找到我正在渲染的视频文件的原始分辨率。
我尝试使用 IBasicFilter2 接口(interface)来使用 getVideoSize、get_VideoHeight 或其他 get_SourceWidth 等...但它总是返回一个 E_NOINTERFACE...
那么有人有办法轻松获取视频文件的分辨率吗?即使它有一个不错的灯光库...只是大小而已...Windows 设法在文件浏览器中找到它,但我完全无法从代码中获取它...
谢谢!
最佳答案
您可以在 DirectShow 中使用 IMediaDet 获取有关媒体文件中流的信息,包括视频流的分辨率。
虽然有一些注意事项,因此您可能需要一种备份方法。
您需要注册合适的 DirectShow 过滤器,以了解正在检查的媒体文件。您安装的过滤器可能会给出错误的结果 - 例如为忽略文件中任何视频流的媒体类型注册了仅音频过滤器。
它目前已被弃用,MSDN 引用页面上没有指示替代此功能的内容。由于 header 已从 Windows SDK 中删除,因此构建起来也很麻烦。
这是该方法不起作用的一个例子... Get MP4 stream lengths
关于c++ - 获取视频文件的原始视频分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5145730/