作为一个视频网站,随着B站的视频种类的增多,网站的成本压力增加,考虑到降低成本,就要选择一个超低码率的编码器。本文来自B站视频云技术部的技术专家叶天晓在LiveVideoStackCon2019北京站上的精彩分享,文章中详细介绍了B站自研的H.265软件编码器(yhevc)研发历程, 以及针对实际的点播和直播业务做的一些优化与实践。

文 / 叶天晓

整理 / LiveVideoStack

大家好,我是来自B站视频云技术部的技术专家叶天晓,今天和大家分享的主题是B站H.265编码器在直播和点播中的实践和应用。

先自我介绍一下,我初次接触视频编解码是在2004年,当时H.264协议刚刚制定完成,我的主要研究方向是H.263、264的转码以及H.264的编码。回国后我加入了国内的多家公司从事视频算法相关的工作。2018年加入B站,现任视频云技术专家,负责视频编解码团队. 目前在B站研发并上线了自研的H.265编码器(yhevc),应用于点播和直播业务。

1. 自研H.265的编码器研发的背景

这次演讲的内容分为五部分,第一部分介绍B站做自研编码器的原因,第二部分介绍做视频编码器的方法论, 从工程角度分享一些我做编码器的心得体会, 第三部分介绍一下自研编码器的现状以及应用场景。最后介绍一下编码器对直播和点播的一些特殊优化。

早期的B站不做视频转码, 即将UP主上传的视频直接分发给用户,但这种操作流程会带来很多弊端。首先, UP主的视频有很多编码标准,比如realmedia, H.263,H.264。而且相同编码标准也有各种profile(例如baseline,main, high)以及不同的level。其次, UP主的视频有各种封装格式, 例如mp4, flv, mov, mkv等等. 当用户观看不同封装, 不同编码格式的视频时,可能会出现各种播放问题,例如手机不支持某个profile或level,或者播放器对某种封装兼容不佳, 都就会导致播放卡顿、黑屏等问题。现在的B站会对绝大部分的UP主视频做转码转封装, 来规避上面所述的播放兼容问题。

1.1 B站点播业务

这两年来,B站单日用户上传量在翻倍增长,公司做了很多策略去激励UP主上传视频。2018年1月,B站推出UP主激励计划,培训UP主做出更好的视频去吸引用户。2月, B站支持60fps和6兆码率视频观看,提高了付费大会员的视频观看质量。8月, B站支持DASH技术, 做到多分辨率之间无缝切换。2018年底, B站将UP主单个视频的上传文件体积限制由4GB提高到8GB,这样可以让UP主上传更好画质的源视频, 让我们转码出来的视频质量也变得更好。2019年6月,B站在PGC支持了4K分辨率。

1.2 B站直播业务

在B站直播方面,上图这种一个1080p60fps的6兆码率的吃鸡视频会给弱网用户带来严重的卡顿,所以B站采用实时转码的方案, 将码率降低至2.5兆或以下, 提供低码率视频流, 满足各类用户的需求。

1.3 B站成本压力

B站已经从以动漫为主的小众网站,渐渐变成了视频种类包罗万象的中国版YouTube。随着B站视频的数量变多,画幅变大,时长变长,B站的成本压力也一直在快速增长, 这其中主要包括带宽成本, 存储成本,和转码算力成本.

1.4 自研H.265视频编码器的原因

H.265协议是2013年制定的, 相比H.264可以节省50%的码率,2019年市面上90%的手机都已支持H.265硬件解码。为了节省成本, B站要上H.265有三种选择:一是使用开源x265编码器,但是它的算力要求高, 转码效率低;二是云厂商转码服务,但这会导致转码方面的成本很高;三是自研编码器,也是我们最终选择的方案. 自研软件编码器需要很强的开发能力, 但它的可控性, 与业务结合的可定制性对B站业务是极为有利的, 从长远来看也是成本最低的方案. 此外,软件编码器除了编码以外,还是一个天然的数据生成器. 它能输出各种可定制的信息, 与AI技术结合做出更多的优化方案。

2. 如何做视频编码器

2.1 怎样做视频编码器

研发视频编码器可以认为是在一个三维空间做优化. 这三个维度分别是:画质、复杂度、码率。在这个优化的区域内有两个极限点: 1. 如不考虑复杂度,做一个画质最好的编码器,就可以选用H.265的参考编码软件HM. 2. 如果想做一个速度最快的编码器,则可以直接将一个解码器进行改造,可以跳过所有的高复杂度编码流程. 这两个极限点可以认为是触手可得, 并且有现成代码可用. 而一般视频编码器开发的难点则是在这两个极限点中间做优化, 这需要很大的研发投入.

