高清视频相关知识和 KMPlayer 硬解码(DXVA)设置

来源:百度文库 编辑:神马文学网 时间:2024/04/29 05:07:32
高清视频相关知识和 KMPlayer 硬解码(DXVA)设置2010年03月03日 星期三 18:26

  “高清”,就是高清晰度,是相对于“标清”(即标准清晰度)而言的,主要是指高清晰度的视频媒体,高清技术的发展,越来越多的人接触到高清,现在网络上是铺天盖地的高清视频资源,高清电视、高清电影、高清 MTV 等等。
  高源媒体的解码过程是怎么样的?如何才能在电脑上正确地播放高清媒体?什么是硬解,硬解有什么要求?如何设置才能调用硬解?以下文字将用最简单的语言,和较少的转业术语作出说明。

一、常见的高清视频的编码及封装格式

  对于高清视频来说,主流的编码技术目前主要有 MPEG-2、DivX、XVID、H264/AVC、VC-1、RMVB 和 WMV-HD 等等。其中,H264/AVC、VC-1、MPEG-2 是蓝光(Blu-ray Disc)所选择的编码格式,也是目前最流行的高清视频编码格式。另外就是高清视频的封装格式,封装格式和编码格式是互相区别的,许多人会把它们混淆。

  1、H264/X264/AVC 编码格式

  绝大多数视听玩家对于 H264 编码都不会感到陌生,H264 编码的身世显赫,是 ITU-T(国际电信联盟视频编码专家组)与 ISO/IEC(国际标准化组织动态图像专家组)合作组成的 JVT(联合视频组)推动的新一代数字视频编码标准,也称为 MPEG-4/AVC 编码。H264 编码依托雄厚的背景,在技术上独树一帜,大幅领先于其它编码算法。

  X264 编码,是 H264 编码的一个开源分支,它符合 H264 标准,其功能在于编码,而不作为解码器使用,X264 编码最大的特点在于注重实用,它在不明显降低编码性能的前提下,努力降低编码的计算复杂度,X264 对于 H264 编码中的一些复杂编码特性做了折衷处理,其压缩视频体积小于 XVID(MPEG-4)编码视频,以小体积、高画质的特点得到了广泛认可。

  2、MPEG-2 编码格式

  MPEG-2 编码标准是由 MPEG(Moving Picture Experts Group)工作组发布的视频与音频压缩国际标准。MPEG-2 编码于 1994 年发布,常用于广播信号(卫星电视、有线电视)的视频和音频编码,经过后期不断修改,不仅成为 DVD 的核心技术,还应用于 HDTV 高清电视传输。

  3、VC-1 编码格式

  WMV(Windows Media Video)作为经久不衰的一种视频编码,一直在不断改进,2003 年,微软基于 WMV 第九版(WMV9)编码技术,正式提出了 VC-1 编码标准,并于 2006 年正式成为国际标准。VC-1 编码作为较晚推出的高清编码算法,自然吸收了 MPEG-2 与 H264 编码的优点,其压缩比介于 MPEG2 和 H264 之间,编解码复杂性仅有 H264 的一半,即压缩时间更短、解码计算更小,在微软的大力推动下,VC-1 编码已经得到了 BD 蓝光光盘、电影及电视学会(SMPTE)的支持。

  近几年来,为了更好的推广 WMV9/VC-1 编码标准,微软不遗余力的建立了 WMV-HD 高清资源站点,大量发布采用 VC-1 编码压制的 720P、1080P 宣传片及演示片(WMV-HD 视频格式) ,试图营造声势,吸引用户关注。不过,中庸的技术(与 H264 相比无明显编码优势)、封闭的平台(限于 Windows 系统)、后发的劣势(2006 年通过成为国际标准)仍然给微软 VC-1 编码的应用前景带来了较大的不确定性。

  4、高清视频的封装格式

  封装格式其实是一个“容器”,它不同于编码格式,封装就相当于捆绑打包,将已经编码好的视频文件和音轨文件打包在一起,并按照一定规则建立排序和索引,便于播放器或播放软件来索引播放。常见的封装格式有 MKV、AVI、MOV、TS、PS 等等,高清媒体文件的后缀名(扩展文件名)一般都是媒体的封装格式

  (1)MOV 格式:MOV 多见于 Apple QuickTime 网站上的电影预告片。MOV 类似于 RMVB,过于封闭自守,民间制作组没有人会用这个不方便的形式。
  (2)AVI 格式:AVI 封装是微软在上世纪 90 年代初创立的封装标准,是当时为对抗 QuickTime 的 MOV 格式而推出的,因为当时还没有流式播放需要,AVI 的将索引布置在打包文件的尾部,这就使得 AVI 封装不能做到流式播放(流媒体)。AVI 封装只能支持有限的几种视频音频编码形式,且 AVI 不能支持音频的 VBR 动态比特率编码。
  (3)TS 格式:TS(Transport Stream)是一种比较先进的封装形式,蓝光原盘中,就采用了 TS 封装。TS 封装支持几乎所有编码的高清视频和音轨文件。PS(Program Stream)封装的技术基本和 TS 相同,但 PS 封装和 AVI 一样,都不是流媒体,不能够支持流式播放,PS 封装使用在原先的 HDDVD 中。在高清标准下,MPEG-2 编码的视频文件主要采用 TS 封装格式。
  (4)MKV 格式:MKV(Matroska)是一种新兴的多媒体封装格式,可以将各类视频编码、16 条或以上不同格式的音频和语言不同的字幕封装在一个文件内,它具有开放源代码、音视频编码丰富、网络亲和性好等优势,已经得到众多视频压制组和玩家的支持,正逐渐成为高清视频的主流视频格式。H264 编码与 X264 编码目前大多采用 MKV 封装格式。

