朱政:金山H.265诞生记

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/81843955 ...
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/81843955

640?wx_fmt=jpeg


本文来自时任金山云算法总监朱政在LiveVideoStackCon 2017上的分享,并由LiveVideoStack整理而成。朱政阐述了金山云265方案(KS265)的演进之路,以及他们如何一步步在工程,算法和测试上完善金山云265。目前朱政已成为杭州微帧信息科技的创始人,继续在编解码这条路上探索极致。


文 / 朱政

整理 / LiveVideoStack


概览


金山云265大家或多或少都听过,因为其在某一方面确实有做的比较优秀。作为底层开发的团队,首先我会更加关注代码本身,其次会尽量多和大家分享一些干货。由于我们的技术不是开放和开源的,所以本次会根据金山云265的演进之路来分享一些偏宏观的经验心得和方法。


分享的主要内容为:


1,序章:致敬X264

2,金山云265破茧而出

3,痛点与解决之道

4,未来展望


序章:致敬X264


X264编码器的优秀应该是大家公认的,它号称是视频编码的守望者。X264虽然是一个开源的编码器,但几乎商用的编码器都做不到它那么好。它创造了许多众所周知的工具和名词,如Mbtree,CRF,2PASS。在国内外对X264的使用非常广泛,它繁荣了H.264的内容和生态。另外,如果要做一款非常好的编码器,并具有一定的速度和压缩性能的基础,是需要花很多年时间和精力的,而X264就极大地解放了视频编码底层开发的劳动力。


在这里先展示一下金山云265当前的性能对比:

 

640?wx_fmt=png


性能摘要汇总


640?wx_fmt=png


以Veryfast为例性能摘要


破茧而出


在最开始起步的时候,我们设定的目标就是要与X264复杂度对标,思考如何在保证HEVC高压缩比的情况下,速度和功耗无限接近X264。起初想的就是要从零开始和从实时档次开始做。接下来会给大家介绍我们这四年来的主要工作,会从以下四个方面来介绍:重构与推倒重来,工程化追求极致,算法,测试。


1, 重构与推倒重来


如果我们考虑从HM来改版的话,有一个好处就是工具比较全,但它的缺陷就在于重构优化难以驾驭,要想做实时就非常的难。所以我们就要从零开始,第一次从零开始,首先就要选取一些工具来实现,包括一些压缩性能非常好的复杂工具都需要精心设计。然后就是效仿x264的快速档,不做RDO。但第一次做出的版本,速度很不理想,和x264相比,Superfast档的差距非常大,压缩性能也没有多大的优势。因此,果断推倒重来,进行第二次从零开始。


640?wx_fmt=png


积累之前的经验教训,对通篇更加熟悉,进行第二次从零开始,重新优化数据结构和算法流程,更加专注于极致契合极限编程,也实现更多的工具。


640?wx_fmt=png

 

2, 工程化追求极致


在工程方面,我们投入了很多的精力。我们会进行快速迭代,不断试错,找到突破口;由于当时团队人数不是很多,因此采用小团队结对编程,每个人都要熟系所有的代码;每次都要单元测试先行,严格执行Code Review,每一处代码和数据结构都要精益求精;解码器也要追求极限速度;宗旨就是,不怕麻烦,只怕性能不够,因此几乎是把95%的精力都投入到5%的性能提升上。


下面给大家举个工程优化的例子:


 640?wx_fmt=png640?wx_fmt=png

 

解码器作为编码器的副产品,也耗费了大量的精力。现在已经做到了比OpenHEVC平均提速2倍,并且全标准支持,鲁棒性强。


640?wx_fmt=png


3, 算法


由于不开源的原因,也就不能给大家分享核心的算法流程,但会在宏观上为大家介绍一下。在算法设计上,我们设定了高目标,一个月一次迭代。目前快速算法约70个,算法相关的配置参数约200个,配置参数应用到API接口的配置方法可能很多用户不知道,所以我们没有完全开放。在做快速算法的过程中,会往里面不断加入好的工具,为了将H.265的压缩性能发挥出来,所以它的一些压缩工具都要尽量用上。下面就是用到的一些快速档次工具集:


640?wx_fmt=png


