请选择 进入手机版 | 继续访问电脑版

默认
打赏 发表评论 8
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
即时通讯音视频开发(五):认识主流视频编码技术H.264
微信扫一扫关注!

前言


即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙。原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的。有关实时音视频开发时的技术难题请参见《音视频云声网Agora:从demo到实用,中间还差1万个WebRTC》:http://www.52im.net/article-119-1.html

本文主要讲解实时音视频技术中目前主流的视频编码技术H.264相关知识。

系列文章


本文是系列文章中的第5篇,本系列文章的大纲如下:


H.264简介


d16199cc0723b1798e87401dd713cae4.jpg

什么是H.264?H.264是一种高性能的视频编解码技术。目前国际上制定视频编解码技术的组织有两个,一个是“国际电联”,它制定的标准有H.261、H.263、H.263+等,另一个是“国际标准化组织(ISO)”它制定的标准有MPEG-1、MPEG-2、MPEG-4等。而H.264则是由两个组织联合组建的联合视频组(JVT)共同制定的新数字视频编码标准,所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4高级视频编码,而且它将成为MPEG-4标准的第10部分。因此,不论是MPEG-4 AVC、MPEG-4 Part 10,还是ISO/IEC 14496-10,都是指H.264。

互联网巨头们对待H.264的态度


580b5b84f186ac5127f1355ec36cbf1b.png

因为苹果公司当初毅然决然抛弃了Adobe的VP6编码,选择了H.264,这个标准也就随着数亿台iPad和iPhone走入了千家万户,成为了目前视频编码领域的绝对霸主,占有超过80%的份额。

随着互联网视频服务的快速崛起,各类智能电子设备都陆续支持视频网络下载及播放。H.264标准一直是网络视频的主要压缩技术之一,且在又有逐步取代Flash视频格式的发展趋势。其主要支持者,是微软的IE浏览器和苹果公司的系列产品,前者保证了H.264在桌面设备市场的优势,后者保证了H.264在便携设备市场的优势。

然而,由于谷歌公司决定在其新一代浏览器Chrome中支持新的视频编解码技术WebM、而不支持H.264,使得H.264在网络视频市场的前景受到很大的挑战。

H.264算法的优势


H.264是在MPEG-4技术的基础之上建立起来的,其编解码流程主要包括5个部分:帧间和帧内预测、变换和反变换、量化和反量化、环路滤波、熵编码。

H.264/MPEG-4 AVC(H.264)是1995年自MPEG-2视频压缩标准发布以后的最新、最有前途的视频压缩标准。H.264是由ITU-T和ISO/IEC的联合开发组共同开发的最新国际视频编码标准。通过该标准,在同等图象质量下的压缩效率比以前的标准提高了2倍以上,因此,H.264被普遍认为是最有影响力的行业标准。

H.264的优势


H.264在1997年ITU的视频编码专家组提出时被称为H.26L,在ITU与ISO合作研究后被称为MPEG4 Part10或H.264(JVT)。H.264标准的主要目标是:与其它现有的视频编码标准相比,在相同的带宽下提供更加优秀的图象质量。

而,H.264与以前的国际标准如H.263和MPEG-4相比,最大的优势体现在以下四个方面:

  • 将每个视频帧分离成由像素组成的块,因此视频帧的编码处理的过程可以达到块的级别。
  • 采用空间冗余的方法,对视频帧的一些原始块进行空间预测、转换、优化和熵编码(可变长编码)。
  • 对连续帧的不同块采用临时存放的方法,这样,只需对连续帧中有改变的部分进行编码。该算法采用运动预测和运动补偿来完成。对某些特定的块,在一个或多个已经进行了编码的帧执行搜索来决定块的运动向量,并由此在后面的编码和解码中预测主块。
  • 采用剩余空间冗余技术,对视频帧里的残留块进行编码。例如:对于源块和相应预测块的不同,再次采用转换、优化和熵编码。

具体优势表现为:

  • 低码流:和MPEG2和MPEG4 ASP等压缩技术相比,在同等图像质量下,采用H.264技术压缩后的数据量只有MPEG2的1/8,MPEG4的1/3。显然,H.264压缩技术的采用将大大节省用户的下载时间和数据流量收费。
  • 高质量的图象:H.264能提供连续、流畅的高质量图象(DVD质量)。
  • 容错能力强:H.264提供了解决在不稳定网络环境下容易发生的丢包等错误的必要工具。
  • 网络适应性强:H.264提供了网络适应层, 使得H.264的文件能容易地在不同网络上传输(例如互联网,CDMA,GPRS,WCDMA,CDMA2000等)。

H.264和以前的标准一样,也是DPCM加变换编码的混合编码模式。但它采用“回归基本”的简洁设计,不用众多的选项,获得比H.263++好得多的压缩性能;加强了对各种信道的适应能力,采用“网络友好”的结构和语法,有利于对误码和丢包的处理;应用目标范围较宽,以满足不同速率、不同解析度以及不同传输(存储)场合的需求。

