C++ WMV媒体流在Windows 7上的像素化程度高于XP

C++ WMV媒体流在Windows 7上的像素化程度高于XP,c++,video-streaming,directshow,wmv,C++,Video Streaming,Directshow,Wmv,我们的流媒体播放器是一个内部C++/DirectShow应用程序,运行在XP及更高版本上 我们最广泛使用的流式编解码器之一是WMV,因为它受到广泛支持 我们注意到,WMV媒体流的输出在Windows 7客户端上与在Windows XP上看起来不同 对于WMV流,Windows 7输出看起来更加像素化/块状。Windows XP上相同的流(来自媒体服务器)看起来更平滑/更少像素化 在两个平台上使用相同的播放图,并使用相同的媒体服务器对两个客户端进行编码和流式传输 W7客户端具有作为windows

我们的流媒体播放器是一个内部C++/DirectShow应用程序,运行在XP及更高版本上

我们最广泛使用的流式编解码器之一是WMV,因为它受到广泛支持

我们注意到,WMV媒体流的输出在Windows 7客户端上与在Windows XP上看起来不同

对于WMV流,Windows 7输出看起来更加像素化/块状。Windows XP上相同的流(来自媒体服务器)看起来更平滑/更少像素化

在两个平台上使用相同的播放图,并使用相同的媒体服务器对两个客户端进行编码和流式传输

W7客户端具有作为windows media player应用程序一部分提供的windows media编解码器


是否有其他人注意到了这个问题,或者有人能评论一下我可能在Windows 7平台上检查/纠正的内容吗?

问题当然不在WMV本身。这是Windows Vista和Windows 7中不同的视频渲染器过滤器的实现。更深层次的原因是,启用Aero后,没有覆盖曲面。因此,您必须在Windows 7上搜索其他渲染方式。

问题当然不在WMV本身。这是Windows Vista和Windows 7中不同的视频渲染器过滤器的实现。更深层次的原因是,启用Aero后,没有覆盖曲面。因此,您必须在Windows 7上搜索其他渲染方式。

通过与Microsoft MVP的通信:

Windows 7上的VMR9渲染器似乎不支持纹理平滑属性,因此所有视频看起来都像垃圾。我发现唯一可行的解决方案是使用EVR或自定义渲染器 它没有实现这些功能中的任何一个(但如果启用它,则不会出现错误):

相反,它似乎总是使用MixerPref9_PointFiltering。

通过与Microsoft MVP的通信:

Windows 7上的VMR9渲染器似乎不支持纹理平滑属性,因此所有视频看起来都像垃圾。我发现唯一可行的解决方案是使用EVR或自定义渲染器 它没有实现这些功能中的任何一个(但如果启用它,则不会出现错误):


相反,它似乎总是使用MixerPref9\u点过滤。

你能更具体一点吗?打开aero时?你是说如果用户关闭Aero并恢复到“基本”显示模式,“覆盖曲面”将可用吗?覆盖曲面是什么意思?您是否建议尝试将EVR作为W7的替代渲染器?“Surface”一词源自DirectDraw。这是一个带有矩形视频的内存块,可以是整个帧,也可以是部分,可以是RGB甚至YUV。它可以直接位于视频内存中,也可以位于系统内存中。“覆盖”意味着该表面可以显示在主帧缓冲区的顶部,并通过视频卡调整大小。在XP中,通常的渲染只是以YUV格式创建一个覆盖曲面,并使视频卡将其转换为RGB,调整大小并显示它。如果启用Aero,YUV覆盖层是不可能的。是的,你必须考虑另一个渲染器或者关掉AIR NoxMeMUT-谢谢你的有价值的输入。今天上午晚些时候,我将再次研究这个问题(先开会…)对于其他任何想找到答案的人,我也在msdn上的directshow开发者论坛上问了一个问题:VMR9不使用覆盖曲面,所以覆盖曲面是否可用不应该有任何区别。你能更具体一点吗?打开aero时?你是说如果用户关闭Aero并恢复到“基本”显示模式,“覆盖曲面”将可用吗?覆盖曲面是什么意思?您是否建议尝试将EVR作为W7的替代渲染器?“Surface”一词源自DirectDraw。这是一个带有矩形视频的内存块,可以是整个帧,也可以是部分,可以是RGB甚至YUV。它可以直接位于视频内存中,也可以位于系统内存中。“覆盖”意味着该表面可以显示在主帧缓冲区的顶部,并通过视频卡调整大小。在XP中,通常的渲染只是以YUV格式创建一个覆盖曲面,并使视频卡将其转换为RGB,调整大小并显示它。如果启用Aero,YUV覆盖层是不可能的。是的,你必须考虑另一个渲染器或者关掉AIR NoxMeMUT-谢谢你的有价值的输入。今天上午晚些时候,我将再次研究这个问题(先开会…)对于任何其他寻求答案的人,我也在msdn上的directshow开发者论坛上问了一个问题:VMR9不使用覆盖曲面,因此,覆盖曲面是否可用应该没有任何区别。您可以在此处找到记录的VMR9混合器prefs:您可以在此处找到记录的VMR9混合器prefs:
MixerPref9_BiLinearFiltering, 
MixerPref9_AnisotropicFiltering, 
MixerPref9_PyramidalQuadFiltering, 
MixerPref9_GaussianQuadFiltering