【经验分享】RTC 技术系列之视频编解码
要了解什么是视频编解码,首先我们需要了解什么是视频。
视频归根结底是一系列连续的图像帧,当这些图像以一定速率播放时,人眼就会判断其是连续活动的,这样就构成了视频。
那为什么要进行视频编解码呢,因为视频信号数字化后数据量巨大,如果以这样的数据量进行网络传输或者存储时,会占用大量的带宽和存储空间,造成浪费。已当前主流的 1080P 分辨率,一秒 30 帧的视频举例
1080P 图像的高和宽分别为 1080 和 1920,每个像素用三原色 RGB 表示(即每个像素三个字节),因此每帧图像的数据量为 1080*1920*3*8=49766400,每秒 30 帧,则需要乘以 30,49766400*30 = 1,492,992,000bps。因此视频编解码技术因此而诞生。
为什么视频可以压缩呢,我们分两个方面看这个问题:
1 在一副图像中,往往有相近的颜色区域,这样就蕴含了大量的冗余信息,可以基于变化编码和量化编码进行冗余信息处理,达到压缩的可能。
2 两幅图像之间,肯定也存在大量相同以及相似的部分,因此产生了运动补偿及运动估计来描述运动矢量来进行图像间冗余信息压缩的可能。
基于图像内预测编码和图像间预测编码原理,诞生了众多的视频编解码。
H.26X 系列,从 H.261,H.263,到当前主流的 H.264,及 H.265,当前最新制定标准的 H.266;H.26X 系列的发展宗旨为使用技术优化压缩数据量不能够达到更好的视频质量;像 H.265 旨仅需原先的一半带宽即可播放相同质量的视频。它与 H.264 有着相类似的算法架构,并同时对一些相关技术加以改进而大幅提高视频质量。
Mpeg 系列,Mpeg1,Mpeg2,Mpeg4(Mpeg4 之后与 H.264 融合);
VP 系列,VP8,VP9;VP 系列是 Google 自研并开源的编解码系列,Google 创建 VP 系列编解码的原因也是 H.264 需要专利费用,即如果 WebRTC 使用 H.264,则需要按浏览器支付相关的专利费用(当然由于 H.264 广泛支持性,主要原因还是 cisco 开源了 OpenH64),VP8 即对标 H.264,除了在 WebRTC 领域,其知名度和支持度则相对有限;VP9 则对标 H.265,VP9 的目标之一是在保证相同质量的情况下相对于 VP8 可以减少 50%左右的码率,换句话说,相同的码率,VP9 能比 VP8 画质有非常明显的提高;
国产系列,AVS 标准,AVS1.0,AVS2.0;AVS 是我国具备自主知识产权的第二代信源编码标准。AVS2.0,属于与 H.265 和 VP9 同级的新一代标准;虽然 AVS 的使用和知名度貌似不高,但说明我国已经注意到这个领域并发力;
SVAC 标准,我国一个应用于视频监控领域的编解码,特点在于加密认证高安全:规定了加密和认证接口及数据格式,保证数据的安全性、完整性、非否认性;感兴趣区域(ROI)编码:图像分为若干个感兴趣区域和一个背景区域,在重点监控区域保证实时视频信息,帧率较高,节省非感兴趣区域的开销; 视频信息嵌入,可将声音识别特征参数、特殊事件、时间等信息都可嵌入编码里,在不解开视频的前提下,可针对性的提取、快速检索、分类查询;可伸缩性视频解码(SVC):对视频数据分层编码,满足不同传输网络宽带和数据存储环境的需求,普通编码程序传输有主码流、子码流,占用带宽较大,SVAC 传输只有一类码流,对码流分层就可获得不同分辨率的图片信息。
WebRTC 最初由 Google 提出,主要是基于浏览器的 RTC 通讯,故此叫做 WebRTC;初期几大浏览器在 WebRTC 及其视频编解码支持的力度上也是不一的,像 Mozilla 阵营的 Chrome,FireFox,Opera 初期也不一样,Chrome 初期只支持 VP 系列,原因上面介绍过,后续逐渐延伸到 H.264,由于原有的 RTC 通讯领域大都使用 H.264 编解码,因此 H.264 的支持对于跨领域 RTC 互通提供了很大便利,我觉得也一定程度上加速了 WebRTC 的发展,比如浏览器和手机同时加入到视频会议;或者浏览器跟当前的 SIP 终端点点通话,由于 H.264 的支持,大大减少了转码的要求,做视频的转码是非常消耗性能的,或者使用专用硬件实现。
当然后续越来越多厂家加入了 WebRTC 领域,像 Agora 声网的 RTC 系统,已经超过了 WebRTC,像他的各种硬件芯片平台的 SDK 适配,SD-RTN 系统(优先路径选择确保高的传输质量,毕竟通讯不是纯终端侧的功能,网络对通讯质量,视频或者音频的影响也是 juda),优异的弱网对抗算法,可以抵御 70%的视频丢包确保通话流畅。
当前随着物联网的发展,除了人们的通话通讯,音视频会议之外,RTC 越来越广泛的应用各个领域;像安防监控,智能硬件终端,视频处理所处的硬件设备越来越小型甚至微型化,原有的基于软件进行编解码,无论从内存,CPU,性能等资源占用方面,都显示出很大劣势;众多厂家也意识到这个情况,因此越来越多的专业芯片干专业事情的趋势越发明显。像监控领域,华为海思 ARM+专业视频处理单元,占据了国内视频 70%以上的市场;NVIDIA 推出了 Jeston 系列芯片,应对边缘计算场景,ARM+GPU 的处理方式更通用,同时由于 ARM 的低功耗,可以使得边缘侧设备具备视频处理,机器视觉处理,AI 分析能力,大大丰富了智能物联网的应用。
由于这两年的疫情,在线教育,直播的发展,Web 实时通讯带来了非常大的发展机会,其商业化成功也为技术发展持续注入了活力;伴随着 5G 的火热,VR/AR、自动驾驶等新应用场景的出现,必将为 WebRTC 技术带来新的动力,催动着基于互联网的实时音视频通信技术的发展。
【经验分享】RTC 技术系列之视频编解码的更多相关文章
- 视频编解码的理论和实践2:Ffmpeg视频编解码
近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术.因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术. 相关阅读推荐 &l ...
- [转帖]AVS音视频编解码技术了解
AVS高清立体视频编码器 电视技术在经历了从黑白到彩色.从模拟到数字的技术变革之后正在酝酿另一场技术革命,从单纯观看二维场景的平面电视跨越到展现三维场景的立体电视3DTV.3DTV系统的核心问题之一是 ...
- 【H.264/AVC视频编解码技术具体解释】十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据
<H.264/AVC视频编解码技术具体解释>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战project的形式对H.2 ...
- 音视频编解码技术(一):MPEG-4/H.264 AVC 编解码标准
一.H264 概述 H.264,通常也被称之为H.264/AVC(或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC) 1. H.264视频编解码的意义 H.264的出现就是为了创 ...
- 集显也能硬件编码:Intel SDK && 各种音视频编解码学习详解
http://blog.sina.com.cn/s/blog_4155bb1d0100soq9.html INTEL MEDIA SDK是INTEL推出的基于其内建显示核心的编解码技术,我们在播放高清 ...
- 【miscellaneous】各种音视频编解码学习详解
编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...
- 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
目录(?)[-] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列AAC音频 编解码学习笔 ...
- 视频编解码学习之路(H264)
学习视频编解码技术很难吗?视频编解码技术的未来是什么? 明了的说,无论是软件还是硬件设计,视频编解码技术有很多难点,都需要很长一段时间积累才行. 从一开始接触MPEG-2到最新的H.264标准,可算走 ...
- 几个平台环境里视频编解码和图像scale的硬件加速的方法
记录一下遇到几个平台里的视频编解码和图像scale的硬件加速的方法 1,intel平台当包含GEN系列的集成GPU时,可用libva实现视频codec.颜色空间转换和图像scale的硬件加速,具体可使 ...
- 121-基于TI DSP TMS320DM8148的全高清1080P 60fs的视频编解码系统 机器人主板
基于TI DSP TMS320DM8148的全高清1080P 60fs的视频编解码系统 一.板卡概述 本系统基于最先进的DSP技术,构建一个全高清的视频编解码系统,采用TI的芯片.借助TI的DaVin ...
随机推荐
- px 转化 为 rpx
小程序 的 px 转化为rpx 在 获取 屏幕高度 后 ,这个单位是px ,可是我的项目是用rpx,所以这里就涉及一个转化的公式了 1rpx = 750 / 设备屏幕宽度 所以 wx.getSyste ...
- rabbitMq安装 - docker
安装rabbitmq 参考网站:https://www.rabbitmq.com/download.html 方式一: 获取rabbit镜像: docker pull rabbitmq:managem ...
- count(1) and count(*),count(字段)区别及效率比较
执行结果: count(1)和count(*)之间没有区别,因为count(*)count(1)都不会去过滤空值, count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况.即不统 ...
- Email Windows发送成功,Linux却发送失败的可能原因
一.linux端口被禁用,通过telnet查看.(我这里没问题) 二.排查环境参数是否一致(我这里没问题) 三.查看jdk版本原因,因为jdk1.8有的版本禁用了ssl 参阅文档:https://bl ...
- Linux下查看全部的环境变量
在Windows下,查看环境变量的命令是:set,这个命令会输出系统当前的环境变量. ... Linux查看环境变量使用env命令显示所有的环境变量 $ env
- 初步学习UE网络同步
UE 网络同步和框架介绍 为一个UE引擎的初学者基于现有知识储备和见识的限制下,对UE网络和游戏框架的粗鄙之见,文中多有错误敬请指出以较后文. 1.网络复制 不论是服务端还是客户端,代码都是一样的 ...
- 12.1linux学习第十二 天
8.2 Iptables 在早期的Linux系统中,默认使用的是iptables防火墙管理服务来配置防火墙.尽管新型的firewalld防火墙管理服务已经被投入使用多年,但是大量的企业在生产环境中依然 ...
- SpringMVC配置文件applicationContext.xml头信息
applicationContext.xml头信息 <?xml version="1.0" encoding="UTF-8"?> <beans ...
- MySql 字符串时间转换
MySql中经常遇到字符串格式时间转换成时间类型的情况: SELECT STR_TO_DATE('Jul 20 2013 7:49:14:610AM','%b %d %Y %h:%i:%s:%f%p' ...
- spring-boot项目布到tomcat容器下部署
一.修改打包形式 在pom.xml里设置 `war` <packaging>war</packaging> 二.移除嵌入式tomcat插件 在pom.xml里找到spring- ...