H.264标准的关键技术


1 帧内预测编码


帧内编码用来缩减图像的空间冗余。为了提高H.264帧内编码的效率,在给定帧中充分利用相邻宏块的空间相关性,相邻的宏块通常含有相似的属性。因此,在对一给定宏块编码时,首先可以根据周围的宏块预测(典型的是根据左上角的宏块,因为此宏块已经被编码处理),然后对预测值与实际值的差值进行编码,这样,相对于直接对该帧编码而言,可以大大减小码率。

2帧间预测编码


帧间预测编码利用连续帧中的时间冗余来进行运动估计和补偿。H.264的运动补偿支持以往的视频编码标准中的大部分关键特性,而且灵活地添加了更多的功能,除了支持P帧、B帧外,H.264还支持一种新的流间传送帧——SP帧,如图3所示。码流中包含SP帧后,能在有类似内容但有不同码率的码流之间快速切换,同时支持随机接入和快速回放模式。

3整数变换


在变换方面,H.264使用了基于4×4像素块的类似于DCT的变换,但使用的是以整数为基础的空间变换,不存在反变换,因为取舍而存在误差的问题,变换矩阵如图5所示。与浮点运算相比,整数DCT变换会引起一些额外的误差,但因为DCT变换后的量化也存在量化误差,与之相比,整数DCT变换引起的量化误差影响并不大。此外,整数DCT变换还具有减少运算量和复杂度,有利于向定点DSP移植的优点。

4量化


H.264中可选32种不同的量化步长,这与H.263中有31个量化步长很相似,但是在H.264中,步长是以12.5%的复合率递进的,而不是一个固定常数。

在H.264中,变换系数的读出方式也有两种:之字形(Zigzag)扫描和双扫描,如图6所示。大多数情况下使用简单的之字形扫描;双扫描仅用于使用较小量化级的块内,有助于提高编码效率。

5熵编码


视频编码处理的最后一步就是熵编码,在H.264中采用了两种不同的熵编码方法:通用可变长编码(UVLC)和基于文本的自适应二进制算术编码(CABAC)。

在H.263等标准中,根据要编码的数据类型如变换系数、运动矢量等,采用不同的VLC码表。H.264中的UVLC码表提供了一个简单的方法,不管符号表述什么类型的数据,都使用统一变字长编码表。其优点是简单;缺点是单一的码表是从概率统计分布模型得出的,没有考虑编码符号间的相关性,在中高码率时效果不是很好。

因此,H.264中还提供了可选的CABAC方法。算术编码使编码和解码两边都能使用所有句法元素(变换系数、运动矢量)的概率模型。为了提高算术编码的效率,通过内容建模的过程,使基本概率模型能适应随视频帧而改变的统计特性。内容建模提供了编码符号的条件概率估计,利用合适的内容模型,存在于符号间的相关性可以通过选择目前要编码符号邻近的已编码符号的相应概率模型来去除,不同的句法元素通常保持不同的模型。

H.264在实时视频聊天中的应用


目前,H.264已被广泛应用于实时视频应用中,相比以往的方案使得在同等速率下,H.264能够比H.263减小50%的码率。也就是说,用户即使是只利用 384kbit/s的带宽,就可以享受H.263下高达 768kbit/s的高质量视频服务。H.264 不但有助于节省庞大开支,还可以提高资源的使用效率,同时令达到商业质量的实时视频服务拥有更多的潜在客户。

附录:更多实时音视频技术文章


[1] 开源实时音视频技术WebRTC的文章:
开源实时音视频技术WebRTC的现状
简述开源实时音视频技术WebRTC的优缺点
访谈WebRTC标准之父:WebRTC的过去、现在和未来
良心分享:WebRTC 零基础开发者教程(中文)[附件下载]
WebRTC实时音视频技术的整体架构介绍
新手入门:到底什么是WebRTC服务器,以及它是如何联接通话的?
WebRTC实时音视频技术基础:基本架构和协议栈
浅谈开发实时视频直播平台的技术要点
[观点] WebRTC应该选择H.264视频编码的四大理由
基于开源WebRTC开发实时音视频靠谱吗?第3方SDK有哪些?
开源实时音视频技术WebRTC中RTP/RTCP数据传输协议的应用
简述实时音视频聊天中端到端加密(E2EE)的工作原理
实时通信RTC技术栈之:视频编解码
开源实时音视频技术WebRTC在Windows下的简明编译教程
网页端实时音视频技术WebRTC:看起来很美,但离生产应用还有多少坑要填?
了不起的WebRTC:生态日趋完善,或将实时音视频技术白菜化
腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践
融云技术分享:基于WebRTC的实时音视频首帧显示时间优化实践
>> 更多同类文章 ……

