本文来自时任金山云算法总监朱政在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当前的性能对比:

性能摘要汇总

以Veryfast为例性能摘要

破茧而出

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

1, 重构与推倒重来

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

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

2, 工程化追求极致

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

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

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

3, 算法

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

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

4, 测试永不停歇

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

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

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

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

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

痛点与解决之道

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

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

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

未来展望

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

朱政:金山H.265诞生记相关推荐

  1. H.265在QRTC场景的落地运用

    点击上方"LiveVideoStack"关注我们 近年来,伴随着采集渲染设备终端发展,人们对视频质量的需求也在日益"膨胀",更高的分辨率:4k/8k,更宽泛的亮 ...

  2. AV1为何有信心打败H.265?

    今年一月的时候,开放媒体联盟(AOM,Alliance for Open Media)举行了董事会议,对AV1编解码器的发布日期进行了讨论,Netflix和YouTube能够在2018年初开始使用AV ...

  3. H.265编码和H.264编码的区别

    目前很多摄像机采用了H.265的编码标准,H.264编码的摄像机逐渐减少,为什么H.265会流行?H.264和H.265有何不同? 一.什么是H.265 H.265是ITU-TVCEG继H.264之后 ...

  4. 2019领克车展 Max Co币机诞生记

    领克车展 Max Co币机诞生记 网上拿张现场图 先引用一篇时下2019上海车展文章的段落 上海车展新车满满,领克展台玩起了"骚操作" https://chejiahao.auto ...

  5. 视频格式那么多,MP4/RMVB/MKV/AVI 等,这些视频格式与编码压缩标准 mpeg4,H.264.H.265 等有什么关系?...

    我通过引入下面三个概念来介绍视频压缩知识.分别是:视频文件格式(简称:文件格式),视频封装格式(简称:视频格式),视频编码方式(简称:视频编码) -- 一,视频文件格式(简称:文件格式):我们知道Wi ...

  6. 【笔记】H.265/HEVC 视频编码(四)——预测编码

    预测编码时视频编码中的核心技术之一.对于视频信号来说,一幅图像内邻近像素之间有较强的空间相关性,相邻图像之间有较强的时间相关性.因此采用帧内预测和帧间预测的方式,去除视频的空域和时域的相关性.视频编码 ...

  7. 二、对HEVC/H.265视频编解码器进行隐写的基本思路

    二.对HEVC/H.265视频编解码器进行隐写的基本思路 概述 1.视频隐写的基本思路 2.视频隐写的举例说明 3.结尾 概述 其实对视频隐写.图像隐写或是音频隐写,基本的思路都是一样的:读取原始图像 ...

  8. 2.H.265/HEVC —— 帧内预测

    在H.265/HEVC中,35种预测模式是在PU的基础上定义的,而具体帧内预测过程的实现则是以TU为单位的.编撰规定PU可以以四叉树的形式划分TU,且一个PU内所有TU共享同一种预测模式的形式划分TU ...

  9. 修改Chromium源码实现HEVC/H.265 4K视频播放

    本文作者:蔡斯杰,字节跳动互娱前端业务负责人 公司内容生产端最近(2019/10)在推广 HEVC/H.265 的使用,这种视频编码格式对比H.264更加先进且节省带宽,虽然先进但是因为专利费的问题, ...

最新文章

  1. Ubuntu 忘记root登录密码的解决办法
  2. VTK:Video之MPEG2
  3. 关于Webview如何自动登录保存登录信息
  4. hibernate乐观锁_Hibernate Collection乐观锁定
  5. django-模型类的查询方法
  6. java Random类和Math.Rondom
  7. 如何给linux安装yum,linux如何安装yum
  8. gbq6什么软件能打开_各种格式的文件用什么软件打开
  9. 【ANSYS命令流】结构分析单元与材料模型
  10. 班章管家分享五一假日什么理财产品会有收益?五一假日理财攻略
  11. 自建idea授权服务器
  12. Jmeter 中断言操作
  13. 人工智能的隐私保护探讨
  14. 如何恢复电脑的administrator账户
  15. 我见过最通俗易懂的快速排序过程讲解,转自《坐在马桶上看算法:快速排序》
  16. 视频话题识别与跟踪 - demo 【问题总结1.1-视频处理】
  17. 《音乐达人秀:Adobe Audition CC实战222例》——1.2 从双卡录音机到多轨录音软件...
  18. MATLAB读raw,dat文件代码
  19. 【ESP32系列开发】ESP32-PICO-D4 使用双核
  20. 扩视机器视觉 | 机器视觉培训C#halcon

热门文章

  1. Linux下安装Python3.6和第三方库
  2. 深入理解javascript 中的 delete(转)
  3. CentOS安装scrot记
  4. [Effective C++读书笔记]005_条款05_了解C++默默编写并调用哪些函数
  5. Telerik Reporting之生成报表
  6. frame页面地址转向跨域解决方法
  7. CodeForces - 1607D Blue-Red Permutation(贪心)
  8. 牛客多校2 - Fake Maxpooling(线性递推gcd+单调队列)
  9. 牛客多校 - B-Suffix Array(后缀数组)
  10. oracle 10g gateway 安装操作,Oracle 10g RAC启动节点报错 Default gateway is not defined