视频渲染(显示)技术


1.
常见播放器的视频渲染方法

1.1   TCPMP

TCPMP不是基于DirectShow架构的播放器,TCP是跨平台的,并可在移动设备上运行。在Windows以及Window Mobile上,TCPMP的视频渲染可以有DirectDrawGDIASCII控制终端三种选择。

 

 

1.2  Media Player Classic (MPC) 

 

MPC是基于DirectShow架构的,渲染模式包括:

1)  系统默认:DirectShow的默认视频渲染器滤镜,若其他渲染器由于某些原因无法载入时将返回至此滤镜,在Windows XP下等同于VMR7(窗口化)

2)  旧时渲染器:这是Windows 9x/me/2k的默认渲染器,根据视频窗口的可见度,以及您的显示卡的能力,它将在GDIDirectDraw,覆盖渲染模式间动态切换。

3)  覆盖合成器:总是渲染与覆盖模式,通常只允许YUV格式,但它可直接被传输而不将色彩转换成RGB,这是渲染模式中最快的,并且是唯一一个您可以确定激活全屏视频镜像至电视输出的渲染器。

4)  VMR7(窗口化):Windows XP或更高版本的默认渲染器,非常稳定且仅稍慢于Overlay合成器,使用DirectDraw且尽可能运行于覆盖模式。

5)  VMR9(窗口化):仅在安装过DirectX9后才可用,具有与VMR7(窗口化)相同的能力,但它不会使用覆盖,因此可能稍慢于VMR7(窗口化)。

6)  VMR7(无转换):与VMR7(窗口化)相同,但有MPC字幕引擎的分派传输器插件,覆盖视频镜像将不会工作,“真彩色”为推荐的桌面色深。

7)  VMR9(无转换):与VMR9(窗口化)相同,但有MPC字幕引擎的分派传输器插件,覆盖视频镜像可能会工作,“真彩色”为推荐的桌面色深。

8)  Haali的视频渲染器

 

1.3   VideoLan (VLC)

 

VLC的渲染模式有:

1)  DirectX 3D video output

2)  DirectX视频输出

3)  OpenGL视频输出

4)  Windows GDI视频输出

5)  彩色ASCII图片视频输出

 

1.4   Zoom Player

 

Zoom Player基于DirectShow架构,其渲染模式与MPC类似:

1)       Standard Overlay (No Derived Aspect Ratio or Color Control support)

2)       Overlay Mixer (Limited to the primary monitor on most hardware)

3)       VMR7 (Requires Windows XP)

4)       VMR9 Windowed (Requires Direct-X v9)Realtek HD Audio output

5)       VMR9 Windowless (Requires Direct-X v9)Default DirectSound Device

6)       VMR9 Renderless (Requires Direct-X v9)Default WaveOut Device

7)       Haali's Video RendererDirectSound: Realtek HD Audio output

8)       EVR (Requires Windows VISTA or .NET3 installed)

 

说明:

Standard Overlay:

This setting uses the Standard Renderer. The Standard Renderer does not support proper Aspect Ratio or Color Controls, not recommended.

 

Overlay Mixer:

The Overlay Mixer allows for proper Aspect Ratio Control and Hardware Color Controls (if the

hardware/drivers support it). This is the default setting and should work on any operating system (limited to displaying video on the primary monitor).

 

Video Mixing Renderer 7:

This Video Renderer is included for backward compatibility and requires Windows XP or newer installed. It supports multi-monitor playback with some hardware acceleration, but does not support Hardware Color ontrols.

 

Video Mixing Renderer 9:

This is the newest and most advanced Video Renderer. It allows for proper Aspect Ratio Control, Multi-Monitor support, Hardware Color Controls (except Gamma) if the hardware/drivers supports it, Frame Capture (screenshot) with any file format and can provide better image quality through the use of more advanced image scalers.

 

Custom (Advanced Mode):

A custom Video Renderer can be any filter that accepts RAW Video Input.

 

1.5   Windows Media Player


 2. 各种视频渲染方法简介

 