[2] 实时音视频开发的其它精华资料:
实时语音聊天中的音频处理与编码压缩技术简述
网易视频云技术分享:音频处理与压缩技术快速入门
学习RFC3550:RTP/RTCP实时传输协议基础知识
基于RTMP数据传输协议的实时流媒体技术研究(论文全文)
声网架构师谈实时音视频云的实现难点(视频采访)
浅谈开发实时视频直播平台的技术要点
还在靠“喂喂喂”测试实时语音通话质量?本文教你科学的评测方法!
实现延迟低于500毫秒的1080P实时音视频直播的实践分享
移动端实时视频直播技术实践:如何做到实时秒开、流畅不卡
如何用最简单的方法测试你的实时音视频方案
技术揭秘:支持百万级粉丝互动的Facebook实时视频直播
简述实时音视频聊天中端到端加密(E2EE)的工作原理
移动端实时音视频直播技术详解(一):开篇
移动端实时音视频直播技术详解(二):采集
移动端实时音视频直播技术详解(三):处理
移动端实时音视频直播技术详解(四):编码和封装
移动端实时音视频直播技术详解(五):推流和传输
移动端实时音视频直播技术详解(六):延迟优化
理论联系实际:实现一个简单地基于HTML5的实时视频直播
IM实时音视频聊天时的回声消除技术详解
浅谈实时音视频直播中直接影响用户体验的几项关键技术指标
如何优化传输机制来实现实时音视频的超低延迟?
首次披露:快手是如何做到百万观众同场看直播仍能秒开且不卡顿的?
Android直播入门实践:动手搭建一套简单的直播系统
网易云信实时视频直播在TCP数据传输层的一些优化思路
实时音视频聊天技术分享:面向不可靠网络的抗丢包编解码器
P2P技术如何将实时视频直播带宽降低75%?
专访微信视频技术负责人:微信实时视频聊天技术的演进
腾讯音视频实验室:使用AI黑科技实现超低码率的高清实时视频聊天
微信团队分享:微信每日亿次实时音视频聊天背后的技术解密
近期大热的实时直播答题系统的实现思路与技术难点分享
福利贴:最全实时音视频开发要用到的开源工程汇总
七牛云技术分享:使用QUIC协议实现实时视频直播0卡顿!
实时音视频聊天中超低延迟架构的思考与技术实践
理解实时音视频聊天中的延时问题一篇就够
实时视频直播客户端技术盘点:Native、HTML5、WebRTC、微信小程序
写给小白的实时音视频技术入门提纲
微信多媒体团队访谈:音视频开发的学习、微信的音视频技术和挑战等
腾讯技术分享:微信小程序音视频技术背后的故事
微信多媒体团队梁俊斌访谈:聊一聊我所了解的音视频技术
新浪微博技术分享:微博短视频服务的优化实践之路
实时音频的混音在视频直播应用中的技术原理和实践总结
以网游服务端的网络接入层设计为例,理解实时通信的技术挑战
腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践
新浪微博技术分享:微博实时直播答题的百万高并发架构实践
技术干货:实时视频直播首屏耗时400ms内的优化实践
爱奇艺技术分享:轻松诙谐,讲解视频编解码技术的过去、现在和将来
零基础入门:实时音视频技术基础知识全面盘点
实时音视频面视必备:快速掌握11个视频技术相关的基础概念
淘宝直播技术干货:高清、低延时的实时视频直播技术解密
>> 更多同类文章 ……

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

评分

2

查看评分

本帖已收录至以下技术专辑

推荐方案
评论 8
视频编码标准这一块,貌似谷歌和微软苹果打的挺厉害的。。。
真是一切为了利益啊、、、
签名: 国庆长假还没有缓过来,请让我静一静,产品狗死远点...
引用:IMDeveloper 发表于 2016-04-20 17:47
视频编码标准这一块,貌似谷歌和微软苹果打的挺厉害的。。。
真是一切为了利益啊、、、

是的,谷歌在强推vp8(现在是vp9),而苹果和微软一定要用h.264(下一代是H.265),都是利益相关的事。
H.264(或H.265)有一大堆专利在那,利益方太多。
签名: 天气忽然就这么冷了!
感谢楼主分享
现在 h.264 成为主流了. 不过还是比较看好 google 的 vp9
签名: 该会员没有填写今日想说内容.
引用:Akagi201 发表于 2017-07-07 11:42
现在 h.264 成为主流了. 不过还是比较看好 google 的 vp9

个人认为Google的VP8和VP9很难成功,因为H.264和H.265有微软和苹果这两个巨头支持,而且差不多已经是事实上的工业标准了。。
签名: 天气忽然就这么冷了!
谢谢分享
签名: 心情好
感谢分享
感谢分享,好文章。
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部