本文主要介绍VP9(我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在【编风网

支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn)。

VP8和VP9是由Google开发和推动的视频编解码器。直到最近,这促使我和周围客户产生一系列有趣的对话:是否采用VP9?何时采用VP9?是否应该用H.264代替VP9?

这个VP8对VP9的话题往往导致误解,因此先让我把事情排序。

首要的事情放前边:

1.VP8目前是WebRTC的默认视频编解码器。超过90%的WebRTC视频会话使用VP8。

2.VP9大约从Chrome 49官方宣布可用,但它还不是WebRTC的默认视频编解码器。

3.VP8和H.264并驾齐驱。

4.从视频压缩质量来看,VP9要优于VP8。

5.VP8视频压缩消耗较少CPU资源。

考虑到以上事实,可以推出如下结论:

你可以因为以下两件事之一(或全部)而选择迁移到VP9:

1.提升视频体验质量。

2.减少视频所需码率。

那么,让我们来看看这两个选择。

1.提升视频体验质量

如果你对你的服务所需带宽感到满意,那么在同样带宽量的情况下,使用VP9代替VP8进行视频编解码,所得到的视频质量会变得更好。

这在何时有用?

·当用户可用带宽受限时。设想500 kbps或者更少的带宽--比如蜂窝网络或拥塞网络。

·当你计划支持更高分辨率或更好摄像头时。

2.减少视频所需码率

另一种选择是使用VP9进行视频编解码,但同时把视频质量维持在原有VP8的水平。由于VP9更有效率,它能够在维持相同视频质量的情况下减少码率。

这在何时有用?

·当你想开发低级市场,把业务扩展到带宽受限地区时。设想这种情况,一项来自发达国家的服务要向发展中国家扩展。

·当你想服务企业客户,而该客户需要从同一台设备发起多个平行视频会议时。在这种情况下,互联网带宽变得相当稀缺。

WebRTC默认如何处理码率/质量关系?

有些事情经常被忽略。我数十年前就知道这些事,但是后来就忘记了,直到最近才又想起来。那时我正在网上对WebRTC的VP8和VP9进行比较。

企业视频会议的标准做法是永远不要使用比所需更多的资源。如果你试图发送VGA分辨率的视频,那么任何信誉良好的会议系统都不会产生超过1Mbps的码率——实际上要比这更少。其原因来自于目标市场和时间选择。

企业视频会议已经存在二十多年。它诞生初期,1 Mbps带宽的会议连接是大多数企业梦寐以求的。采购视频会议设备的公司需要在设备之间并行支持多个视频会议会话,并同时为每个公司员工维持合理的互联网连接服务。例如一个常见做法是:当每季度的分析师会议召开时,公司会减少普通员工的互联网连接数,以确保为视频会议合理分配网络带宽。

直到今天,大多数具有遗留视频会议系统的企业都会限制浏览器中WebRTC的码率,就是由于上述原因。

然而,WebRTC是基于互联网思维发展起来的。在互联网世界,你得到你所给予的。这就是为什么WebRTC较少处理最大带宽限制,而更多关注可用带宽。你会发现Chrome使用VP8编码VGA视频时,消耗多达1.77 Mbps的带宽。

这其中的差异意味着当你转向VP9后,WebRTC将会提升视频体验质量,而不会影响到你原有部分。

这里有件事需要注意:后端视频处理对带宽变化更敏感,这时候仍然需要基于单个视频会话限制带宽。

所有魔法都需要代价

我们甚至还没有讨论SVC,它看起来更像魔法。你从VP8转向VP9,于是生活更加美好。

然而,就像所有魔法一样,VP9的美好需要付出代价。首先,VP9还不如VP8稳定。尽管这在未来会得到改善,但是你现在应该考虑如下挑战:

·如果你认为VP8非常耗费资源,那么VP9也更加消耗资源(CPU)。

·VP9还没有实现硬件加速,这将是一个挑战。(VP8通常也不支持硬件加速,但是我们正在应对它)

·我猜测移动领域可能不大欢迎VP9,不过不太确定。

·微软的Edge浏览器近期内将不会支持VP9。(如果你在乎这个的话)

有时我愿意付出这种代价——这完全取决于问题的应用场景。

译者:weizhenwei,具体详见:【编风网

