如果你问我神马是高清,我会告诉你:高清是一种标准,一种品味和一种追求。
  想想看,在深受房贷、个税和老板三座大山压迫之外的生活夹缝中,“一杯红酒配电影”会是多么抚慰人心。细腻逼真的影像让你领略“星沉海底当窗见,雨过河源隔座看”的奇幻美景,震撼顿挫的声音让你聆听“姑苏城外寒山寺,夜半钟声到客船”的寂寥空灵。——此时此刻你是否才由衷感到生活可以如小说中描绘得那样祥和美好。
  从上述角度来说,打造一款支持高清视频播放功能的影音软件,是一件关系到人民幸福感的民生工程,是构建和谐社会的重要组成部分。对此,QQ影音做到了。
  看到这里,应该会有愤青来挑刺儿了:高清视频也是视频格式的一种,万能格式播放器本就应该支持呀?这种判断在错误程度上虽然远没有达到NC的临床标准,但,需要强调的是:不是所有牛奶都叫特仑苏,也不是所有视频都能标榜“高清”。我们先通过下表来看看纯正的“高清”血统:


  依此标准,观察下我们周围:那么多的视频网站、300块的山寨手机、屏幕比指甲盖大点有限的MP4、机身厚得可以当板砖使的劣质平板电脑,都在声称“完满支持高清电影”。这不能不说是残酷的现实:我们不仅被国家统计局发布的数据“幸福着”“加薪着”“满意着”,而且还有那么多的JS让我们“被高清”!
  归结到底,高清视频由于包含巨大的数据流量、解码播放过程需要完成高计算复杂度的算法,所以不要说那些低档的移动设备就是大多数PC机的CPU也无法满足播放高清视频时数据处理能力的要求。于是,会出现CPU占用率100%、卡机等惨状,每秒25帧图像的视频变成了几秒钟自动切换一次画面的PPT。
  为了应对高清时代的挑战,显卡厂商在GPU中实现了高清视频的解码,两大主流厂商NVIDA和ATI在2008年前后推出的产品中都高调地打出了高清牌(注:后续Intel也发布了支持高清视频解码的核芯显卡)。顺应而来的,优秀的播放器产品就应该充分发挥用户计算机上的显卡能力(即所谓的高清视频硬件加速能力),实现流畅的高清影像播放,真正还原那些美好的影音记录,让用户享受身临其境的感官体验。
  至此,废话说完。总结一下:我们要切实提高认识、统一思想、转变观念,落实高清视频硬件加速功能的研发工作,为各阶层群众提供功能全面强大的播放器产品,提升人民幸福感、共享改革开放三十年成果。下面,我们进入QQ影音那段激情燃烧的岁月。
第一幕:晴天一个霹雳

  公元2008年,QQ影音启动公司内部测试流程,标志着腾讯桌面产品家族中一支新军蓄势待发,即将逐鹿中原。全员邮件发出后,各种反馈意见纷沓而至。坦白说,这些声音中有不少是善意而中肯的批评建议。但怎么说呢,好比自个家的孩子在父母眼中终究是个宝,所以确属BUG(即软件产品中的缺陷)的立马解决;而对于其他的高谈阔论,至少就我个人而言,也只是抱着且听无妨的态度对待。
  但,在公司BBS上还是有些声音,深深刺激了我们——“我肯定不用,连高清加速功能都没有”“刚装上,发现没有高清功能,立马卸载之”云云。要知道,QQ影音就好比我们新生的Baby。你可以说我孩子单眼皮、塌鼻梁、黄龅牙;甚至再缺心眼点,说他脸型像街坊王麻子。但要抬眼断定就是个弱智残疾,TMD不行!
  这种个别同事对高清功能的强烈诉求,以及由于这种诉求无法由QQ影音满足而带来的一票否决式的唾弃不用,犹如晴天一个霹雳,让团队所有成员在临近新产品发布时摩拳擦掌的Happy情绪中重新冷静了下来。
  当时的情况是:团队研发人员算上Leader(也是码农出身)仅5人,不仅需要处理各渠道反馈回来的BUG、稳定性和性能问题,而且面临诉求强烈的新特性功能研发,包括高清加速、多格式转码等。显而易见,人力资源无法做到面面俱到。要有所得,必要有所舍——必须放弃其他的新特性,而仅保留其中之一。
  决策,是一门艺术。凡江河湖海,也是适合中国人开会的红色圣地,遥想那年嘉兴南湖…历史的一幕会再次上演吗?请听本台简讯——
  今天,是一个令全球华人欢欣鼓舞的日子。南海之滨深圳喜迎盛事——QQ影音公司内测版本总结会暨外发版本规划会在TCL大楼隆重召开。出席会议的有QQ影音团队所有成员,CDC(注:腾讯用户体验设计中心)兄弟团队成员列席了会议,团队Leader主持会议并发表了重要讲话(此处省略领导的“简单说两句”,共计十万八千字)。会议在严肃紧张而又活泼生动的气氛中进行,与会嘉宾畅所欲言,就现阶段BUG解决情况及外发版本新特征等大家关心的问题积极、广泛、深入地交换了意见。此次会议是积极的、建设性的和富有成果的。最后,大家就版本新特征进行了投票表决,并以X票支持、X票反对、0票弃权通过将高清加速功能列为外发版本重要新特征的决议。会议同时委任笔者为该功能的主要开发人员…
