DirectShow IVideoWindow 的宽度不能超过 4096px
DirectShow IVideoWindow can't be wider than 4096px
我有一个 C# 应用程序,它使用 DirectShow 显示播放视频剪辑。我们最近尝试播放一个 9600x1080 像素的视频,但它无法显示。 DirectShow 发出所有事件。
我们使用 K-Lite 编解码器包 (1295) 并利用 ffdshow libx264 作为编解码器和视频渲染器。使用相同渲染器的 Media Player Classic 可以很好地播放剪辑。我们应用程序的最新版本使用 DirectShow.NET 而旧版本直接调用 DirectShow 接口。我们的应用程序的新旧版本都有相同的问题。
经过一些实验,我们发现了以下内容:
如果视频 window 宽度为 4096 像素或更窄,它将呈现视频。如果它是 4097 或更宽,则不会呈现任何视频。我们尝试播放 HD 剪辑和 720 剪辑,结果相同。它们会在视频 window 为 4096x1080 时播放,但不会在 window 为 4097x1080 或更宽时播放。
当更改分辨率或图形设置时,应用设置后视频会出现一些闪烁(几帧),这表明它实际上正在播放视频,但它只显示黑色.
在 Windows 10、64 位上测试。
我们可以做些什么来解决这个问题?
关键部分是您使用的视频渲染器。即使您没有提到,您也可能只是使用默认设置,这是窗口模式下的 VMR-7。这会让您获得一个陈旧的遗留组件,但您遇到了限制。
您有兴趣更新您的应用程序以使用 EVR。
Choosing the Right Video Renderer
[…]
In Windows Vista and later, applications should use the EVR if the hardware supports it.
[…] methods use the VMR-7 by default. […] The EVR and VMR-9 are never the default renderers.
我有一个 C# 应用程序,它使用 DirectShow 显示播放视频剪辑。我们最近尝试播放一个 9600x1080 像素的视频,但它无法显示。 DirectShow 发出所有事件。
我们使用 K-Lite 编解码器包 (1295) 并利用 ffdshow libx264 作为编解码器和视频渲染器。使用相同渲染器的 Media Player Classic 可以很好地播放剪辑。我们应用程序的最新版本使用 DirectShow.NET 而旧版本直接调用 DirectShow 接口。我们的应用程序的新旧版本都有相同的问题。
经过一些实验,我们发现了以下内容:
如果视频 window 宽度为 4096 像素或更窄,它将呈现视频。如果它是 4097 或更宽,则不会呈现任何视频。我们尝试播放 HD 剪辑和 720 剪辑,结果相同。它们会在视频 window 为 4096x1080 时播放,但不会在 window 为 4097x1080 或更宽时播放。
当更改分辨率或图形设置时,应用设置后视频会出现一些闪烁(几帧),这表明它实际上正在播放视频,但它只显示黑色.
在 Windows 10、64 位上测试。
我们可以做些什么来解决这个问题?
关键部分是您使用的视频渲染器。即使您没有提到,您也可能只是使用默认设置,这是窗口模式下的 VMR-7。这会让您获得一个陈旧的遗留组件,但您遇到了限制。
您有兴趣更新您的应用程序以使用 EVR。
Choosing the Right Video Renderer
[…]
In Windows Vista and later, applications should use the EVR if the hardware supports it.
[…] methods use the VMR-7 by default. […] The EVR and VMR-9 are never the default renderers.