二、高清视频的播放组件及调用流程

  视频文件的解码过程如下依次需要用到的组件有“分离器”、“解码器”、“渲染器”,它们统称为“滤镜”。

  1、分离器(Splitter)

  要正确地播放多媒体文件(不管是否高清媒体文件),播放器首先要正确地调用分离器,把视频流和(或)音频流正确地分离出来,然后交给解码器进行解码,这就是分离器的使命。上文中说到有不少的封装格式,每一种封装格式都必须有相对应一种分离器,才能正确的把视频和音频分离出来以供解码器解码。

  常用的分离器有:Gabest MPEG Splitter(Media Player Classic 作者编写的分离器)、KMP Splitter(KMPlayer 原配的分离器)、Haili Media Splitter 等等,这三种分离器能够支持较多的封装格式,其它的分离器还有 Moonlight-Elecard MPEG2 Demultiplexer(月光分离器)、 nVIDIA Transport Demux(nVIDIA 公司的分离器,配合 PureVideo 使用)、CyberLink Demux(PowerDVD 软件中的分离器)等等。

  2、解码器(Decoder)

  解码器在整个视频的播放中占据了最主要的位置,它的作用是对由分离器分离出来的音频流和视频流分别进行解码。解码器又分为视频解码器和音频解码器。

  常见的视频解码器有:
  (1)MPEG-2 视频解码器:InterVideo Video Decoder(WinDVD 的解码器)、CyberLink DTV Video/SP Filter 和 CyberLink Video/SP Filter(PowerDVD 的解码器)、Moonlight-Elecard MPEG2 Video Decoder、nVIDIA Video Decoder(nVIDIA PureVideo 的解码器)、Sonic CinemasterVideo、Gabest Video Decoder 等等。
  (2)H264/X264/AVC 视频解码器:CyberLink H.264/AVC Decoder(PowerDVD 的解码器)、CoreAVC DirectShow Video Decoder、Moonlight H264 Video Decoder、ffdshow MPEG-4 Video Decoder 等等。
  (3)VC-1 视频解码器:CyberLink VC-1 Deocder(PowerDVD 的解码器)、Media Player Classic Video Decoder、WMVideo Decoder DMO(微软的解码器)等等。

  常见的音频解码器有:
  CyberLink Audio Decoder(PowerDVD 的解码器)、AC3 Filter、InterVideo Audio Decoder、nVIDIA Audio Decoder 等等。

  3、渲染器(Renderer)

  渲染器与解码器一样,分为视频渲染器和音频渲染器,解码后的视频数据经过视频渲染器的渲染后呈现到显示设备上,解码后的音频经过音频渲染器的渲染后从声卡输出。渲染在视频播放的过程中是很重要的,因为它会影响到视频最终的效果,不同的渲染器有不同的技术特性,对电脑的配置(主要是 CPU 和显卡)的要求也不一样。

  视频渲染器主要有以下几种:
  (1)旧式视频渲染器(Video Renderer):这种是最原始的渲染器,它接收到来自解码器解码后的数据流,在显示设备上显示。这种渲染器基本上不能调用到显卡硬件特性,全靠 CPU 来完成渲染任务。
  (2)覆盖合成器(Overlay Mixer):覆盖合成器能够将若干路视频流合并输出到显示设备上,并且它能够很好地调用显卡硬件的拉伸,颜色空间变换等硬件功能,以减少对 CPU 资源的占用率。视频覆盖的画面质量事实上取决于显卡硬件。通常在使用覆盖合成器的时候无法直接对正在播放的视频截图。
  (3)VMR 渲染器(Video Mixing Renderer):VMR 对覆盖合成器进行了改进,它是基于 DirectX 的视频渲染器,能够支持 16 路的视频流混合。VMR 根据 DirectX 版本的不同,可以分为 VMR7 和 VMR9,其中 VMR7 基于 DirectDraw7(2D),而 VMR9 基于 Direct3D9(3D),VMR9 可以支持视频特效(Video Effects)和视频变换(Video Transitions)。VMR 根据渲染模式的不同又分为“窗口化”(Windowed)、“无窗口”(Windowless)、“未渲染”(Renderless)模式。
  (4)EVR 增强型视频渲染器(Enhanced Video Renderer):微软在 Windows Vista 系统就开始引入的新视频渲染器,当然也包含在新的操作系统 Windows 7 中。它与 VMR 最大的区别就是能够支持 DXVA 2.0。