第二幕:燃烧吧,小宇宙

  本人算是信号处理与视频编解码专业科班出身,但对于高清视频硬件加速,此前完全没有接触过。解铃还须系铃人,于是首先找到BBS上强烈表达高清功能诉求的同事,通过RTX、打电话等多种骚扰手段,详细地了解了高清加速功能的含义、用户使用场景及市场上可供参考的同类型产品等信息。
  首次试水后,我明白了:吃这口饭不容易。放下别的不谈,光就硬件条件而言,当时QQ影音团队内连支持高清加速功能的显卡都没有装备,开发调试如何进行?软条件上,几乎没有任何技术储备,直接上手面向硬件的GPU编程?
  是“一声弹指泪如丝”之后感叹“巧妇难为无米之炊”,还是发扬深圳拓荒牛精神完成整串空手套白狼的高难度动作?面对BBS上的泱泱民意、迫于团队成员和Leader的滚滚淫威,听从内心深处男人就要能硬的声音,…,毅然只能选择后者。于是,我想起一句台词:燃烧吧,小宇宙。
  通过与公司高端用户再次闲聊、Google“高清硬件加速”关键字、疯狂把玩终极解码/暴风影音等已经支持高清加速的产品,终于将各种模糊的概念清晰化,并逐渐开始分析其中的技术实现方式。
  为了体现本文是技术人员所撰写,下面将“高清解码硬件加速”所涉及的几个重要概念简单描述一下,以资各位技术大牛。非技术人员、以缓解工作疲劳为目的读者、正在等待下班班车到达而无所事事的读者可以直接跳过。

 

NVIDIA PureVideo HD vs. ATI UVD

 

  支持高清硬件加速的GPU主要来自两大厂家,即NVIDIA和ATI。前者早在GeForce 7 series GPU产品中就开始部分支持H.264/WMV格式影片的硬件加速,在GeForce 8500/8600、GeForce 8400M/8600M/8700M开始引入PureVideo HD(见图1)技术,全面支持高清影片硬件解码。与之相似,ATI从ATI Redeon® X1000 series开始就支持部分硬件加速,之后则开发了UVD(Unified Video Decoder)(见图2)技术全面支持视频硬件解码。


图1 NVIDIA(R) PureVideo HD



图2 ATI UVD


  如上图,视频解码主要分为四个模块,按照处理顺序为:
  § Bitstream Processing: 主要实施对视频压缩码流的熵解码过程
  § Inverse Transform: 主要实现反整数变换,将视频数据由频率域转换到像素域
  § Motion Compensation: 实现运动补偿过程,完成预测编码类图像的重构
  § Deblocking: 去块效应滤波模块
  对上述处理模块支持得越多,则表明GPU硬件解码能力越强。
  对于第一代PureVideo技术,是不能支持VC-1视频编码的硬件加速的,而对于采用PureVideo HD技术的显卡来说,虽然还不能完全支持VC-1硬件解码,但是已经可以完成VC-1除Bitsream Processing外的三个步骤,其余工作仍然留给CPU进行。
  UVD是ATI针对HD DVD和Blu-ray Disc两个主流高清视频载体而提供的GPU解决方案。未来(站在2008年的角度上)高清规格的趋势基本已经明朗,VC-1和H.264两种编码是目前的绝对主流。以HD DVD和Blu-ray为载体的电影,码率通常较高,普通CPU无法应付。UVD则可以实现H.264/VC-1的完全硬件解码,这即是其在HD支持方面优于NVIDIA之所在。