整个算法设计过程就是:设计和实验算法,调试bug和不匹配,实现新工具和新Feature优化代码。下面展示快速算法不同档次性价比:


640?wx_fmt=png


4, 测试永不停歇


测试一方面可以分为性能测试和正确性测试两方面,另一方面也可以分为单元测试,CI测试,算法测试,版本迭代测试。


性能测试就包括了复杂度的性能和压缩性能,具体分为以下方面:


640?wx_fmt=png


正确性测试也是涵盖多方面的,具体分为以下方面:


640?wx_fmt=png


讲完上面四个方面,下面就来介绍一下金山云265的发展里程碑:


640?wx_fmt=png640?wx_fmt=png


目前金山云265编码器支持的一些Feature:


640?wx_fmt=png 

痛点与解决之道


金山云265最开始的困难就是研发困难,包括复杂度高,浏览器Flash,JS不支持等,经过我们努力也想出了一些解决的办法。


640?wx_fmt=png


在用户方面,经常会存在一些难点,比如播放体验差,带宽成本高等,这些使用我们的金山云265就可以得到改善。另外客户经常也会有一些顾虑,我们也都提供了相应的解决办法。


640?wx_fmt=png


下面就给大家展示一个金山云产品解决方案,这是一个包含云转码,客户端SDK,全面覆盖直播,点播,短视频的解决方案:


640?wx_fmt=png


未来展望


640?wx_fmt=png


接下来,要做的事情,就是解决客户的多样化需求和本身编码器不平衡,以及不充分的研发之间的矛盾,所以会从之前着重于实时档,到现在的更关注慢速档,争取在离线转码上面有更好的压缩效率,在中低码率上面也会更多的关注高码率。另外就是在基础设施上面会更多的关注上层建筑,这里只是一个自己的定义,是代码内部的,上层建筑就包括像码控, 场景调优,主观调优,自适应量化,就像阿里云他们做的窄带高清的事情。另外我们还会尝试极致压缩,就是用深度学习在符合现有编码标准的框架里测试,是否能够获得更好的压缩性能。



640?wx_fmt=jpeg

相关文章
|
编解码 视频直播 UED
山东布谷科技直播软件源码探索高效、稳定直播传输的技术介绍:流媒体传输技术
直播软件源码流媒体技术的实现部分参考代码def video_capture_thread(): cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() cv2.imshow('Live', frame) if cv2.waitKey(1) == ord('q'): break
山东布谷科技直播软件源码探索高效、稳定直播传输的技术介绍:流媒体传输技术
|
编解码 算法 视频直播
服贸会在京举行|淘宝直播携手佳能佳直播联合发布《电商直播高画质开播指南》让品质直播触手可及
服贸会在京举行|淘宝直播携手佳能佳直播联合发布《电商直播高画质开播指南》让品质直播触手可及
225 0
服贸会在京举行|淘宝直播携手佳能佳直播联合发布《电商直播高画质开播指南》让品质直播触手可及
|
机器学习/深度学习 存储 编解码
亮相 LiveVideoStackCon,透析阿里云窄带高清的现在与未来
2021.4.16-4.17,阿里云视频云亮相 LiveVideoStackCon 音视频技术大会上海站,带来三场不同视角的主题演讲,并与众多行业伙伴一同交流。在 “编解码的新挑战与新机会” 专场,视频云的资深技术专家深度分享了 “窄带高清” 技术演进思路。
亮相 LiveVideoStackCon,透析阿里云窄带高清的现在与未来
|
编解码 UED
一天超2000次,阿里如何打响音视频超时空战役?
在阿里,音视频会议已经成为跨地区沟通、开会以及招聘的首选方式。
1628 0
|
新零售 云安全 安全
【媒体声音】从双十一看阿里云安全的“创世纪”——采访阿里云安全掌门人肖力有感
“神说要有光于是就有了光。”在双十一采访了阿里云安全掌门人肖力之后,忽然对这句话有了全新的认识。从肖力的介绍中我们不难体会到,与云计算相伴而生的阿里云安全诞生的必然性,云的先天基因赐予它“原生的神力”,从最初单纯的攻击威胁防御,到全面智能化的态势感知,秒速级的应急响应和处理的能力,网络安全让阿里云安全成为众望所归。
2382 0
|
机器学习/深度学习 人工智能 编解码