三、硬件解码加速 DXVA 接口规范和确解码级别、新兴的 CUDA 和 Stream 技术

  DXVA 的全称是 DirectX Video Acceleration,中文意思是 DirectX 视频加速。DXVA 不仅包括了视频数据的解码运算,还有各种后期处理运算,比如图像缩放、色彩空间转换、反交错等等。DXVA 其实就是大家常说的“硬解”。显卡是否支持 DXVA,是直接关系到在视频播放的过程中 CPU 资源的利用率。

  1、DXVA 接口规范的版本

  DXVA 接口规范目前有两个版本,分别是 DXVA 1.0 和 DXVA 2.0。DXVA 1.0 的规范里最早定义了 MPEG-2 和 WMV 的硬件解码加速能力,而 DXVA 2.0 比 1.0 版本增加了对 H264、VC-1 硬件解码加速能力的定义。也就是说,要“硬解”MPEG-2 的视频,只需要显卡能够支持 DXVA 1.0 标准就可以了,而要“硬解”H264/AVC 的视频,就要求显卡支持 DXVA 2.0 的标准。

  2、DXVA 硬件解码加速能力的级别

  视频硬件解码的加速能力的级别基本上分为三个,从高到底分别为:VLD(Variable Length Decoding / 变字长解码)、IDCT(Inverse Discrete Cosine Transform / 逆离散余弦变换)、MoComp(Motion Compensatiom / 运动补尝)。VLD 加速用于处理视频比特流(BitStream),IDCT 用于处理帧内压缩(Intraframe compression),MC 用于处理帧间压缩(Interframe Compression)。显卡能够支持越高级的加速能力,就能更大幅度地减轻对 CPU 资源的占用。

 

  如何才能快速地知道自己显卡是否支持 DXVA?利用一个叫做 DXVA Checker 的软件,目前最新的版本是 2.2.0.1。DXVA Checker 在 Windows XP 系统下运行时需要一个 dxva2.dll 文件,如果没有它,那么将无法正确探测出显卡对 DXVA 的支持情况。如果实在找不到这个文件,可以下载安装微软的 .NET Framework 3.0 或者 .NET Framework 3.5。运行 DXVA Checker 后,它便在 Decoder Device 标签页列出了显示设备对 DXVA 的支持情况。

  在上图中,可以看到用于上网本 Atom 平台的 Intel Graphics Media Accelerator 500(GMA500)对 DXVA 的支持情况。图上 DXVA1/DXVA2 是指支持的 DXVA 版本,“NV12是指视频输出的色系(其它的颜色系还有 YUV12、YUY 等等,没有太大的意义),后面是能够支持的分辨率。须要注意的是,对 WMV9 的支持当中,有一个级别是“PostProc(Post Processing)”,中文意思是“显示后处理”,它是最低级的 DXVA。还有一个称为“FGT(Film Grain Technology)”的技术,即所谓胶片感,目的是在不牺牲压缩能力的同时保持视频源特有的颗粒信息。

  关于 Intel Graphics Media Acceralator 500:
  GMA 500 与其他 GMA 系列产品不同,该显卡核心来自英国 Imagination Technologies 公司的 PowerVR SGX,该公司前身 PowerVR 公司曾经在显卡市场上出现的产品包括 PowerVR,Kyro 和 KyroII。其 PowerVR2 曾用于世嘉的 DC 游戏机中。GMA 500 的技术参数的特性如下:使用 GMA 500 主要集成于以下几个系列的芯片组中:UL11L、US15L、US15W。其中 UL11L 核心频率为 100MHz,其他两款的主频为 200MHz。支持 Vertex Shader(顶点着色) 4.1,Pixel Shader (像素着色)4.1,Pixel Pipelines(像素管线)2 条,Unified shader Pocessors(统一渲染单元)4 个,支持 hardware vertex shaders(硬件定点着色),峰值内存带宽 UL15L 为 3.2GB/s,US15L、US15W 为 4.2GB/s,最大支持共享显存 256MB,OpenGL 2.0,DirectX 10.1,支持的硬件解码有:MPEG-2、VC-1、H264/AVC。基本上,除了核心的频率较低外,硬件解码水平和最新的 X4500MHD 类似。

  4、nVIDIA CUDA 技术和 AMD(ATI)Stream 技术

  (1)nVIDIA CUDA:CUDA 的全称是 Compute Unified Device Architecture(统一计算设备架构),它是 nVIDIA 近年来力推的一项技术。随着显卡的发展,GPU 越来越强大,而且 GPU 为显示图像做了优化。在计算性能上已经超越了通用的 CPU。如此强大的芯片如果只是作为显卡就太浪费了,CUDA 正是可以让显卡可以用于图像计算以外的技术。CUDA 技术最典型的应用这一就是进行高清解码。著名的解码器 CoreAVC,它并不支持 DXVA,在过去它完全利用 CPU 进行解码运算,不过在新版本的 CoreAVC 解码器当中加入了对 CUDA 技术的支持,把解码运算的任务转移到 GPU 上来,大大地减轻了 CPU 的负担。

  (2)AMD(ATI)Stream:虽然与 nVIDIA 的 CUDA 技术的实现方式不一样,但是出发点和最终目的都是相同的,Stream 流技术就是利用 AMD GPU 多核在浮点运算性能上的优势进行加速计算。在高清解码的应用上,AMD Stream 比 nVIDIA CUDA 支持更多的功能:比如 MPEG-2 的转码、FullHD 1080p 的编码输出等,另外,AMD Stream 的软件是免费的(CUDA 的软件价格 30.00 美元)。

