VP9与H.265的6个不同点

Wesley13
• 阅读 783

VP9与H.265的6个不同点

点击头图,报名直享优惠

正文字数:3764  阅读时长:9分钟

视频直播是很复杂的。在互联网上广播和传输数据流的整个过程涉及一系列格式和可以采用的各种方法。其中,一个重要的组件是用于对媒体文件进行编码和解码的编解码器。编解码器还定义了可用于引导数据流/进行流媒体传播的工具类型。

文 / red5pro

原文链接:https://www.red5pro.com/blog/6-points-of-comparison-for-vp9-or-h265/

先来了解一下视频在互联网上传输需要经历哪些环节。它必须先使用麦克风和摄像机捕捉音频与视频。然后,原始数据必须压缩(编码)到编解码器中,通过互联网连接(使用传输协议)广播,发送到某种服务器端解决方案(server-side solution)(通常是CDN或一个基于云的集群(cloud-based cluster),如Red5 Pro),然后解压(解码),最终供用户观看视频。

目前有相当多的编解码器正在被使用,包括VP8/9,H.264(AVC),H. 265(HEVC)和AV1。今天这篇文章将主要关注VP8/VP9。我们把VP8与VP9归为一类,因为它们在许可方面(regards to licensing)相似,且VP9是由VP8的演进。

尽管这篇文章主要关注VP9和H.265,但最重要的问题是使用什么样的编码器最好。 最后,我们将说明为什么H.264是低延迟实时流媒体(low latency live streaming)的一个更有效的选择。

VP9

VP9编解码器是由Google开发的一款免费的开源视频编码标准。它是VP8的后续产品,最初用于压缩YouTube上的超高清内容,因为它提高了其前一代的编码效率。最初的VPX解编码器来自于2010年被Google收购的On2技术公司。Google随后将该编解码器源。

H. 2 65

H.265编解码器,或称高效视频编码(HEVC),是由视频编码专家组(VCEG)和动态图像专家组(MPEG)的联合开发出来的。它于2013年4月被批准为H.264(也被称为高级视频编码(AVC))的官方后续产品。它提高了H.264的压缩效率,并且将视频的大小减小了大约50%。

H .264

如上所述,H.264或是AVC是目前最广泛使用的视频编辑解码器。截至2019年9月,有91%的视频行业开发者使用它。正如H.265一样,H.264也是由动态图像专家组(MPEG)作为对以前标准的改进而开发的,旨在通过互联网有效地传输压缩的高质量视频。

H.264受多项专利保护,并得到了MPEG-LA组织的授权。然而,Cisco System在2013年向公众提供了一种广泛使用的免费开源编码器和openH264解码器。换句话说,Cisco为我们所有人使用的专利许可证付费。这反过来创造了H.264编解码器的广泛采用。OpenH264在所有的网络浏览器中出现了。

上文我们已经介绍了编解码器,让我们来比较一下它们之间的不同。我们列出了6个关键因素来评估每个编解码器。

编码质量

VP9和H.265在这一类上没有太大区别。无论使用哪种编解码器,视频看起来都很好。然而,当比特率较高时,H.265的性能略优于VP9,反之亦然。

为了判断图像质量,我们可以使用SSIM(结构标准指数测量),如下图所示。当在因特网上广播一个流(broadcasting a stream)时,压缩和扩展(编码和解码)流中包含的可视数据的过程可能会导致轻微失真(slight distortions),因为解码器会外推数据( decoder extrapolates the data )以显示它。因此,SSIM本质上是编码和解码后衡量传输的图像在编码和解码后的精确度。

VP9与H.265的6个不同点