关于DxirectX Video Acceleration等级
  DXVA规范是一个具有profile的标准,对DXVA不能用“支持”、“不支持”简单论之。GPU支持DXVA规范,不代表就实现了里面所有的功能,微软的DXVA 2.0标准为显卡的硬件解码加速能力分出了不同的档次。
  档次区分的标准是显卡能实现硬件解码能力的差异,即前文描述的4个视频解码模块,能实现的模块越多,显卡的级别也就越高。Microsoft按照GPU能够处理的视频解码过程中模块的多少对硬件能力进行“分级”,如下图所示:


图3 DXVA 2.0分级定义


  举例而言,Microsoft将GPU对于H.264解码的能力分为了A~F共6个等级,其中A为最低,F为最高。这里,FGT(Film Grain Technology),是指胶片感,也就是影片中的颗粒感觉。未来的H.264编码器将会有FGT的开关选项,比如针对录像摄影素材则将FGT关闭,而对于胶卷摄影,出于胶卷的特性则将FGT打开,以保持特有的颗粒信息。而在影碟机一方,其解码器将识别颗粒信息,并在噪音滤波器中应用到H.264的视频流上。对于VC-1的支持,GPU则分为4级,仅支持Post Processing(如deblocking)模块的,为A级;当GPU能处理所有处理模块时,则为D级,——表明GPU可以支持硬件熵解码。
第三幕:从用户中来,到用户中去
  在多格式支持类播放器领域(即QQ影音所定位的市场)中,通过分析可以发现:包括KMP、暴风影音、风雷影音、终极解码在内的所有播放器均使用“高清滤镜”来完成高清视频的解码,同时配合一定的组合方式和渲染策略来实现滤镜管理,最终实现GPU“硬件”解码,从而“加速”高清影像的回放显示。
  至此,技术内幕大致揭开,开始发动对高清视频硬件加速功能的攻坚战。攻坚战主要分两轮实施。
  第一轮战役:肉搏——技术篇。此轮战役以我师兄(时任腾讯研究院多媒体研究室研究院)为左翼、同队战友(即完成自身所肩负开发任务后被抓壮丁的倒霉蛋)为右翼、笔者自领中军(全军单人无骑),全面铺开。通过奋指狂敲写代码、悬梁刺股加夜班、抓耳挠腮调BUG等多种战术,历时N个星期,高清加速功能原型DEMO终于“千呼万唤始出来”。首个支持高清功能的内部体验版本出来后,赶紧地,诚惶诚恐如献贡品般地让公司内部最初在BBS上“发难”QQ影音的BS哥试用了一下。在随后的几个星期内,则不断地通过“献贡品->被BS->痛定思痛->解决问题->再献贡品->再被BS…”的方式来打磨技术细节、修炼QQ影音高清内功。
  第二轮战役:舌战——产品篇。此轮主要围绕高清视频硬件加速功能产品表现形式、界面布局、用户交互方案等展开,在工程师、产品经理、界面设计师、交互设计师之间以唾沫横飞的方式进行。参战人员的焦点论题是:市场上已经有支持高清视频的产品,QQ影音创新何在?通过在办公室、会议室、茶水间、RTX群等等战场的白刃战PK,大家终于得到一个重要共识:创新不仅仅意味着改天换日般的变革,而更应该从实际用户需求出发,以解决实际问题为宗旨。
  QQ影音的高清功能,既非空前也非绝后,其目的更不是申报国家500W科技进步奖。我们的目的在于用诚意给大众用户呈上一道人见人爱的小葱拌豆腐,仅此而已。然而虽为家常菜、家家户户都有,但却博百家之长、似曾相识之中彰显对细节的讲究和执着。这道家常菜,就是要让用户一吃就爱、一爱则上瘾,逐渐形成对QQ影音产品的可信、美誉直至对这个品牌的忠诚度和依赖度。
  为了完成QQ影音在高清加速功能上的自我塑造,开始第三轮的信息搜集。在此期间,我做了如下几件事情:①注册了思路论坛用户,开始在上面长时间潜水;②再次骚扰公司同事,了解他们如何使用高清功能;③将自家PC上的nVIDIA GeForce 8600 GT显卡更新驱动以支持高清硬件加速,从此开始腐化堕落的视觉享受生活,直至今日。
  另外,也发现了几件“有趣”的现实:①某些播放器产品虽然有高清加速功能,但几乎为所有自诩是高端用户的人所不齿,原因是:太傻瓜化,很多时候无法开启高清加速,无法满足高端用户的控制需求以及在吃饱后撑得慌时爱鼓捣的心理。②即使是常用高清功能的高端用户,也很少有真正能完全搞明白、并准确使用终极解码那个“解码中心”的(见图 4)。他们嘲笑那些初级用户,但其实就是胆子大点、耐心点而已。出现高清影片无法加速时,他们的办法是:枚举所有可能的配置,直至貌似问题解决。③思路论坛中类似“跪求配置高清加速”的帖子不少,但跟帖者要么惜字如金,故作高深,仅点拨一二;要么好为人师,长篇大论,技术术语漫天飞——以我的理解,中国人除了个别实在闲得发慌的,或者如我这般拿工资来看论坛的,其他人应该没有兴趣看完;即使看完,也很难完全知道下一步该怎么办。