四、KMPlayer 播放高清视频的硬解码(DXVA)相关设置

  1、关于 KMPlayer 和 PotPlayer

  KMPlayer 简称 KMP,早期名叫 WaSaVi 播放器。作者是韩国的姜龙喜。KMPlayer 是一套将网络上所有能见得到的解码器(Codec)全部收集于一身的影音播放软件;此外,KMPlayer 还能够播放 DVD 与 VCD,汇入多种格式的外挂字幕档、使用普及率最高的 WinAMP 音效外挂与支援多种影片效果调整选项等。PotPlayer 是 KMPlayer 原作者姜龙喜进行 Daun 公司后用 C++ 语言(KMPlayer 是用 Delphi 语言写的)重写的新一代作品,目前正在全力开发中,功能尚不及 KMPlayer。

  2、KMPlayer 的具体设置

  虽然 KMPlayer 已经集成了解码器,但是它们是无法正常调用显卡的 DXVA 加速的。而目前最好的 DXVA 解码器是 Cyberlink 集成在 PowerDVD 中的解码器。如果电脑里没有安装 PowerDVD ,那么就需要自己搜索下载它的单独解码器。(可以邮件向我索取。)需要用到的 PowerDVD 的解码器主要有四个:H264 解码器 Cl264dec.ax、MPEG-2 解码器 Clvsd.ax、VC-1 解码器 Clvc1dec.ax、音频解码器 Claud.ax。

  (1)在设置之前,最好将 KMPlayer 的设置恢复成初始的状态:按“F2键打开 KMPlayer 的设置,点击下方的“初始化所有设置”按钮。对 KMPlayer 进行设置的目的是屏蔽 KMPlayer 内部的解码器,使 KMPlayer 可以调用外部的 PowerDVD 解码器进行视频解码。

  (2)在 KMPlayer 的设置菜单里,依次找到“滤镜控制”—“解码器使用”—“内部视频解码器”,在右边的“常规”选项卡里解除“H.263+”、“H.264”、“AVC1”、“VC-1的勾选,如下图所示:

  (3)然后再找到“滤镜控制”—“解码器使用”—“外部视频解码器”,点击右侧的“搜索外部解码器”,弹出“外部解码器/滤镜管理”对话框,再点击“添加外部解码器”按钮,依次添加上文所讲的四个 PowerDVD 解码器。如下图所示。

  

  (4)添加后双击解码器弹出解码器设置对话框,勾选“USE DXVA或者“Use Hardware Acceralator

  (5)点击确定后回到“外部视频解码器”设置窗口,“H.264 视频”、“AVC1 视频”、“VC-1 视频”分别选择刚才添加的 PowerDVD 解码器。

  解码器的设置就到此结束了。此外,有几要说明的问题。
  (1)关于 KMPlayer 设置的保存:在 KMPlayer 的“常规”设置中,有一个“保设置到 KMPcfg.ini 文件”的选项,本人认为可以勾选,全部设置完成后可以备份 KMPlayer 安装目录下的 KMPcfg.ini 文件,重新安装系统后可以快速地恢复原先的 KMPlayer 设置。
  (2)关于 KMPlayer 的“超级速度模式”:许多网友认为,必须勾选这个选项才能正常调用 DXVA 硬解,但是根据我的实际情况,这个选项不是必须勾选的。当系统里安装了许多另外的解码器(比如 PureCodec 完美解码、FinalCodec 终极解码、K-Lite Codec Pack 等等)时,开启这个选项可以滤掉多余的解码插件。
  (3)关于“源滤镜”:在 KMPlayer 中有“源滤镜”的设置,这个“源滤镜”到底是何解释,本人尚不太清楚,暂且把它理解成优先级较高的滤镜。
  (4)关于“渲染器”:一般来说,在Windows XP 系统下播放效果最好的渲染器是 VMR9,而 Windows Vista / Windows 7 系统下最好的渲染器是 EVR。但是有些系统会出现兼容性问题,出现播放过程中无画面(黑屏)有声音、无法播放甚至蓝屏死机的时候,可以尝试改变一下渲染器的设置。本人的上网本(显卡是 GMA 500)就无法让 KMPlayer 在 Windows XP系统中使用 VMR9 渲染器,往后的测试都是使用 VMR7 渲染器。

 

 

 

五、几段高清视频的播放测试:

  硬件系统:Acer Aspire One 751h:Intel Atom Z520(1.33G/512K/133MHz)、US15W、GMA 500(Driver 6.14.11.1018) 、1366×768(11.6")
  软件系统:Windows XP Services Pack 3(5.1.2600.5512)、DirectX 9.0c、KMPlayer 2.9.4.1436、PowerDVD 8.0 / 9.0 Codec

  测试片源:(点击图片可以放大看原分辨率图片)

  (1)大塚愛 ユメクイ:封装格式 TS、视频编码 MPEG-2 、音频编码 LPCM、分辨率 1440×1080i

  (2)江若琳 你不在了:封装格式 MP4、视频编码 AVC、音频编码 AAC、分辨率 1920×1080i

  (3)变形金刚 预告:封装格式 MOV、视频编码 AVC、音频编码 AAC、分辨率 1920×1080p

  (4)阿凡达 预告:封装格式 MOV、视频编码 AVC、音频编码 AAC、分辨率 1920×1080p、外挂字幕 SRT

  根据播放器显示的 OSD 信息,视频输出显示是 DXVA,说明已经成功地开启了硬件加速解码。