c++ - 获取视频文件的原始视频分辨率

标签 c++ video directshow resolution ms-media-foundation

我目前正在为 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/

相关文章:

directshow - 如何检测网络摄像头插入/拔出?

c++ - 多线程中 "joinable"和 "unjoinable"的由来

c++ - 负斐波那契项 F(50) 与 R 包 "Rcpp"

c++ - 插入具有没有复制构造函数的对象的 vector

c++ - Qt/c++随机字符串生成

video - ffmpeg - 视频部分的无缝交叉淡入淡出循环

javascript - 对从视频生成缩略图感到困惑。我应该使用 ffmpeg php 还是 canvas?

python-3.x - 如何使用cv2使用python3提高图像回放的速度

c++ - 写入 Directshow 源过滤器

c# - 如何读取 IMediaSample 24 位 PCM 数据