2.1   视频覆盖(Video Overlay

大概早在1995年,当mpeg1(vcd)回放在pc上开始流行的时候,pc的处理能力还么没有强大到实时播放的地步。显卡制造厂商适时的推出了"video overlay(视频覆盖)"的技术。 它就是种在显卡上用硬件完成同时显示几个视频的功能(拉伸,颜色空间变换,等等...)的技术,这样就可以在pc上流畅的播放动画而不占用cpu

视频覆盖的画面质量事实上取决于显卡硬件。市面上的绝大部分的显卡显示视频覆盖质量都很不行。在视频覆盖上用视频渲染技术的一个最大的关键就是在每个显卡上只有一个视频覆盖 unit(单元). 这样就迫切的需要多显示器系统了。

 

2.2   Direct3D

Direct3D 是微软提供给程序员使用一个不断进化的功能集合的DirectX库的一部分。在DirectX 7 中,微软给出了一套新的功能,性能接近于表面覆盖(Overlay surfaces),但是没那么多限制。

视频渲染(Video Rendering)技术基于Direct3D比视频覆盖提供了更好的图像质量,还没有视频覆盖单显示器的麻烦。但是一些不支持DirectX 7的显卡不支持这个技术, 但是这种显卡现在也很难找了,^^

 

2.3   系统默认渲染器(The System Default Renderer

当播放器(如MPCKMPBS、“终极解码”等等)用默认回放模式播放媒体文件的时候, 在低于Windows XP 的所有windows系统上或者windows xp的“vmr7”,用系统默认渲染器就意味着“标准覆盖”。

 

2.4   标准覆盖渲染器(The Standard Overlay Renderer

这是最老的视频渲染技术了。在可用的时候它用到视频覆盖, 当视频不可用的时候就退回到纯cpu控制视频。纯CPU控制就是说cpu替代了显卡的视频覆盖来干这些事情,这对回放是个不小的打击,特别是对HD这种视频,CPU更辛苦了。这个渲染的缺点是它不支持固定屏幕高宽比控制,硬件颜色控制(色调/饱和度/亮度/对比度/gamma(灰度))不可操作,而且抓图结果会很奇怪。

 

2.5   覆盖混合渲染(The Overlay Mixer Renderer

同样是运用视频覆盖技术,这个渲染器允许在那些支持颜色控制的硬件上进行颜色控制(色调/饱和度/亮度/对比度/gamma)。 有些卡可能只支持颜色控制的一个子集(比如只有亮度)。 这个渲染器也支持固定宽高比控制,只要媒体文件支持(vcd/svcd/dvd/etc...)。这个渲染器的缺点就是它会返回到纯cpu控制。当视频覆盖不可操作时,它就罢工了。如MPC在媒体模式 的这个情况时候,就会回到标准覆盖渲染。在DVD模式时,会报错说视频解码器不能连接到覆盖混合器。最后,这个渲染技术还是抓图的效果不够好。 

 

2.6   视频混合渲染器(VMR7

视频混合渲染器7The Video Mixing Renderer 7):这个渲染器是视频覆盖技术和Direct3D技术的结合。 它只在windows XP上有效, 后来被更高级的VMR9取代了。windows media player 7-10使用这个技术。这个渲染技术默认使用视频覆盖。然而,如果它不可用了,它可以有限的使用direct3D。它的缺点时不可进行颜色控制,截屏也还是不够好。

 

2.7   视频混合渲染器9VMR9

视频混合渲染器9The Video Mixing Renderer 9):这是目前最新的视频渲染技术(DX10出来之前还是)。它完全建立在Direct3D上,需要Direct9和最新的硬件。它可以提供最好的画质(取决于渲染模式和显卡)。VMR9支持硬件颜色操作(如果卡支持),但是没有gamma控制,因为Microsoft没有提供。VMR9也有宽高比控制。

 

VMR9支持3种特别的渲染模式:

VMR9窗口(VMR9: Windowed)是最基本的模式。它向后兼容,但不支持帧抓屏。要提一点,这个模式在Windows SP1Directx9 B下有bug,在DVD菜单导航时只能用这个模式了。在Windows XP SP2Direct9C下这个bug解决了。

VMR9窗口无转换(VMR9: Windowless)这个模式比窗口模式高级点, 用来截图是最好的。

VMR9渲染无转换(VMR9: Renderless)这个可是VMR9中最复杂的渲染模式。它可以工作在Direct3D独占模式,那就是整个机器被设定为全屏,其他运行的程序不可以操作视频硬件。在这个独占模式下,所耗cpu更少,分辨率越高,回放就更平滑。 缺点是在独占模式下,整个机器都献身给视频回放了,你不能干其他任何事情了。小结  


3.

Windows操作系统上的渲染方法:

基于DirectShow架构的播放器的渲染方法:Standard Overlay, Overlay Mixer, VMR7, VMR9。其中Overlay Mixer效率较高,不需要DirectX9,支持以前的Win98/me/2000操作系统,使用较广泛。

不采用DirectShow架构的渲染方法:DirectDrawGDI。其中DirectDraw效率明显优于GDI


4.   
附录A 关于Video RenderOverlay Mixer

大家知道,Video Renderer (VR)是接收RGB/YUV裸数据,然后在显示器上显示的Filter。为提高计算机画图性能,根据你计算机显卡的能力,VR会优先使用DirectDraw以及Overlay表面;如果这些特性得不到显卡的支持,VR会使用GDI函数进行画图。在上级Filter连接到VR时,VR总是先要求当前显示器设置的色彩位数的RGB格式,如你的机器设置的是24位彩色,则VR首先要求连接的Media typeRGB24。如果你的显卡支持YUV Overlay表面,那么在Filter Graph运行起来的时候,VR会动态改变已经连接的Media type,要求上级Filter输出一种合适的YUV格式。VR Filter上实现了IVideoWindow接口,Filter Graph Manager主要通过这个接口来控制视频窗口。

 

那么,Overlay Mixer又是怎么回事呢?简单地说,Overlay Mixer就是能够将几路视频流合成输出的Filter。这个Filter是特地为DVD回放(DVDSub-pictureline-21数据需要叠加显示)或广播视频流(含有line-21数据)而设计的。同时,它还支持硬件解码器使用Video Port Extensions,就是绕过PCI总线,将硬件解码出来的数据直接送给显卡显示。这个Filter同样优先使用显卡的DirectDraw能力,而且必须要有Overlay表面。Overlay Mixer有一个输出Pin,输出的Media type是:MEDIATYPE_VIDEOMEDIASUBTYPE_ Overlay;后面一般连上一个Video Renderer。当Filter Graph运行时,实际的图像显示工作由Overlay Mixer完成,而Video Renderer只是做一个视频窗口的管理工作。还有另外一个更常见的FilterOverlay Mixer 2。这个FilterOverlay Mixer功能上是一样的,只是两个Filter支持的Format type不同和Merit值不同而已。

 

Overlay Mixer使用Color keying来实现几路视频的合成:它将Color keysub-picture(或line-21)数据送到主表面,将主视频数据送到Overlay表面;显卡然后将两个表面的数据合成,送到帧缓存(Frame buffer)中进行显示。典型的情况,Overlay Mixer使用三个Input pinPin 0输入主视频数据,Pin 1Pin 2输入sub-picture数据和line-21数据。Overlay Mixer在内部根据Pin 0输入的数据来创建Overlay表面。Overlay Mixer向上一般连接的是Video Decoder。如果这是个Software decoder,则Pin 0上的数据传输使用标准的IMemInputPin接口;如果使用了硬件加速,则Pin 0上必须使用IAMVideoAccelerator接口。(注意这两种接口是不能同时使用的!)如果上一级Filter是硬件解码器的包装Filter,使用VP pin输出,则解码器与Overlay Mixer使用IVPConfigIVPNotify接口对通讯,以协调工作。Overlay Mixer不支持1394USB接口的采集设备。Overlay Mixer向下一般连的是Video Renderer。这时Video Renderer只是一个视频窗口管理器。两个Filter通过IOverlayIOverlayNotify接口对进行通讯,以协调工作。(Video RendererInput pin有两种连接方式:VR直接做图像显示时,则使用IMemInputPin接口接收视频流数据;Overlay Mixer做图像显示时,则VR使用IOverlay接口与上一级Filter进行通讯,Overlay MixerVR之间没有视频数据的传输。注意这两种接口是不会同时使用的!)

 

大家看到了,其实Video RendererOverlay Mixer有一部分功能是重复的。Video Renderer是最早设计的,设计之初,很多应用情况没有考虑进去;于是,就用Overlay Mixer来“打补丁”。现在,我们为什么不把两部分功能整合一下呢?微软也正是这么做了!在Windows XP(家庭版和专业版)中,新出现了一个Filter(注册的名字也叫“Video Renderer”,但两个FilterCLSID是不同的,Merit值也不一样),替代了原来默认的Video Renderer。这个新的Filter,称之为Video Mixing Renderer Filter 7 VMR-7),因为它内部使用了DirectDraw 7的技术。可以这么说,VMRWindows平台上新一代的Video Renderer。值得注意的是,这个Filter仅在Windows XP里集成,在其他任何DirectX发布包里都得不到这个FilterVMR-7的大致功能如下:支持最多16路输入流的alpha混合;支持在合成图像显示之前得到对其访问权;支持插入第三方开发的Video EffectsTransitions组件功能等等。还有,VMR连接时不要求RGBMedia type,因为它任何情况下都不会使用GDI函数来画图。

 

随着DirectX 9的发布,又会出现一个新的Video Renderer,称之为VMR-9。这个Filter使用了Direct3D 9的技术。VMR-9VMR-7是两个不同的FilterVMR-9的性能更加强劲。值得注意的是,为了保持向下兼容,VMR-9Merit值并不高,它不作为系统默认的Video Renderer;如果你的应用程序只需要很少的视频显示控制,建议还是使用各自平台默认的Video Renderer

 

下面是关于一些Video Renderer使用的常见问题,可供参考:

1. 写基于DirectShow的应用程序,肯定会用到Filter Graph ManagerIVideoWindow接口。Filter Graph Manager上的这个接口,实际实现于Video Renderer上。需要特别注意的是,必须在Video Renderer连接成功后才能调用这个接口的方法,否则方法调用总会失败。

2. 通过IVideoWindow::put_FullScreenMode实现全屏模式。对于一些新的显卡,VR能够对图像直接拉伸后再显示(性能不会损失很大);但如果显卡本身性能不佳,Filter Graph Manager会自动将VR替换为Full Screen Renderer Filter。事实上,当用户调用该接口函数要求切换到全屏模式时,Filter Graph Manager的控制逻辑为:优先使用在Filter Graph中直接支持全屏模式的Video Renderer(通过IVideoWindow::get_FullScreen Mode判断);否则,使用一个对图像缩放到全屏,性能损失不是很大的Video Renderer;再则,使用Full Screen Renderer Filter替换;以上尝试都失败,则选择Filter Graph中任意一个支持IVideoWindow接口的Video Renderer。除了一些比较老的显卡,一般第二步尝试就能成功。

3. 通过IBasicVideo::GetCurrentImage得到当前的图像数据。对于一般的Video Renderer来说,使用这个接口函数是不可靠的。因为如果Video Renderer使用了DirectDraw加速,这个函数调用会失败;而且调用这个函数,Video Renderer必须处于Pause状态。而对于VMR,则完全没有如上这些限制。所以,在使用Video Renderer的情况下,想得到整个视频流中的某一帧的图像,建议写一个In-place-trans filter,插入到Video Renderer的前面,很简单就能实现。

4. 有时候,从一个DecoderOutput pin Render出去,会自动接上Overlay Mixer 2这个Filter?或者自己写的Decoder,怎么样让它连接到Overlay Mixer 2?这主要是DecoderOutput pin支持的Media type使用的Format type的原因。需要注意的是:Overlay Mixer 2仅支持Format_VIDEOINFO2Overlay Mixer虽然同时支持Format_VIDEOINFOFormat_VIDEOINFO2,但它的Merit值为MERIT_DO_NOT_USE,不会被自动加入Filter Graph中。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值