VP9 或 H.265 的 6 个比较点
zhezhongyun 2025-01-21 23:08 82 浏览
直播很复杂。广播流和通过 Internet 传输流的整个过程涉及一系列可以采用多种格式的方法。一个重要的组件是用于媒体文件编码和解码的编解码器。编解码器还定义了可用于进行流式传输的工具类型。
大大简化流程;为了让视频在 Internet 上进行流式传输,它必须首先使用麦克风和摄像头捕获音频和视频。然后,必须将原始数据压缩(编码)到编解码器中,通过互联网连接广播(使用传输协议),发送到某种服务器端解决方案(通常是 CDN 或 Red5 Pro 等基于云的集群),并随后解压缩(解码)以供订阅者最终观看视频。
目前使用的编解码器有很多,包括 VP8/9、h.264 (AVC)、h.265 (HEVC) 和 AV1。
虽然这篇文章主要关注 VP9 与 h.265,但最重要的是什么是最好的编解码器。最后,我们将介绍为什么 h.264 目前是低延迟直播流媒体更有效的选择。
什么是VP9?
VP9 编解码器是由 Google 开发的免版税、开源的视频编码标准。作为 VP8 的后继产品,它最初用于压缩 YouTube 上的超高清内容,因为它提高了其前身的编码效率。原始 VPX 编解码器来自于 2010 年被 Google 收购的On2 Technologies。Google随后开源了该编解码器。
什么是 h.265?
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 组织授权。然而,思科系统公司在 2013 年向公众提供了一种广泛使用的免费开源编码器和解码器,称为openH264。换句话说,思科为我们所有人使用的专利许可付费。这反过来又创造了 h.264 编解码器的广泛采用,并且 openH264 的实现出现在所有 Web 浏览器中。
我们汇总了评估每个编解码器的 6 个关键因素的列表。
编码质量
VP9 和 h.265 在这个类别中没有太大区别。使用任一编解码器,视频看起来都不错。然而,h.265 略优于 VP9,当比特率较高时反之亦然。
为了判断图像质量,我们可以使用如下所示的SSIM(结构标准指数测量)指标。在互联网上广播流时,压缩和扩展(编码和解码)流中包含的视觉数据的过程可能会导致轻微失真,因为解码器会推断数据以显示它。因此,SSIM 本质上测量了传输的图像在编码和解码后的准确度。
1:比较libvpx(VP9)、x264(h.264) 和x265(HEVC) 的质量/比特率图。
然而,与 h.264 相比,差异更大一些。
VP9 和 h.265 能够增加压缩的部分方式是通过使用更大的宏块。宏块是图像或视频的处理单元,包含要显示的图像的像素。h.264 使用 16 x 16 宏块,而 VP9 和 h.265 使用 64x64 块。这些宏块经过称为“帧内预测方向”的计算系列,将这些宏块重建为相同的原始图像,只是在非关键区域的细节略少。这使得 VP9 和 h.265 能够提高效率,因为图像的天空或模糊背景等不太详细的区域不会被分解为更小的单元。这些区域中丢失的细节并不会显着降低图像的整体质量,因为重要部分的渲染更加详细。还应该注意的是,当您增加比特率时,
H.264 产生较差的图像,尤其是在较低比特率时。比较以相同比特率运行的图像时,VP9 和 h.265 都比使用 h.264 生成的图像更详细、更清晰。换句话说,为了产生与 VP9 或 h.265 相同质量的图像,h.264 需要以更高的比特率运行。然而,质量上的差异虽然是可感知的,但并不一定是一个彻头彻尾的问题。为了更客观地衡量这一点,我们可以看一下 SSIM 数字,它表明 h.264 的结果非常接近 VP9 和 h.265。因此,虽然 h.264 在图像质量方面可能没有那么好,但差异不足以克服下一节中详述的重大权衡。
我们还应该指出其他因素,例如改进的亚像素插值和运动矢量参考选择(运动估计)也可以提高图像质量。这是因为它们有助于预测电影中下一帧的样子。这些是非常复杂的概念,值得他们自己的文章,所以我们将保留它。
编码时间
为了达到更高的压缩率,VP9和h.265需要进行更多的处理。所有这些额外的处理意味着他们将需要更长的时间来编码视频。这会损害您的延迟,因为花费在处理上的所有额外时间都会延迟您的视频播放。除其他原因外,延迟对于确保您的实时视频流能够提供交互式体验非常重要。
图 2:编码时间作为比特率改进的一个因素,比较libvpx(VP9)、x264(AVC) 和x265(HEVC)。
那么上图究竟是什么意思呢?
此图在水平轴上显示以每帧秒为单位的编码时间。纵轴显示比特率改进,它将 SSIM 和比特率的组合与设置为 x264 @veryslow 的参考点进行比较。参考点是为什么 x264 不会超过 0%。
图表告诉我们什么?
VP9 和 h.265(如宣传的那样)比 h.264 好 50%,但它们也慢 10 到 20 倍。如果您遵循 x264 (AVC) 的蓝线,您会发现它在大多数比特率基准点上都低于其他两条线。不仅如此,绿色 (h.265) 和橙色 (VP9) 线在曲线的早期与 h.264 相交。这意味着每帧速率的秒数将开始急剧增加,并真正拖累您的流媒体性能。因此,虽然 VP9 和 h.265 显示出更好的压缩率,但它的编码时间成本非常高,这将大大增加延迟。可以在滑铁卢大学的这项研究中找到对编码时间和编解码器比较的更深入分析。
CPU 消耗
如上一节所述,VP9 和 h.265 都必须运行比 h.264 更多的压缩算法,这随后会增加它们的 CPU 使用率。即使完全优化,实时流媒体也是一个 CPU 密集型过程,因此增加已经很高的使用率将是一个问题。但是,有一些东西可以缓解这种情况:硬件支持。专用芯片组将减少 CPU 消耗。
h.265 目前享有更多硬件支持,包括 Windows 10(可下载或通过 Intel Kaby Lake 或更新的处理器)Apple (iOS 11) 和 Android (Android 5.0) 设备。虽然大多数移动设备支持 VP9,但大多数其他系统不支持。如果没有直接的硬件支持,VP9 编码过程将与 CPU 挂钩,消耗大量资源,降低电池寿命,并可能增加延迟。
正如我们将在下一节中介绍的那样,h.264 得到了广泛的支持,并且首先不会像 VP9 或 h.265 那样消耗 CPU。
采用和浏览器实施
为了使用编解码器,需要支持硬件或软件编码器。h.265 的采用率很低,这在很大程度上是由于专利许可。h.265 有四个与之相关的专利池:HEVC Advance、MPEG LA、Velos Media 和 Technicolor。这使得它更加昂贵,阻碍了更广泛的采用,从而将其限制在特定的硬件编码器和移动芯片组中。只有 Edge、Internet Explorer 和 Safari 支持 h.265,即使这样运行浏览器的设备仍需要支持 h.265 硬件编码。即使在具有正确实现的浏览器中支持 h.265,WebRTC 也往往无法正常工作。如果没有 WebRTC 支持,很难实现实时延迟。
VP9 是免版税和开源的,为更广泛的采用扫清了道路。它适用于主流浏览器 Chrome、Firefox 和 Edge 以及操作系统 Windows 10、Android 5.0、iOS 14 和 macOS BigSur。由于 WebRTC 支持 VP9,它也可以直接在浏览器中工作。也有传言称Safari 支持也可能即将到来。
尽管 h.264 拥有一项与之相关的专利,但正如我们之前提到的,2013 年思科开源了其 h.264实施并以免费二进制下载的形式发布。这极大地推动了 h.264 的广泛实施。因此,所有浏览器笔记本电脑和移动设备都支持 h.264。
节省带宽
提高压缩率和由此产生的更小的文件大小的最大优势是它在广播时消耗的带宽更少。这意味着互联网速度较慢的用户仍然可以流式传输高质量的视频流。
那么哪种编解码器可以产生更好的压缩效率来创建更小的视频呢?
根据 Netflix 进行的一项测试,h.265 的性能比 VP9 高出约 20%。尽管其他测试产生了不同的结果,但它们都得出结论认为 h.265 会创建更小的文件大小。根据所使用的客观指标,h.265比 VP9 节省0.6% 到 38.2% 的比特率。
然而,虽然消耗较少的带宽是有用的,但还应考虑其他因素。全球固定宽带连接的平均上传速度为42.63 Mbps,这意味着即使 h.264 要求的连接速度更高,大多数地方也可以支持 4K 流媒体。尽管移动设备的平均速度要低得多,为10.93 Mbps,但它们仍然可以支持 1080p 流。
Boxcast的这张图表显示,全球平均连接速度绝对能够满足所有分辨率级别的上传速度要求。注意:我们找不到比较所有三种编解码器的图表,但 VP9 将介于 h.264 和 h.265 之间。
此外,还有一些方法可以配置您的流媒体应用程序,以迎合互联网速度较慢的国家/地区的用户。您可以通过添加 ABR 和转码支持来做到这一点。ABR(自适应比特率)将修改比特率以提供最佳体验。转码将广播分成多种质量,因此客户端可以根据可用带宽请求最佳质量。
您可能会想“移动设备卡在 2 或 3G 连接上怎么办?”。幸运的现实是手掌大小的设备不需要流式传输最高分辨率来看起来不错。720 甚至 480 仍将显示良好的质量。
虽然带宽消耗对消费者来说可能并不重要,但必须承认,如果公司使用 VP9 或 h. 265. 节省来自较小的文件,这意味着他们不会为 CDN 或云网络上的更多数据流支付那么多费用。虽然这当然很好,但只有在真正的高分辨率设置(如 4K)下,数据消耗减半才会产生重大影响。
当然,无论规模多大,省钱肯定是一件重要的事情。这将我们带到了下一个点,它将展示两全其美;更好的压缩与相同的性能。
LCEVC 回避了整个论点
LCEVC(低复杂度增强视频编码)将所有编解码器的压缩率提高了约 40%。这是因为它是一个附加处理层,可与现有和未来版本的 MPEG 或其他编解码器(如 VP9 和 AV1)一起使用。正如我们在前一篇文章中所介绍的,LCEVC具有对视频流技术产生巨大影响的巨大潜力。无需更改所有当前协议的组成,LCEVC 就可以使它们本身更加高效。
从现在的情况来看,看起来内容提供商将能够使用支持 LCEVC 的软件或基于硬件的编码器与 Red5 Pro 跨云平台相结合,以解锁实时流媒体,尽管它们是处理密集型视频格式建于。根据使用的核心编解码器,这不仅适用于 4K,最终也适用于 8K UHD,还适用于为 360 度观看、虚拟现实和其他创新而设计的格式。
可能普遍采用 LCEVC 背后的驱动力是因为几乎任何设备都可以支持独立下载到观众设备或嵌入服务提供商应用程序播放器的瘦 LCEVC 客户端。通过其 HTML5 JavaScript 实现,LCEVC 还支持无插件浏览器支持。这意味着广泛的实施应该相当简单。
什么是实用的?
在考虑了此处概述的所有内容后,由于广泛采用和快速的编码速度,AVC/h.264 目前是最佳可用选项。尽管提高压缩率和视频质量是重要的考虑因素,但现在的权衡太严重了。具体来说,高编码时间和贪婪的 CPU 消耗对于实时流视频来说真的很糟糕。
也就是说,考虑到 VP9 是免费的并且还享有广泛的支持,一旦创建了更快的软件或硬件编码器,它将在不久的将来成为一个可行的选择。在遥远的将来,AV1 最终将取代 VP9,但考虑到它目前所遭受的天文数字般的高编码时间,在它准备好广泛使用之前需要进行大量精简。当然,LCEVC 可能会绕过更改编解码器以实现更好压缩的整个问题。也许它只是作为 h.264 和 AV1 之间的长期桥梁。
尽管如此,AV1 已准备好取代 h.264、h.265 和 VP8/9。随着视频消费量的增加,减少带宽限制将使发送用户正在寻找的高质量视频变得更加容易。对于远离有线连接、更依赖手机连接的发展中地区尤其如此。它背后的财团拥有所有主要参与者,并且是免版税的。现在阻碍 AV1 的是缺乏实时编码器。一旦这些变得广泛可用,AV1(尤其是与 LCEVC 配对时)将是前进的方向。
相关推荐
- Python入门学习记录之一:变量_python怎么用变量
-
写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...
- python变量命名规则——来自小白的总结
-
python是一个动态编译类编程语言,所以程序在运行前不需要如C语言的先行编译动作,因此也只有在程序运行过程中才能发现程序的问题。基于此,python的变量就有一定的命名规范。python作为当前热门...
- Python入门学习教程:第 2 章 变量与数据类型
-
2.1什么是变量?在编程中,变量就像一个存放数据的容器,它可以存储各种信息,并且这些信息可以被读取和修改。想象一下,变量就如同我们生活中的盒子,你可以把东西放进去,也可以随时拿出来看看,甚至可以换成...
- 绘制学术论文中的“三线表”具体指导
-
在科研过程中,大家用到最多的可能就是“三线表”。“三线表”,一般主要由三条横线构成,当然在变量名栏里也可以拆分单元格,出现更多的线。更重要的是,“三线表”也是一种数据记录规范,以“三线表”形式记录的数...
- Python基础语法知识--变量和数据类型
-
学习Python中的变量和数据类型至关重要,因为它们构成了Python编程的基石。以下是帮助您了解Python中的变量和数据类型的分步指南:1.变量:变量在Python中用于存储数据值。它们充...
- 一文搞懂 Python 中的所有标点符号
-
反引号`无任何作用。传说Python3中它被移除是因为和单引号字符'太相似。波浪号~(按位取反符号)~被称为取反或补码运算符。它放在我们想要取反的对象前面。如果放在一个整数n...
- Python变量类型和运算符_python中变量的含义
-
别再被小名词坑哭了:Python新手常犯的那些隐蔽错误,我用同事的真实bug拆给你看我记得有一次和同事张姐一起追查一个看似随机崩溃的脚本,最后发现罪魁祸首竟然是她把变量命名成了list。说实话...
- 从零开始:深入剖析 Spring Boot3 中配置文件的加载顺序
-
在当今的互联网软件开发领域,SpringBoot无疑是最为热门和广泛应用的框架之一。它以其强大的功能、便捷的开发体验,极大地提升了开发效率,成为众多开发者构建Web应用程序的首选。而在Spr...
- Python中下划线 ‘_’ 的用法,你知道几种
-
Python中下划线()是一个有特殊含义和用途的符号,它可以用来表示以下几种情况:1在解释器中,下划线(_)表示上一个表达式的值,可以用来进行快速计算或测试。例如:>>>2+...
- 解锁Shell编程:变量_shell $变量
-
引言:开启Shell编程大门Shell作为用户与Linux内核之间的桥梁,为我们提供了强大的命令行交互方式。它不仅能执行简单的文件操作、进程管理,还能通过编写脚本实现复杂的自动化任务。无论是...
- 一文学会Python的变量命名规则!_python的变量命名有哪些要求
-
目录1.变量的命名原则3.内置函数尽量不要做变量4.删除变量和垃圾回收机制5.结语1.变量的命名原则①由英文字母、_(下划线)、或中文开头②变量名称只能由英文字母、数字、下画线或中文字所组成。③英文字...
- 更可靠的Rust-语法篇-区分语句/表达式,略览if/loop/while/for
-
src/main.rs://函数定义fnadd(a:i32,b:i32)->i32{a+b//末尾表达式}fnmain(){leta:i3...
- C++第五课:变量的命名规则_c++中变量的命名规则
-
变量的命名不是想怎么起就怎么起的,而是有一套固定的规则的。具体规则:1.名字要合法:变量名必须是由字母、数字或下划线组成。例如:a,a1,a_1。2.开头不能是数字。例如:可以a1,但不能起1a。3....
- Rust编程-核心篇-不安全编程_rust安全性
-
Unsafe的必要性Rust的所有权系统和类型系统为我们提供了强大的安全保障,但在某些情况下,我们需要突破这些限制来:与C代码交互实现底层系统编程优化性能关键代码实现某些编译器无法验证的安全操作Rus...
- 探秘 Python 内存管理:背后的神奇机制
-
在编程的世界里,内存管理就如同幕后的精密操控者,确保程序的高效运行。Python作为一种广泛使用的编程语言,其内存管理机制既巧妙又复杂,为开发者们提供了便利的同时,也展现了强大的底层控制能力。一、P...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML文本框样式 (31)
- HTML滚动条样式 (34)
- HTML5 浏览器支持 (33)
- HTML5 新元素 (33)
- HTML5 WebSocket (30)
- HTML5 代码规范 (32)
- HTML5 标签 (717)
- HTML5 标签 (已废弃) (75)
- HTML5电子书 (32)
- HTML5开发工具 (34)
- HTML5小游戏源码 (34)
- HTML5模板下载 (30)
- HTTP 状态消息 (33)
- HTTP 方法:GET 对比 POST (33)
- 键盘快捷键 (35)
- 标签 (226)
- opacity 属性 (32)
- transition 属性 (33)
- 1-1. 变量声明 (31)
