我有一个使用DirectShow来显示播放视频剪辑的C#应用程序。我们最近尝试播放9600x1080 px的视频,但该视频无法显示。 DirectShow发出所有事件。
我们使用K-Lite编解码器包(1295),并使用ffdshow libx264作为编解码器和视频渲染器。使用相同渲染器的Media Player Classic可以很好地播放剪辑。我们应用程序的最新版本使用DirectShow.NET,而旧版本则直接调用DirectShow接口。我们的应用程序的旧版本和新版本都有相同的问题。
经过一些实验,我们发现了以下内容:
如果视频窗口宽度为4096px或更窄,它将呈现视频。如果它是4097或更宽,则不会渲染任何视频。我们尝试播放HD剪辑和720剪辑,结果相同。它们将在视频窗口为4096x1080时播放,而在窗口为4097x1080或更宽时不播放。
在更改分辨率或图形设置时,应用设置时视频会闪烁一些(几帧),这表明它实际上正在播放视频,但仅显示黑色。
在Windows 10 64位上测试。
有什么想法可以解决这个问题?
答案 0 :(得分:1)
必不可少的部分是您正在使用的视频渲染器。即使您没有提到,也可能只使用默认值,这是窗口模式下的VMR-7。这样可以使您的旧版旧组件具有您遇到的限制。
您有兴趣更新您的应用程序以使用EVR。
Choosing the Right Video Renderer
[…]
在Windows Vista和更高版本中,如果硬件支持,则应用程序应使用EVR。
[…]方法默认情况下使用VMR-7。 […] EVR和VMR-9从来都不是默认渲染器。