2.2 怎样做视频编码器

视频编码器的研发环境主要由三个部分组成的: 视频解码器、测试架构、数据分析工具。在研发yhevc期间, 我们用HM解码器做修改,将它作为质量评析以及编码器验证的工具, 来快速定位到某个编码模块的问题。我们的测试架构是由python脚本以及数据库组成. 在测试的时候, 脚本调用编码器, 解码器, 以及数据分析工具,将各种各样的测试场景的结果固化地输出到数据库,验证新的idea是否有效. 我们的数据分析工具是由python脚本及Matlab组成,主要做数据可视化分析.

2.3 视频编码器的研发过程

视频编码器的研发过程可以大致分为三步: 首先是正确编码, 即编码器和解码器做到完全匹配;其次是高效编码,即研发优秀高效的算法来加速编码器并保证编码画质;最后是业务结合编码, 即根据业务场景及编码pipeline对编码器做优化适配。

2.4 yhevc正确编码测试方法

根据我们的经验, 正确编码可以通过两类测试来验证:一, 编码器和解码器之间的比对测试, 二,编码器和编码器自身的比对测试。在第一类测试中, 熵编码层的测试主要是验证nal层代码的正确性. 重建层的测试是验证例如IDCT及Inverse quantization代码的正确性. 预测层的测试是为了验证例如inter-prediction 及motion composition代码的正确性。在第二类测试中, debug和release、x86和Linux的测试可以验证出数据alignment的问题; 多线程和单线程、first time和second time的测试是为了验证编码deterministic的问题。

2.5.1 yhevc正确编码测试举例一

下面举三个yhevc正确编码测试的例子。

第一个例子是CUSize与TUSize相关的测试. 表格中的每一行表示一种CuTu的配置方式, 其中表格的第一行是大部分编码器使用H.265协议推荐的默认配置。我们在研发yhevc的时候不仅仅测试了这个默认配置, 还对H.265协议所允许的所有CuTu设定都做了验证测试,来提高yhevc编码器的强壮度.

2.5.2 yhevc正确编码测试举例二

第二个例子与FrameSize相关. yhevc的编码测试可使用的最小的framesize是8×8, 相比较x265所能允许的最小64x64,我们的yhevc编码器可以更早的发现bug。例子二里所列的frameSize和例子一所列出的CuTu配置可以进行交错测试,来提高yhevc编码器的强壮度。

2.5.3 yhevc正确编码测试举例三

例子三是编码器随机测试. 左图是正常编码的一个视频分析图,右图是随机模式下的视频分析图. 测试的时候, 打开yhevc编码器的debug开关, 可以将CU中的QP、模式的选择、CU Size、TU Depth、motionvector(MV) 等等都设定为随机值, 来验证编码器的强壮度。这里重点说下MV,右图中随机模式下的很多MV指向frame边界之外,这样可以验证多帧并行编码的时的同步机制是否正确。

2.6 yhevc编码器算法分类

基于复杂度和画质的变化, 编码器的算法大致可以分为四类: 一,复杂度不变画质提高的算法. 这类算法一般是预分析和码控相关算法,他们的复杂度不高,但可以大幅提高画质。二, 复杂度及画质都提高的算法. 这类算法又分两种:增加编码工具 ,例如weighted motion estimation;增加复杂度,例如 RDOQ. 三, 复杂度和画质都降低的算法. 这类就是俗称的快速算法, 可以参考很多paper,例如TU、PU、CU的快速分割策略. 四, 复杂度降低画质不变的算法. 这类算法偏工程, 例如C语言, 汇编语言优化、多线程的优化。

在不同的算力预算下, 可以从这四类的算法中抽取算法组合达到最优画质效果, 所以在这四类算法中选择最优算法集也是一个研发难点.

3. 自有编码器现状

3.1 自有编码器现状

关于自有编码器的现状,yhevc编码器是从0编写,包含40多个快速算法,80多个配置参数。我们的编码器支持主流的编码工具集以及多个preset档位, 现在已用于B站的点播及直播业务。相比x265,yhevc在相同画质下能达到3~10倍的编码速度。

3.2 yhevc编码器的点播业务性能

点播业务的测试结果: 左图PSNR体现出yhevc比x265在同码率下高0.3~0.4的PSNR;右图Speed体现出yhevc可以达到x265三倍左右的编码速度。

3.3 yhevc编码器的直播业务性能

直播业务的测试结果,可以看到,yhevc的ultrafast可以达到x265的veryfast编码质量, 并达到2倍编码速度。

3.4 yhevc编码器上线B站历程