图1:比较libvpx(VP9)、x264(H.264)和x265(HEVC)的质量/比特率图。(图片来源:https://blogs.gnome.org/rbultje/2015/09/28/vp9-encodingdecoding-performance-vs-hevch-264/)

‌‌

然而,与H.264相比,有一点不同。

VP9和H.265能够提高压缩的部分方法是通过使用larger macroblocks。macroblocks是图像或视频的处理单元,包含要显示的图像像素。H.264使用16×16宏块,而PV9和H.265使用64×64宏块。这些宏块经过一系列称为“帧内预测方向(intra-prediction directions)”的计算,将这些宏块重建为相同的原始图像,只是在非关键区域的细节略有减少。这使得VP9和H.265能够提高效率,因为不太详细的区域(如天空或图像的模糊背景)不会被分解成更小的单元。这些区域中丢失的细节不会显著降低图像的整体质量,因为其重要部分被渲染得更加详细。还应该注意的是,随着比特率的增加,AVC(H.264)和其他两种编解码器之间的质量差异会变小。

VP9与H.265的6个不同点

图片来源:https://www.macxdvd.com/mac-dvd-video-converter-how-to/h265-vs-h264.htm

H.264会产生较差的图像,特别是在较低的比特率下。当比较以相同比特率运行的图像时,VP9和H.265都比用H.264生成的图像更详细和更清晰。换句话说,为了产生相同质量的VP9或H.265图像,H.264需要以更高的比特率运行。然而,质量上的差异虽然可以察觉,但并不一定是一个直接的问题。为了更客观地衡量这一点,我们可以看看SSIM,它显示H.264的结果非常接近VP9和H.265。因此,虽然H.264在图像质量方面可能不如h.264,但这种差异不足以克服下一节中详细介绍的大的权衡(big tradeoff)。

我们还应该指出其他因素,如改进的亚像素插值(sub-pixel interpolation)和运动矢量参考选择( motion vector reference selection )(运动估计motion estimation)也提高了图像质量。这是因为它们有助于预测电影中下一帧会是什么样子。这些都是相当复杂的概念,值得他们在自己的文章中讨论,所以我们到此为止。

优胜者:平局

Encoding Time

为了达到更高的压缩率,VP9和H.265需要执行更多的处理。所有这些额外的处理意味着它们需要更长的时间来编码视频。这将对你的延迟造成损害,因为所有额外的处理时间都会延迟视频的播放。除了其他因素之外,延迟对于确保你的实时视频流能够提供交互式体验非常重要。

VP9与H.265的6个不同点

图2:将编码时间作为比特率改进的因素,比较libvpx(VP9)、x264(AVC)和x265(HEVC)图片来源: https://blogs.gnome.org/rbultje/2015/09/28/vp9-encodingdecoding-performanc e-vs-hevch-264/

那么,上面的图表到底是什么意思呢?

此图在水平轴上显示了编码时间(以秒为单位)。纵轴显示了比特率的改进, 它将SSIM和比特率的组合与设置为x265@veryslow的参考点进行比较。参考点是为什么x264没有超过0%的原因。

这张图告诉了我们什么?

VP9和H.265(如广告宣传的那样)比H.264好50%。但它们的速度也慢10到20倍。如果你追循x264(AVC)的蓝线,你将看到对于大多数比特率基准点,它始终低于其他两条线。不仅如此,绿色(H.265)和橙色(VP9)线在它们的曲线中很早就与H.264相交。这意味着每帧速率的秒数将开始急剧增加,并真正降低你的流性能(stream performance.)。因此,虽然VP9和H.265显示出更好的压缩率,但它以非常高的编码时间为代价,这将大大增加延迟。Waterloo University的这项研究对编码时间和编解码器的比较进行了更深入的分析。 (参考资料: https://ece.uwaterloo.ca/~w238liu/2019comparative/paper/iciar2019cc.pdf

优胜者:H.264

中央处理器消耗

正如上一节所述,VP9和H.265都必须比H.264运行更多的压缩算法(compression algorithms),这将增加它们的CPU使用率。即使在完全优化的情况下,实时流媒体也是一个CPU密集型的过程,因此提高已经很高的使用率将是一个问题。然而,有一些东西可以缓解这一点:硬件支持。专用芯片组将降低CPU消耗。

目前H.265享受更多的硬件支撑,包括Windows10(可下载或通过Inter Kaby Lake或更新的处理器)、Apple(iOS 11)和Android(Android 5.0)设备。虽然大多数移动设备支持VP9,但大多数其他系统不支持。如果没有直接的硬件支持,VP9编码过程将会限制CPU,消耗大量资源,缩短电池寿命,并可能增加延迟。

我们将在下一节中介绍H.264享有广泛的支持,而且不会像VP9或H.265那样消耗CPU。

优胜者:H.264,H.265紧跟其后。

Adoption and Browser Implementation

为了使用编解码器,需要有硬件 的 支持 或软件编码器。 H .265的采用率很低,这在很大程度上是由于专利许可。 H .265有四个相关的专利池: HEVE Advance、MPEG LA、Velos Media和Technicolor。 这使得它更加昂贵,也阻碍了它的广泛应用,从而限制了它仅限于特定的硬件编码器和移动芯片组( mobile chipsets)。 只有Edge、Internet Explorer和Safari支持 H .265硬件编码。 即使到那时运行浏览器的设备仍然需要支持 H .265硬件编码。 即使在正确实现的浏览器中支持 H .265,WebRTC也往往无法正常工作。 没有WebRTC的支持,实现实时延迟会是困难的。

VP9是免税版和开源的,这为其更广泛的采用扫清了道路。主要浏览器Chrome、Firefox、Edge以及操作系统Windows10、Android 5.0、iOS 14和macOS BigSur都支持该功能。由于WebRTC支持VP9,它也可以直接在浏览器中工作。也有传言说Safari浏览器的支持也即将到来。

尽管H.264有一项与之相关的专利,正如我们前面提到的,2013年思科对H.264实现进行了开源,并以free binary download的形式发布了它。这对H.264的广泛应用是一个巨大的推动。因此,H.264得到了所有浏览器、笔记本电脑和移动设备的支持。

优胜者:H.264与VP9之间缩小了差距。

带宽节省

提高压缩率和减小文件大小的最大好处是在广播时消耗更少的带宽。这意味着网速较慢的用户仍然可以观看更高质量的视频流。

那么,哪种编解码器能产生更好的压缩效率来创建一个更小的视频呢?

根据Nettfix的一项测试,H.265的表现比VP9高出约20%。尽管其他的测试产生了不同的结果,但他们都得出结论,H.265创建了更小的文件大小。根据所使用的客观度量标准( objective metric ),H.265比VP9节省了0.6%至38.2%的比特率。

然而,虽然消耗更少的带宽是有用的,但还有其他一些因素需要考虑。全球固定宽带连接的平均上传速度为42.63 Mbps,这意味着尽管H.264要求更高的连接速度,大多数地方也能支持4K流媒体。尽管移动设备的平均上传速度低得多,为10.93 Mbps,但它们仍然可以支持1080p流。

这张来自Boxcast的图表显示,全球平均连接速度肯定能够满足所有分辨率级别的上传速度要求。注意:我们无法找到一个比较所有三种编解码器的图表,但是VP9应该介于H.264和H.265之间。

VP9与H.265的6个不同点

图片来源:https://www.boxcast.com/blog/hevc-h.265-vs.-h.264-avc-whats-the-difference

此外,还有一些方法可以配置你的流媒体应用程序,以满足网速较慢国家的用户。您可以通过添加ABR和代码转换支持来实现这一点。ABR(自适应比特率)将修改比特率,以提供最佳的体验。代码转换将广播分成多个质量,这样客户端可以根据可用带宽请求最佳质量。

你可能会想“如果移动设备卡在2或3G连接上怎么办?”幸运的是,手掌大小的设备不需要传输最高分辨率就能看起来很好。720甚至480依然会显示出不错的质量。

“While bandwidth consumption may not matter as much to a consumer, it must be acknowledged that companies will save money in regards to bandwidth costs if they stream with VP9 or h.265. The savings come from the smaller files which means they will not pay as much for more data streaming over CDN or cloud networks. While that is certainly nice, it is only at really high-resolution settings such as 4K that halving the data consumption makes a substantial difference.”

虽然带宽消耗对消费者来说可能不是那么重要,但必须承认的是,如果公司使用VP9或H.265进行传输,就会节省带宽成本。这些节省的费用来自于较小的文件,这意味着他们不用为通过CDN或云网络传输上的更多数据流支付那么多的费用。这当然很好,但只有在像4K这样的高分辨率环境下,数据消耗减半才会产生实质性的影响。

当然,无论什么规模,省钱当然是重要的。这就引出了我们的下一个观点,它将呈现两个世界的最佳状态:相同的性能下更好的压缩。

优胜者:H.265

LCEVC回避了整个争论

LCEVC(低复杂度增强视频编码)为所有编解码器增加了大约40%的压缩率。这是因为它是一个额外的处理层,可以与现有和未来版本的MPEG或其他编解码器(如VP9和AV1)一起工作。正如我们在上一篇文章中所提到的,LCEVC对视频流技术有着巨大的潜在影响。在不改变所有现有协议的组成的情况下,LCEVC可以使它们本身更有效。

从目前的情况来看,内容提供商似乎能够使用支持LCEVC的软件或基于硬件的编码器,并结合Red5 Pro跨云平台来解锁实时流,尽管它们是用处理密集型视频格式构建的。根据使用的核心编解码器的不同,这不仅适用于4K,最终也适用于8K UHD,还适用于为360度观看、虚拟现实和其他创新设计的格式。

LCEVC被广泛采用背后的驱动力是:几乎任何设备都可以支持thin LCEVC客户端,这些客户端可以独立下载到观众的设备上,或者嵌入到服务提供商的app player中。通过它的HTML5 JavaScript实现, LCEVC也支持插件式免费浏览器支持。这意味着广泛的实现应该是相当简单的。

什么是实用?

在考虑了这里列出的一切之后,AVC/H.264由于其广泛的采用和快速的编码速度成为目前的最佳选择。虽然提高压缩和视频质量是重要的考虑因素,但目前的权衡太严重了。具体来说,高编码时间和大量的CPU消耗对于直播视频来说是非常糟糕的。

也就是说,考虑到VP9是免费的,而且还享有广泛的设备支持,一旦更快的软件或硬件编码器被创建出来,在不久的将来它将是一个可行的选择。在遥远的将来,AV1最终将会取代VP9,但考虑到它目前所面临的超高编码时间,在它准备好广泛使用之前,还需要进行大量的简化工作。当然,LCEVC可能会绕过更改编解码器以获得更好压缩的整个问题。也许它只是H.264和AV1之间的一座长存的桥梁。

尽管如此,AV1仍将取代H.264、H.265和VP8/9。随着视频消费的增长,带宽限制的减少将使发送用户正在寻找的高质量视频变得更加容易。这对于远离有线连接、更依赖手机连接的发展中地区来说尤其如此。它背后的财团有所有主要的参与者参与,而且是免版税的。目前, AV1缺乏实时编码器是阻碍AV1发展的主要原因。一旦它们变得广泛可用,AV1(特别是当与LCEVC配对使用)将是前进的方向。

LiveVideoStackCon 2020北京站日程官宣

10月31日-11月1日,今年唯一的一场线下LiveVideoStackCon如约而至。连续两天的技术干货,60余场精彩演讲以及众多热门话题圆桌讨论。大会日程现已上线,选择你中意的内容,确认好时间,带上你的小伙伴一起来High!

VP9与H.265的6个不同点

9月30日前购票可享受九折优惠

https://bj2020.livevideostack.cn/schedule

点击_【阅读原文】_了解更多日程信息

本文分享自微信公众号 - LiveVideoStack(livevideostack)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
2个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
8个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这