Android IOS WebRTC 音视频开发总结(八十二)-- VP8对VP9,质量还是码率?的更多相关文章

  1. Android IOS WebRTC 音视频开发总结(十二)-- sufaceview

    谈到音视频不得不谈谈对视频呈现的理解,为了让大家能有一个更好的理解,先看看android里面SurfaceView的原理,后续陆续分享其绘画原理. 说明:本文是转载的,转载自哪里我也不知道,貌似经过很 ...

  2. Android IOS WebRTC 音视频开发总结(三二)-- WebRTC项目开发建议

    本文主要介绍WEBRTC开发过程中的一些现象,文章来自博客园RTC.Blacker,支持原创,欢迎关注微信公众号blacker,更多详见www.rtc.help 随着移动互联网和智能硬件的快速发展,音 ...

  3. Android IOS WebRTC 音视频开发总结(十九)-- kurento

    折腾了一个多星期终于将kurento的环境搭建好(开发阶段的产品,有些BUG要自己解决),所以单独写篇文件来介绍. 下面开始介绍kurento,文章来自博客园RTC.Blacker,转载请说明出处. ...

  4. Android IOS WebRTC 音视频开发总结(六二)-- 大数据解密国外实时通讯行业开发现状

    本文主要介绍国外实时通讯行业现状,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam,更多详见www.blackerteam.com 上篇文章我们采用百度搜索指数来分 ...

  5. Android IOS WebRTC 音视频开发总结(十五)-- 培训课程大纲

    最近在给公司做内部培训,主要是关于即时通讯和移动视频通话,包括android与android,ios与ios,android与ios,以及手机与PC. ------------------------ ...

  6. Android IOS WebRTC 音视频开发总结(十)-- webrtc入门002

    继续上一篇中未翻译完成的部分,主要包括下面三个部分: 1,扩展:WebRTC多方通话. 2,MCU Multipoint Control Unit. 2, 扩展:VOIP,电话,消息通讯. 注意:翻译 ...

  7. Android IOS WebRTC 音视频开发总结(十八)-- 手机适配

    本文主要介绍上次碰到的某些机器上看不到视频的问题,文章来自博客园RTC.Blacker,转载请说明出处. 之前做的视频聊天App一直运行良好,前几天客户反馈说在三星9100. Android4.0.3 ...

  8. Android IOS WebRTC 音视频开发总结(十六)-- 音频设备操作之opensl与jni

    本节主要分享视频通话中android和ios上操作音频设备的方式,如调解音量大小,启用扬声器(本系列文章转载请说明出处,博客园RTC.Blacker). 先看看webrtc中处理音频设备代码的目录结构 ...

  9. Android IOS WebRTC 音视频开发总结(七二)-- 看到Google Duo,你想到了什么?

    本文主要介绍在线教育这个行业,文章最早发表在我们的微信公众号上,支持原创,详见这里, 欢迎关注微信公众号blackerteam,更多详见www.rtc.help 在昨天的Google I/O大会上Go ...

  10. Android IOS WebRTC 音视频开发总结(五二)-- 亲,咱一起采访webrtc大会的各路专家

    本文最早发自我的微信公众号,咱一起采访webrtc大会的各路专家,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处. 亲,作为webrtc大会的推动者之一,大会期间不管是公共场合还是私 ...

随机推荐

  1. ln 命令使用

    今天在工作中遇到了“ln -sf”命令,发觉很久没用基本忘光,遂重拾鸟哥神书温补了一把. 简单描述的话,ln是linux中用来链接文件的,存在两种不同的连接: 1) Hard Link 实现该操作很简 ...

  2. IntelliJ IDEA 在网页修改数据,但是在浏览器刷新的时候,不能读取到修改之后的数据

    使用IntelliJ IDEA 在网页修改数据,但是在浏览器刷新的时候,不能读取到修改之后的数据? 解决办法:tomcat配置中,On frame deactivation属性选择Update cla ...

  3. JVM内存模型和性能优化 转

    JVM内存模型和性能优化 JVM内存模型优点 内置基于内存的并发模型:      多线程机制 同步锁Synchronization 大量线程安全型库包支持 基于内存的并发机制,粒度灵活控制,灵活度高于 ...

  4. ubuntu中常用软件的安装

    1.有道词典 1.百度有道词典,进入有道首页,点"下载词典客户端",下载对应版本. 2.打开终端,进入下载目录,输入sudo dpkg -i youdao-dict_1.0.2~u ...

  5. NFinal中增加生成页面自动带入js和css

    增加在WebCompiler.aspx页面中的application.CreateCompile(true);方法里. //写aspx页面的自动提示层 #region 插入js&css com ...

  6. MyBatis入门学习教程-实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  7. DHTMLX-Form

    DHTMLX-Form dhtmlxForm提供了一个标准形式与一些有用的补充,如不同风格,使用的数据从客户端和服务器端,与其他dhtmlx组件的集成.验证等. 例子 <!DOCTYPE htm ...

  8. RT-Thread的线程(任务)处理【RT-Thread学习笔记 2】

    RT-Thread中使用线程这个概念,而不是任务.两者相似,我在这里把他的线程当作任务来理解了 1.任务处理: 动态任务相关API 创建任务:rt_thread_create函数,创建任务之后会返回r ...

  9. Python第八天

    Python面向对象进阶 一.静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过 ...

  10. linux下对进程按照内存使用情况进行排序

    linux下对进程按照内存使用情况进行排序的命令为:ps aux --sort -rss 详细解说参见 http://alvinalexander.com/linux/unix-linux-proce ...