B站在2018年底开始在点播和直播转码系统中试上线yhevc,并于2019年1月开始全量上线。B站手机用户现在看到的视频大多已采用H.265格式,现今H.265的流量占比已超过50%. 预计2019年末, B站单日H.265流量占比会达到80%左右.

4. 视频编码器针对B站直播业务的优化

4.1 视频编码器在直播中的痛点

这章介绍一下yhevc针对直播转码这个业务场景下的优化. 软件编码器在直播中有的一个很大的痛点, 即编码速度不恒定, 这主要是由于软件编码器内部的快速算法导致的。例如上图这个例子, 复杂场景下软件编码速度就会下降到60fps以下, 造成观众播放卡顿.

4.2 视频编码器在直播中痛点的因素及解决方案

这个痛点是由多因素造成: 首先, 待转码视频的复杂度差异很大,比如足球比赛和视频会议的复杂度天差地别;其次, 转码目标分辨率、码率、帧率的多种组合, 会导致对转码算力有不同的需求; 再次,转码期间CPU算力变化,比如在一个服务器上做三路直播转码时,加入第四路时,CPU之间会有一个资源的抢占问题。

这个痛点的传统解决方式有两种: 一, 针对某个码率、帧率、分区,设定一个能够保证实时编码的编码档位,但这样会引起码率的上升从而导致成本上升。二,针对每个视频都调试设定一个能够保证实时的编码档位,但这需要大量人力成本,而且有时也不一定有效。

4.3 复杂度自适应视频编码器解决直播中的痛点的方案

针对前面所述痛点,我们研发了一个复杂度自适应的视频编码器, 在编码器内部根据编码的状态以及输出fps做一个闭环控制,来控制预分析码模块和编码模块中档位的设定。

4.4 复杂度自适应的视频编码器效果

图1是复杂度自适应的视频编码器的一个效果展示, 横轴是时间轴,纵轴是编码fps。采用了自适应编码之后可以在复杂场景下降低编码复杂度档位来避免编码卡顿问题。

图2, 图3是编码质量和编码复杂度切换图. 当复杂度很高时,自适应编码器会把preset 降到ultrafast和veryfast之间;当复杂度降低时,自适应编码器会将preset切回到slow。

4.5 复杂度自适应的视频编码器效果

我们对复杂度自适应的视频编码器也进行状态监控,可以对每一路视频获取五个信息:平均preset、实际帧率低于目标帧率70%的次数、实际帧率低于目标帧率50%的次数、平均psnr、平均ssim。

5. 视频编码器针对B站直播业务的优化

5.1 多分辨率转码流程

5.2 共享1pass算法的多分辨率转码流程

5.3 共享1pass的视频编码器设计思路

最后介绍一下视频编码器针对B站点播业务的优化. 由于我们的点播使用多分辨率的2pass编码. 我们经过研发, 发觉首先对720p做一个1pass的中间文件,然后使用这个文件做2pass的多分辨率转码可以降低整个编码流程36%的复杂度.

6. 未来计划

我们下一步的计划有: 机器学习和编码器结合, Content based video encoder, 新编码格式AV1、VVC, 视频前后处理技术, 等.

我们准备继续加大研发投入, 用更好的编解码技术给B站用户提供更佳的观看体验。

LiveVideoStack 秋季招聘

LiveVideoStack正在招募编辑/记者/运营,与全球顶尖多媒体技术专家和LiveVideoStack年轻的伙伴一起,推动多媒体技术生态发展。同时,也欢迎你利用业余时间、远程参与内容生产。了解岗位信息请在BOSS直聘上搜索“LiveVideoStack”,或通过微信“Tony_Bao_”与主编包研交流。

