c# - DirectShow IVideoWindow 不能大于 4096px
问题描述
我有一个 C# 应用程序,它使用 DirectShow 来显示播放视频剪辑。我们最近尝试播放 9600x1080 像素的视频,但它不会显示。DirectShow 发出事件,一切。
我们使用 K-Lite 编解码器包 (1295) 并利用 ffdshow libx264 作为编解码器和视频渲染器。使用相同渲染器的 Media Player Classic 可以很好地播放剪辑。我们应用程序的最新版本使用 DirectShow.NET,而旧版本直接调用 DirectShow 接口。我们的应用程序的新旧版本都有相同的问题。
经过一些实验,我们发现了以下几点:
如果视频窗口宽度为 4096 像素或更窄,它将呈现视频。如果是 4097 或更宽,则不会渲染任何视频。我们尝试播放 HD 剪辑和 720 剪辑,结果相同。它们将在视频窗口为 4096x1080 时播放,但在窗口为 4097x1080 或更宽时不会播放。
更改分辨率或图形设置时,应用设置时视频会出现一些闪烁(几帧),这表明它实际上正在播放视频,但它只显示黑色。
在 Windows 10、64 位上测试。
关于我们可以做些什么来解决这个问题的任何想法?
解决方案
必不可少的部分是您正在使用的视频渲染器。即使您没有提及,您也可能只使用默认值,这是一个窗口模式下的 VMR-7。这为您提供了一个陈旧的旧组件,但您遇到了限制。
您有兴趣更新您的应用程序以使用 EVR。
选择正确的视频渲染器
[…]
在 Windows Vista 及更高版本中,如果硬件支持,应用程序应使用 EVR。
[…] 方法默认使用 VMR-7。[…] EVR 和 VMR-9 从来都不是默认渲染器。
推荐阅读
- autohotkey - 如何使用 AHK 检测用户输入的所有特殊按钮:
- r - 在忽略 NA 的同时合并列
- python - os.system 直到在 python 中输入才起作用
- python - 为什么standardscaler在不同数量的特征下效果不同
- java - java - 如何在java removeIf中流式传输已删除的项目?
- json - JSON解析器允许字符串中的换行符?
- python - Python - 如何四舍五入到指定的小数
- python - 如果多个实例处于活动状态,Python 子进程命令不会等待
- spring-batch - 我的弹簧批处理步骤在达到构建后一直循环
- python - 通知时未从喙回调中获取所有字节