图4 实现高清功能的用户配置版面


  用户需求是创新的源泉所在,在发现了现有产品不足后,QQ影音高清功能从用户中来,产品形态和技术实现方案最终又回到用户中去。
  § 智能高清模式:提供高清硬件加速一站式解决方案。简言之,通过检测用户的显卡能力和分析当前播放的影片编码参数来智能决定是否能够、是否需要开启高清加速以及怎么以最快速的方式选择最合适、最稳定的解码组件来实现加速方案。QQ影音的智能高清模式至少在以下方面完成了微创新:①根据影片量体裁衣来决定是否开启加速,而非其他产品那样采用一刀切的方式。这样使得那些CPU完全能够胜任(即所谓软解码)的影片可以避免开启加速后可能带来的稳定性问题;②在大量实际测试的基础上制定了不同类型高清影片的解码器“组合”方案,规避了其他产品在播放某些高清片时出现的花屏、黑屏、丢帧、音视频数据不同步的问题;③完善的智能方案能覆盖Windows XP和Windows Vista(2008年Windows 7尚未出世)两大Windows版本下的高清加速,并且在开启加速后仍然能实现任意加载外挂字幕。
  此选项也是QQ影音的默认选择,这意味着初级用户从此不再需要去理解DXVA等术语、不再需要上思路论坛去跪求大侠和救世主,没有痛苦、没有烦恼,轻轻松松步入高清时代!
  § 稳定兼容模式:高清加速功能严重依赖显卡驱动等外部环节,容易在QQ影音不可控的范围内造成稳定性问题,而这些问题暂时也无法全部用技术手段智能检测和鉴别,所以包装了这个模式用于关闭高清功能。
  § 自定义优化模式:给有精力的人准备的,希望让一部分对一站式播放器就天生反感而自命不凡的高端用户也能在这里找到可以玩的乐趣。当然,为了防止玩火自焚,我们仅仅强调并暴露了三个关键概念:分离器、视频解码器和音频解码器。总之希望玩家既有得玩,又不至于玩得太累、太辛苦,而且我们还衷心希望能玩出效果——即确实当智能方案出现问题时,可以通过一定时间内的手动尝试找到合适的高清加速方案。
  “自定义优化模式”在产品设计时,饱受争议,一度认为是“技术人员的偏执”而被认为是鸡肋甚至是鸡屁股。但这个貌似撑门面、花架子的东西,还是得到了很多用户的认可,在后续的用户跟踪中,确实有不少用户通过使用“自定义”模式解决了一些特殊情况下无法开启高清加速的问题。眼见此产品模式被认可并获取了一定用户口碑,业内其他多款播放器产品在此之后也加入了类似的手动设置功能。当然,不管你信不信,反正伪愤青们是一定会相信这“又是”腾讯抄袭的一份“铁证”,你懂的……


写在最后
  就2008年外发后的效果来看,引入高清加速功能是QQ影音团队在成长期关键时刻做出的一个明智、重要而成功的决策。其中不无运气成份,但更多的是体现出了团队的集体智慧和强大的凝聚力与战斗力。就我个人而言,在那段时间内饱受压力、质疑和批评,但作为回报的是:磨练了强大的内心、厚实的脸皮,以及更多兄弟战友的帮助。
  此文献给所有QQ影音的战友,所有美好的记忆,大家一起拥有!


  (本文来源自腾讯大讲堂 djt.qq.com,转载请注明出处)