哔哩哔哩H.265编码器在直播和点播的实践和应用相关推荐

  1. H.265视频EasyPlayer播放器点播FLV不断加载,如何处理?

    EasyPlayer视频流媒体播放器属于高开放度.高兼容性.高灵活性.可支持H.264/H.265视频编码格式的播放器,为了满足用户的个性化需求,EasyPlayer具备多个版本,如EasyPlaye ...

  2. HEVC/H.265硬件编码器实现杂谈

    国际视频编码标准HEVC已经发布两年有余,市场上关于支持HEVC的硬件也日益涌现,本文借鉴了各方面资源做了综合与概述,给出了HEVC硬件编码器实现的基本方法等重要网络资源. 一.系统设计要点 对于HE ...

  3. LEADTOOLS Multimedia SDK更新:改进RTSP和H.265/H.264的硬件加速

    2019独角兽企业重金招聘Python工程师标准>>> LEADTOOLS Multimedia SDK此次更新意在改进实时流协议(RTSP)和H.265和H.264编解码器中的硬件 ...

  4. iPhone鼎力支持 H.265编码技术及画质PK

    ● H.265(HEVC)编码技术解析 具体的对比测试之前,我们需要明白什么是H.265视频编码技术.H.265编码技术由中国华为公司主导,华为拥有H.265编码最多的核心专利技术,2012年8月爱立 ...

  5. 什么是HEVC?解释了高效视频编码,H.265和4K压缩

    什么是HEVC?解释了高效视频编码,H.265和4K压缩 高效视频编码(HEVC),也称为H.265,可以通过蓝光最佳视频压缩方法实现两倍的压缩.但它是如何工作的,是否足以让我们看到更好看的4K内容? ...

  6. H.264视频编解码器与H.265编解码器区别

    H.264编解码器与H.265编解码器介绍: H.264编解码和H.265编解码都是视频编码的格式.相比H.264,H.265能在有限带宽下传输更高质量的网络视频,也就是说只需原先H.264编码的一半 ...

  7. 通过WebAssembly在移动端解码H.265

    本文转自淘宝技术,文章详细介绍了如何通过WebAssembly在移动Web端实现H.265解码,既享受到了H.265更高的编码效率,又实现了在多种移动端浏览器上兼容.未来,通过WebAssembly还 ...

  8. Web端H.265播放器研发解密

    音视频编解码对于前端工程师是一个比较少涉足的领域,涉及到流媒体技术中的文本.图形.图像.音频和视频多种理论知识的学习,才能够应用到具体实践中,本团队在多媒体领域深耕两年多,才算是有一定产出,我们自研w ...

  9. 干货:H.265编码RTMP推流直播摄像头

    了解直播行业的同仁们都知道,前端采集的摄像机码率越小,整个直播链路成本就越小,而且给客户的直播体验更好,因为码率越小,占用的上行带宽越少,服务器存储成本越小,客户端播放的视频就越流畅. 叁陆伍视讯,成 ...

  10. Web端H.265播放器研发解密 1

    音视频编解码对于前端工程师是一个比较少涉足的领域,涉及到流媒体技术中的文本.图形.图像.音频和视频多种理论知识的学习,才能够应用到具体实践中,本团队在多媒体领域深耕两年多,才算是有一定产出,我们自研w ...

最新文章

  1. excel文件无法打印提示内存不足_三星打印机无法扫描文件?来看看她的详细解决办法...
  2. 大学计算机一条指令的执行过程实验,实验四 一条指令的执行过程
  3. node.js Web应用框架Express入门指南
  4. SDN和物联网促使网络产生巨大结构性变革 IoT是企业增收关键
  5. mysql编译安装 rpm安装_Linux常用工具小结:(2) Mysql的rpm安装和编译安装
  6. 实现用户名密码登陆,输入错误3次后锁定用户
  7. 又一个国家5G基站被焚烧,这次理由是5G影响人类健康?
  8. particle filtering---粒子滤波(讲的很通俗易懂)
  9. 发的楷体怎么写_小学生硬笔书法怎么练
  10. en55032最新标准下载_欧盟CE认证EN55032标准
  11. python数据分析案例简单实战项目(一)--供应链销售数据分析
  12. 服务器国产linux操作系统,国产linux操作系统适于做服务器系统的有哪些
  13. 电脑wps可以语音录入吗_懒人用技巧—使用Word录音实现语音录入文字(口读文字,Word为您写文字)...
  14. java批量打印标签_java批量打印
  15. 孙玉 计算机教授,孙玉
  16. creator 物理画线
  17. 用python画微信表情_【一点资讯】“裂开了,苦涩了,翻白眼”!我用Python画出微信新出的表情包 www.yidianzixun.com...
  18. 原生态水平和垂直拉伸的JQUERY插件
  19. 无需安装的Linux Live CD--第二篇:实战Knoppix
  20. SQL 招聘网站岗位数据分析

热门文章

  1. C# panel控件实现鼠标滚轮滚动拖动滚动条
  2. 网易有道最新力作 有道词典笔3 结构拆解
  3. 开发核酸检测软件方案书
  4. linux添加变色龙引导,变色龙引导工具下载
  5. 为什么每个阿里新人都要上“百阿”?
  6. PMP练习199题答案解析版
  7. 预见2022 | 吴晓波年终秀 附PPT
  8. 记账系统推荐金蝶精斗云_金蝶精斗云财务软件免费版本在哪里体验?
  9. flash 钟表 钟表代码
  10. MTK 增加Factory模式命令