本文目录一览:
音视频基础概念
音视频之所以叫音视频是因为他由音频和视频构成,我们平时看的视频其实就是音视频。本文将记录笔者在学习音视频遇到的概念,如果你和笔者一样对音视频并没有接触太多,那么下面的笔记将会帮你认识音视频。
描述概念
PCM 即音频裸数据量大,存在本地稍微可以接受,但是要在网络中实时在线传播的话就太大了,因此就有了音频压缩编码的存在。压缩编码实际上就是 压缩冗余信号 ,冗余信号指的是人耳听不到的音频信号(20Hz ~ 20kHz范围以外)。
PCM(Pulse Code Modulation,脉冲编码调制)是无损编码,也是音频裸数据,能够达到最大程度的高保真。
优点 :音源信息保存完整,音质好
缺点 :信息量大,体积大,冗余度过大
适用场合 :广泛用于素材保存及音乐欣赏
WAV(Waveform Audio File Format)是一种不会进行压缩操作的编码,他在 PCM 数据格式的前面加上了 44字节 ,分别用来描述 PCM 的采样率、声道数、数据格式等信息。
优点 :音质非常好,大量软件都支持
缺点 :信息量大,体积大,冗余度过大
适用场合 :多媒体开发的中间文件、保存音乐和音效素材
MP3 具有不错的压缩比,使用 LAME 编码的中高码率的 MP3 文件,听感上非常接近 WAV 文件。
优点 :音质在 128 Kbps 以上表现还不错,压缩比比较高,兼容性高
缺点 :在 128 Kbps 及以下时,会出现明显的高频丢失
适用场合 :高比特率下对兼容性有要求的音乐欣赏
AAC 是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如PS、SBR等),衍生出了 LC-AAC、HE-AAC、HE-AAC v2 三种主要的编码格式:
优点 :在小于 128 Kbps 的码率下表现优异,支持多种音频声道组合,提供优质的音质
适用场合 :128 Kbps 以下的音频编码,多用于视频中的音频轨的编码
Ogg 在各种码率下大豆油比较优秀的表现,尤其在中低码率场景下。可以用更小的码率达到更好的音质,128 Kbps 的 Ogg 比 192 Kbps 甚至更高码率的 MP3 还要出色。但是它的兼容性不是很好,因此和 MP3 无法相提并论。
优点 :可用比 MP3 个更小的码率实现比 MP3 更好的音质,高低中码率下均有良好的表现
缺点 :软件硬件的兼容性不好
使用场合 :语音聊天的音频消息场景
一幅幅图像是由一个个像素点组成的,每个像素点都由3个子像素点组成。
像素点的数量就是分辨率,比如一个屏幕的分辨率是 1280 x 720 ,那么说明水平方向有 720 个像素点,垂直方向有 1280 个像素点,因此整个屏幕就有 1280 x 720 个像素点(注:这是不算子像素点的说法)。
位图的像素都分配有特定的位置和颜色值。每个像素的颜色信息由 RGB 组合或者灰度值表示。根据 位深度 ,可将位图分为1、4、8、16、24及32位图像等。每个像素使用的信息位数越多,可用的颜色就越多,颜色表现就越逼真,相应的数据量越大。
一个图像可以由 RGB 组成,这些 子像素点的常用表示方式 如下:
那么一张 1280 x 720 的 RGBA_8888 图像的大小就是:
YUV 主要应用于优化彩色视频信号的传输,使其向后兼容老实黑白电视。与 RGB 视频型号传输相比,最大的优点是占用极少的 频宽
表示方式 :YUV 的每个分量都使用一个字节(8位)来表示,所以取值范围是 0 ~ 255。
存储格式 :
采样范式 :YUV 图像的主流采样方式有如下三种:
YUV 4:4:4 采样,意味着 Y、U、V 三个分量的采样比例相同,因此在生成的图像里,每个像素的三个分量信息完整,都是 8 bits,也就是一个字节。
如下图所示(Y 分量用叉表示,UV 分量用圆圈表示):
这种采样方式的图像和 RGB 颜色模型的图像大小是一样,并没有达到节省带宽的目的,当将 RGB 图像转换为 YUV 图像时,也是先转换为 YUV 4:4:4 采样的图像。
YUV 4:2:2 采样,意味着 UV 分量是 Y 分量采样的一半,Y 分量和 UV 分量按照 2 : 1 的比例采样。每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一个采集一个。如下图所示(Y 分量用叉表示,UV 分量用圆圈表示):
两个图像共用一个 U、V 分量,因此YUV 4:2:2 采样的图像比 RGB 模型图像节省了三分之一的存储空间,在传输时占用的带宽也会随之减少。
YUV 4:2:0 采样,并不是指只采样 U 分量而不采样 V 分量。而是指,在每一行扫描时,只扫描一种色度分量(U 或者 V),和 Y 分量按照 2:1 的方式采样。每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和 Y 分量相比都是 2:1 。如下图所示(Y 分量用叉表示,UV 分量用圆圈表示):
四个图像共用一个 U、V 分量,因此YUV 4:2:0 采样的图像比 RGB 模型图像节省了一半的存储空间,因此它也是比较主流的采样方式。
RGB 到 YUV 的转换,就是将图像所有像素点的 R、G、B 分量转换到 Y、U、V 分量。对于显示器来说,它是通过 RGB 模型来显示图像的,而在传输图像数据时又是使用 YUV 模型(可节省带宽),因此就有:
视频中的每帧都代表着一幅静止的图像
相较于音频数据,视屏数据有极强的相关性,也就是说有大量的冗余信息,包括空间上的冗余信息和时间上的冗余信息。
帧间编码技术 - 去除时间上的冗余信息
帧内编码技术 - 去除空间上的冗余信息
MPEG 算法是适用于动态视频的压缩算法,它除了对单幅图像进行编码外,还利用图像序列中的相关原则去除冗余,大大提高了视频的压缩比。
ITU-T 制定的 H.261、H.262、H.263、H.264⼀系列视频编码标准是⼀套单独的体系。其中,H.264 集中了以往标准的所有优点,并吸取了以往标准的经验,采⽤的是简洁设计,这使得它⽐ Mpeg4 更容易推⼴。现在使⽤最多的就是 H.264 标准,H.264 创造了 多参考帧 、 多块类型 、 整数变换 、 帧内预测 等新的压缩技术,使⽤了更精细的分像素运动⽮量(1/4、1/8)和新⼀代的环路滤波器,这使得压缩性能得到⼤⼤提⾼,系统也变得更加完善。
GOP( Group Of Picture ),表示一组图片,两个I帧之间就形成的一组图片。通常在为编码器设置参数的时候,必须要设置 gop_size 的值,其代表的是两个I帧之间的帧数目。
《音视频开发进阶指南》
一文读懂 YUV 的采样与格式
移动端图片格式调研
音视频会议系统有什么作用?
什么是视频会议
视频会议叫VC (video conference),是指通过网络通信技术来实现的虚拟会议,使在地理上分散的用户可以共聚一处,通过图形、声音等多种方式交流信息,支持人们远距离进行实时信息交流与共享、开展协同工作的应用系统。视频会议极大的方便了协作成员之间真实、直观的交流,对于远程教学和会议也有着举足轻重的作用。
视频会议系统是一种在位与两个或多个地点的多个用户之间提供语音和运动彩色画面的双向实时传送的视听会话型会议业务。大型视频会议系统在军事、政府、商贸、医疗等部门有广泛的应用。
视频会议能使人们更有效的交流,因为可视化的交流是最自然的交流方式。因此看比说更能加深人的理解与记忆,特别是当话题本身就是一个很形象的观点的时候。
有些视频会议系统设计成允许好几组不同地方的人参加同一个会议,有些则设计成只允许几个人在他们的桌面上讨论项目。无论怎样,他们能看到全方位的活动图像,清楚地听到别人所说的话,感觉就像在一起。用这种方式,视频会议创造了这样一个环境:更快地下决策,更加强大的团队工作,想法、知识、鼓励能从一个同事传向另外一个同事。还有一个更为显著的优点是不用出差。
[编辑]
视频会议产生的原因
会议电视技术的出现和发展,逐渐改变了人类的社会活动方式。视频通信是人类社会经济生活中不可缺少的一部分,有关的研究表明,有效的信息55% 60%依赖于面对面(Face to Face)的视觉效果,33% 38%依赖于说话者的语音,而只有7%依赖于内容。传统的通信工具,如电话、传真机等都无法达到面对面或一群人聚集在一起的沟通效果。对企事业单位来说,常年超负荷运转,出差开会,已成为令人苦恼,望而却步的事情。采用会议电视的方式既达到了召开会议的目的,又避免了出差到外地。从效果上来看,可以缓解交通紧张状况,节省时间和经费。对于一些紧急性会议,会议电视在争取时间、及时商讨决策、及时贯彻上级重要指示、及时取得重要信息等方面,都具有明显的优越性。它不仅让参加电视会议的每一个人都仿佛坐在同一个会议室内、同一个会议桌前进行面对面的交流,还可以让与会者在开会的同时方便地处理其他日常工作,而不会为出差开会而苦恼.
[编辑]
视频会议的形式
网络视频会议是网络会议的一个重要组成部分,而根据会议对软硬件的需求程度,大致可以将其分为硬件视频、软硬件综合视频、纯软件视频三种形式。
由于硬件视频会议视音频效果好,一直以来都是政府等部门青睐的网络会议形式。随着近几年网络事业的飞速发展,再加上硬件视频网络会议价格高、需要专线等特殊要求,而纯软件的视频会议系统具有价格便宜、适应性强、即时使用等优点,正成为网络会议市场上的新生力量。
[编辑]
使用视频会议的好处
视频会议使不同地方的人们相互影响--不管他们之间是10分钟的步程还是10小时的飞机行程。它能够使人们像在同一房间一样交流思想、交换信息。这就意味着人们不用在等E-mail、传真或者快递中度过工作时间。简短地说,视频会议使人们“坐”在了一起。
加快产品开发周期,缩短上市时间。
降低差旅费用。
提高雇员时间的利用效率。
提供更广泛、更深入的招聘面,提高雇佣决策的质量。
平衡工作/生活,留住雇员。
加快决策进度,提高雇员满意度。
更轻松地完成远程访问专家或员工的任务。
扩展业务范围。
提高与家庭办公人员、客户、合作伙伴和供应商的沟通效率。
减少碳氢化合物的排放,改善环境,减少油耗,解决交通拥堵问题。
[编辑]
视频会议的产品形态
目前视频会议产品形态主要分为两个部分:多点控制单元(MCU,Multipoint Control Unit)和视频终端。多点控制单元即我们通常所说的MCU。它是视讯会议的核心部分,在H.323标准下,MCU由必不可少的多点控制器(MC)以及零个或多个多点处理器(MP)组成。MC处理所有终端之间的H.245协议,以确定共同的音频和视频处理能力,并通过确定哪些音频和视频流将进行多点多播(Multicast),从而实现对会议资源进行控制,同时,它支持三点或更多点之间的会议。
目前,市场上的主流产品是基于H.323协议的MCU;视讯终端是提供单向或双向实时通信的客户端。所有视讯终端必须支持声音通信,视频和数据也是可选的。H.323规定了不同的音频、视频和或数据终端共同工作所需的操作模式,它将成为下一代因特网电话、电话会议和电视会议技术领域占统治地位的标准。市场中常见的视讯终端主要有以下几种:机顶盒、桌面一体终端(包括视频终端和LCD屏)、和PC连接的简易终端,以及配合USB摄像头和耳麦使用的软件终端。
支持SIP协议的视频会议系统将是未来的发展方向。
[编辑]
视频会议的功能[1]
视频会议到底可以为人们做什么?
视频会议让在不同地点参加会议的人感到如同在与对方进行“面对面”的交谈,在效果上可以替代现场举行的会议。
网络视频会议将与会各方的图像、视频、语音、文字等多种资料分送到其他用户的计算机上。会议各方就像共处一室,不仅可以面对面讲话;而且通过网络可以将其他一切图像、文件等资料互相共享。
地理位置上分散的用户,可以通过视频会议进行以下活动。
①发表各自意见,通过自己的计算机与其他用户通话。
②观察对方的形象、动作、表情等。
⑧共享文件:所有用户能同时浏览某用户计算机内的共享文件。
④协同工作:在讨论时,可以使用各种软件工具,还能标出文件中的重点,并共同编辑文件。
⑤共同浏览图像或显示于屏幕黑板塀幕白板上的文字。
网络视频会议的交流方式多种多样,用户使用网络相互连接后,传送语音、视频、图像、文字等多种信息以增加与会者对会议内容的理解,实现人与人之间异地实时交流。
用户使用视频会议系统可以节约时间,减少甚至避免交流中间环节中造成的误解,从而保证高效地进行交流。
视频会议不仅摆脱了距离的限制,也避免了耗时、费力的长途旅行,节省了大量的会议费用。在节省人力、财力的同时,视频会议提高了工作效率,在办公自动化、紧急救援、现场指挥调度等许多方面发挥重要作用。视频会议系统是目前发展前景最好的技术之一,巨大的市场需求推动了视频会议技术的快速发展。
[编辑]
视频会议的一些功能的展示与应用
视频会议的一些功能的展示与应用
从用途范围划分,视频会议系统可以分为桌面型、小组型和团体型;从实现方式划分有硬件系统、软硬结合系统和纯软件系统。
一般的说,视频会议有以下这些基本的功能及应用:
1、实时音视频广播
优秀的音视频交互能力。在主控模式下,由主持人选择广播参与会议成员的视频,系统允许同时广播多路语音、视频。
2、查看视频
在非主控模式下,会议成员间可以相互自由查看视频
3、电子白板
系统提供多块白板,与会人员都可通过白板进行绘制矢量图,可以进行文字输入、粘贴图片等。
4、文档共享
会议发言人可以事先或在会议进行时,把准备好的演讲稿放在文档共享区,当被主持人列为当前发言人时,可以将该文档同步展示给大家。
5、网页共享
会议成员可以引导大家上某一个具体网站,共同分析问题。
6、参会人员列表
显示参与会议的人数和各自状态,可用来查看视频和赋予发言权。
7、文字讨论
会议成员可以通过会议系统中的文字聊天系统与全部、部分会议成员或其中某一位成员进行文字聊天、发送信息。另外,系统具有的词典过滤功能可以过滤那些经常出现的不文明词汇。
8、系统消息
显示会议系统发生的事件,如其他人查看你的视频、系统中的发言、主持人的部分系统操作等。
9、会议投票
在会议进行中,会议主持人可以就某一问题,提出几个不同观点,通过会议投票系统可以了解人们对各种观点的支持率,领导可借此实现快速判断决策。
10、发送文件
在会议开始之前或会议进行中,发言人可以把自己的演讲稿发送给与会者。
11、桌面共享
视频会议的辅助功能,主要用来解决协同办公时相互之间的紧密协作问题。该功能是由发言人把自己的操作的桌面共享给大家,也可以允许别人操作自己桌面。
12、会议录制
在会议进行中,会议录制功能能把整个会议录制下来,供会后编辑、参考、存档。
13、远程设置
为确保会议顺利进行,主持人通过远程设置,可以把会议成员使用的带宽调整到合适的范围。
14、踢出会议室
强大的控制功能,能轻松地把不遵守纪律的会议成员请出会议室。
15、系统设置
会议成员可以根据网络环境情况,选择相应的视频压缩格式,从而调整系统所需带宽,保证会议能以最好的效果进行。
18、用户管理
可以灵活地添加、删除能够使用会议系统的用户,可以灵活地修改已有的用户信息,避免没有权限的其他人员进入会议系统,干扰会议的正常进行。等等
视频技术带来的“便利、效率的提高、成本的控制”已经深入人心。随着中国宽带建设的推进,视频技术的更新发展,系统成本的进一步降低,视频会议将得到更广泛的普及。
Android -- 音视频基础知识
帧,是视频的一个基本概念,表示一张画面,如上面的翻页动画书中的一页,就是一帧。一个视频就是由许许多多帧组成的。
帧率,即单位时间内帧的数量,单位为:帧/秒 或fps(frames per second)。一秒内包含多少张图片,图片越多,画面越顺滑,过渡越自然。 帧率的一般以下几个典型值:
24/25 fps:1秒 24/25 帧,一般的电影帧率。
30/60 fps:1秒 30/60 帧,游戏的帧率,30帧可以接受,60帧会感觉更加流畅逼真。
85 fps以上人眼基本无法察觉出来了,所以更高的帧率在视频里没有太大意义。
这里我们只讲常用到的两种色彩空间。
RGB的颜色模式应该是我们最熟悉的一种,在现在的电子设备中应用广泛。通过R G B三种基础色,可以混合出所有的颜色。
这里着重讲一下YUV,这种色彩空间并不是我们熟悉的。这是一种亮度与色度分离的色彩格式。
早期的电视都是黑白的,即只有亮度值,即Y。有了彩色电视以后,加入了UV两种色度,形成现在的YUV,也叫YCbCr。
Y:亮度,就是灰度值。除了表示亮度信号外,还含有较多的绿色通道量。
U:蓝色通道与亮度的差值。
V:红色通道与亮度的差值。
音频数据的承载方式最常用的是 脉冲编码调制 ,即 PCM 。
在自然界中,声音是连续不断的,是一种模拟信号,那怎样才能把声音保存下来呢?那就是把声音数字化,即转换为数字信号。
我们知道声音是一种波,有自己的振幅和频率,那么要保存声音,就要保存声音在各个时间点上的振幅。
而数字信号并不能连续保存所有时间点的振幅,事实上,并不需要保存连续的信号,就可以还原到人耳可接受的声音。
根据奈奎斯特采样定理:为了不失真地恢复模拟信号,采样频率应该不小于模拟信号频谱中最高频率的2倍。
根据以上分析,PCM的采集步骤分为以下步骤:
采样率,即采样的频率。
上面提到,采样率要大于原声波频率的2倍,人耳能听到的最高频率为20kHz,所以为了满足人耳的听觉要求,采样率至少为40kHz,通常为44.1kHz,更高的通常为48kHz。
采样位数,涉及到上面提到的振幅量化。波形振幅在模拟信号上也是连续的样本值,而在数字信号中,信号一般是不连续的,所以模拟信号量化以后,只能取一个近似的整数值,为了记录这些振幅值,采样器会采用一个固定的位数来记录这些振幅值,通常有8位、16位、32位。
位数越多,记录的值越准确,还原度越高。
最后就是编码了。由于数字信号是由0,1组成的,因此,需要将幅度值转换为一系列0和1进行存储,也就是编码,最后得到的数据就是数字信号:一串0和1组成的数据。
整个过程如下:
声道数,是指支持能不同发声(注意是不同声音)的音响的个数。 单声道:1个声道
双声道:2个声道
立体声道:默认为2个声道
立体声道(4声道):4个声道
码率,是指一个数据流中每秒钟能通过的信息量,单位bps(bit per second)
码率 = 采样率 * 采样位数 * 声道数
这里的编码和上面音频中提到的编码不是同个概念,而是指压缩编码。
我们知道,在计算机的世界中,一切都是0和1组成的,音频和视频数据也不例外。由于音视频的数据量庞大,如果按照裸流数据存储的话,那将需要耗费非常大的存储空间,也不利于传送。而音视频中,其实包含了大量0和1的重复数据,因此可以通过一定的算法来压缩这些0和1的数据。
特别在视频中,由于画面是逐渐过渡的,因此整个视频中,包含了大量画面/像素的重复,这正好提供了非常大的压缩空间。
因此,编码可以大大减小音视频数据的大小,让音视频更容易存储和传送。
视频编码格式有很多,比如H26x系列和MPEG系列的编码,这些编码格式都是为了适应时代发展而出现的。
其中,H26x(1/2/3/4/5)系列由ITU(International Telecommunication Union)国际电传视讯联盟主导
MPEG(1/2/3/4)系列由MPEG(Moving Picture Experts Group, ISO旗下的组织)主导。
当然,他们也有联合制定的编码标准,那就是现在主流的编码格式H264,当然还有下一代更先进的压缩编码标准H265。
H264是目前最主流的视频编码标准,所以我们后续的文章中主要以该编码格式为基准。
H264由ITU和MPEG共同定制,属于MPEG-4第十部分内容。
我们已经知道,视频是由一帧一帧画面构成的,但是在视频的数据中,并不是真正按照一帧一帧原始数据保存下来的(如果这样,压缩编码就没有意义了)。
H264会根据一段时间内,画面的变化情况,选取一帧画面作为完整编码,下一帧只记录与上一帧完整数据的差别,是一个动态压缩的过程。
在H264中,三种类型的帧数据分别为
I帧:帧内编码帧。就是一个完整帧。
P帧:前向预测编码帧。是一个非完整帧,通过参考前面的I帧或P帧生成。
B帧:双向预测内插编码帧。参考前后图像帧编码生成。B帧依赖其前最近的一个I帧或P帧及其后最近的一个P帧。
全称:Group of picture。指一组变化不大的视频帧。
GOP的第一帧成为关键帧:IDR
IDR都是I帧,可以防止一帧解码出错,导致后面所有帧解码出错的问题。当解码器在解码到IDR的时候,会将之前的参考帧清空,重新开始一个新的序列,这样,即便前面一帧解码出现重大错误,也不会蔓延到后面的数据中。
DTS全称:Decoding Time Stamp。标示读入内存中数据流在什么时候开始送入解码器中进行解码。也就是解码顺序的时间戳。
PTS全称:Presentation Time Stamp。用于标示解码后的视频帧什么时候被显示出来。
前面我们介绍了RGB和YUV两种图像色彩空间。H264采用的是YUV。
YUV存储方式分为两大类:planar 和 packed。
planar如下:
packed如下:
上面说过,由于人眼对色度敏感度低,所以可以通过省略一些色度信息,即亮度共用一些色度信息,进而节省存储空间。因此,planar又区分了以下几种格式:YUV444、 YUV422、YUV420。
YUV 4:4:4采样,每一个Y对应一组UV分量。
YUV 4:2:2采样,每两个Y共用一组UV分量。
YUV 4:2:0采样,每四个Y共用一组UV分量。
其中,最常用的就是YUV420。
YUV420属于planar存储方式,但是又分两种类型:
YUV420P:三平面存储。数据组成为YYYYYYYYUUVV(如I420)或YYYYYYYYVVUU(如YV12)。
YUV420SP:两平面存储。分为两种类型YYYYYYYYUVUV(如NV12)或YYYYYYYYVUVU(如NV21)
原始的PCM音频数据也是非常大的数据量,因此也需要对其进行压缩编码。
和视频编码一样,音频也有许多的编码格式,如:WAV、MP3、WMA、APE、FLAC等等,音乐发烧友应该对这些格式非常熟悉,特别是后两种无损压缩格式。
但是,我们今天的主角不是他们,而是另外一个叫AAC的压缩格式。
AAC是新一代的音频有损压缩技术,一种高压缩比的音频压缩算法。在MP4视频中的音频数据,大多数时候都是采用AAC压缩格式。
AAC格式主要分为两种:ADIF、ADTS。
ADIF:Audio Data Interchange Format。音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。这种格式常用在磁盘文件中。
ADTS:Audio Data Transport Stream。音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。
ADIF数据格式:
ADTS 一帧 数据格式(中间部分,左右省略号为前后数据帧):
AAC内部结构也不再赘述,可以参考AAC 文件解析及解码流程
细心的读者可能已经发现,前面我们介绍的各种音视频的编码格式,没有一种是我们平时使用到的视频格式,比如:mp4、rmvb、avi、mkv、mov...
没错,这些我们熟悉的视频格式,其实是包裹了音视频编码数据的容器,用来把以特定编码标准编码的视频流和音频流混在一起,成为一个文件。
例如:mp4支持H264、H265等视频编码和AAC、MP3等音频编码。
我们在一些播放器中会看到,有硬解码和软解码两种播放形式给我们选择,但是我们大部分时候并不能感觉出他们的区别,对于普通用户来说,只要能播放就行了。
那么他们内部究竟有什么区别呢?
在手机或者PC上,都会有CPU、GPU或者解码器等硬件。通常,我们的计算都是在CPU上进行的,也就是我们软件的执行芯片,而GPU主要负责画面的显示(是一种硬件加速)。
所谓软解码,就是指利用CPU的计算能力来解码,通常如果CPU的能力不是很强的时候,一则解码速度会比较慢,二则手机可能出现发热现象。但是,由于使用统一的算法,兼容性会很好。
硬解码,指的是利用手机上专门的解码芯片来加速解码。通常硬解码的解码速度会快很多,但是由于硬解码由各个厂家实现,质量参差不齐,非常容易出现兼容性问题。
MediaCodec 是Android 4.1(api 16)版本引入的编解码接口,是所有想在Android上开发音视频的开发人员绕不开的坑。
由于Android碎片化严重,虽然经过多年的发展,Android硬解已经有了很大改观,但实际上各个厂家实现不同, 还是会有一些意想不到的坑。
相对于FFmpeg,Android原生硬解码还是相对容易入门一些,所以接下来,我将会从MediaCodec入手,讲解如何实现视频的编解码,以及引入OpenGL实现对视频的编辑,最后才引入FFmpeg来实现软解,算是一个比较常规的音视频开发入门流程吧。
一、音视频基础知识
视频编码指的就是通过特定的压缩技术,将某个视频格式文件转换成另一种视频格式的文件的方式。
视频流传输中最重要的编解码标准有国际电联的H.261、H.263、H.264和国际标准化组织运动图像专家组的MPEG系列标准。
MPEG系列:(由ISO[国际标准化组织]下属的MPEG[运动图像开发专家组]开发) 视频编码方面主要是MPEG1(VCD)、MPEG2(DVD)、 MPEG4、MPEG4 AVC(正热门)。音频编码方面主要是MPEG Audio Layer 1/2、MPEG Audio Layer 3(MP3) 、 MPEG-2AAC、 MPEG-4 AAC等。
H.26X系列: (由 ITU[国际电传视讯联盟]主导,侧重网络传输,只有视频编码) H.261、H.262、H.263、H.263+、H.263++、H.264(与MPEG4 AVC 合作的结晶)
常见的音频编码格式有AAC、MP3、AC3
MP3:是一种音频压缩技术,它被设计用来大幅度地降低音频数据量。将音乐以1:10 甚至1:12的压缩率,压缩成容量较小的文件,而对于大多数的用户来说,重放的音质于最初不压缩的音频相比没有明显下降。 MP3的特点是,利用人耳对高频信号不敏感的特性,将时域波形信号转换成频域信号,并划分成多个频段,对不同的频段使用不同的压缩率,对高频信号使用大压缩率(甚至忽略信号),对低频信号使用小压缩率,保证信号不失真。这样一来就相当于抛弃人耳基本听不到的高频声音,只保留能听到的低频部分,从而将声音用1:10甚至1:12的压缩率压缩。
AAC:一种专门为声音数据设计的文件压缩格式,与MP3不同,它采用了全新的算法进行编码,更加高效,具有更高的”性价比“,在感觉声音在没有明显降低的前提下,可使文件更加小巧。AAC的优点是,相对于MP3,AAC的音质更加文件更小。AAC缺点是,AAC是属于有损压缩格式,与时下流行的APE、FLAC等无损压缩格式相比音质存在本质上的差距。
AC3:有损音频编码格式。被广泛应用与5.1声道。AC3普及程度很高,唱片、电影院。AC3提供的环绕声系统由5个全频域声道和1个超低音声道组成。
MediaPlayer: 播放控制
MediaCodec: 音视频编解码
OMX: 多媒体部分采用的编解码标准
StageFright:它是一个框架,替代之前的OpenCore,主要是做了一个OMX层,仅仅对OpenCore的omx-component部分做了引用。StageFright是在MediaPlayerService这一层加入的,和OpenCore是并列的。StageFright在Android 中是以共享库的形式存在的(libstegefright.so),其中model----NuPlayer/AwesomePlayer可以用来播放音视频。
AudioTrack : 音频播放。
VLC : Video LAN Client,是一款自由、开源的跨平台多媒体播放器及框架。
FFmpeg : 多媒体解决方案,不是多媒体框架,广泛用于音视频开发中。
GStreamer : 一套构建流媒体应用的开源多媒体框架。
是用于测量显示帧数的量度。所谓的测量单位为每秒显示的帧数。每秒显示帧数或者帧率表示图形处理器处理场时每秒能够更新的次数。30fps就是可以接受的,60fps则可以明显提升交互感和逼真感,但超过75fps就不容易察觉有明显的流畅度提升了。如果帧率超过屏幕刷新率,则会浪费图像的处理能力。
刷新率是指屏幕每秒画面被刷新的次数,刷新率分为垂直刷新率和水平刷新率,一般提到的刷新率通常是指垂直刷新率。垂直刷新率表示屏幕上图像每秒重绘多少次,也就是每秒屏幕刷新的次数,以Hz为单位。刷新率越高,图像就越稳定,图像显示就越自然清晰,对眼睛的影响也越小。达到80Hz以上的刷新率就可以完全消除图像闪烁和抖动感。
编码的目的是压缩数据量,采用编码算法压缩冗余数据。(MPEG、H.26X)
把编码后的音视频数据以一定格式封装到一个容器中,封装格式有mkv、avi、ts等。
码率也就是比特率,比特率是单位时间播放连续的媒体(如压缩后的音频或视频)的比特数量。比特率越高,带宽消耗得越多。比特(bit)0或1
文件大小(b) = 码率(b/s) * 时长(s)
视频质量和码率、编码算法都有关系。
DTS: 即 Decode Time Stamp,主要是用于标示读入内存中比特率在什么时候开始送入解码器中进行解码
PTS: 即Presentation Time Stamp,主要用于度量解码后的视频帧什么时候被显示出来
常见的视频帧有I、P、B帧等
I 帧表示关键帧,可以理解为这一帧画面的完整保留,解码时只需要本帧数据就可以完成(因为包含完整画面)
P 帧表示的是这一帧和之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
B 帧是双向差别帧,也就是B帧记录的是本帧和前后帧的差别,通过前后画面数据与本帧数据的叠加取得最终的画面。B帧压缩率高,但解码时CPU比较吃力。
音频帧的概念没有那么清晰,跟音频编码格式相关,它是各个编码标准自己实现的。
PCM(未经编码的音频数据)来说,它根本就不需要帧的概念,根据采样率和采样精度就可以播放,比如采样率为44.1kHz,采样进度为16位的音频,你可以算出比特率是4410016kb/s,每秒的音频数据是固定的4410016/8字节。
AMR 帧比较简单,它规定每20ms的音频为一帧,每一帧音频都是独立的,有可能采用不同的编码算法以及不同的编码参数。
MP3帧较复杂,包含更多信息,比如采样率、比特率等各种参数。音频数据帧个数由文件大小和帧长决定,每一帧的长度可能不固定,也可能固定,由比特率决定,每一帧又分为帧头和数据实体两部分,帧头记录了MP3的比特率、采样率、版本等信息,每一帧之间相互独立。
表示可以将模拟信号分成多少个等级,量化精度越高,音乐的声压振幅越接近原音乐。量化精度的单位是bit(比特) 。也可以理解为一个采样点用多少比特表示(8/16/24/32bit)。CD--16bit , DVD--24bit。
每秒音频采样点个数(8000/44100Hz),采样单位用Hz表示。
声道是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或者回放时相应的扬声器数量。单声道、立体声道、4声道、5.1声道、7.1声道等。