相关文献:
iOS 音视频(一) - 基础知识
iOS 音视频(二) - 视频编码-H264概念与原理
iOS 音视频(三) - 视频编码-实现H264编解码
iOS 音视频(四) - 音频AAC编解码
文章结掌握内容:
1.视频的构成
2.音视频的文件格式与封装格式
3.音视频的编码方式
4.直播框架介绍
5.了解颜色模型
一、视频的构成
-
图像: 视频内容本身就是一帧一帧的图片构成。人眼只要1秒钟连续播放16张以上的图片,就会认为这是一段连贯的视频。这种物理现象叫视觉暂留。 -
音频: 视频一定是由音频+图像内容构成的,所以音频在视频中是单独的一个部分,针对这一块我们需要单独编码的。 -
元信息:元信息其实就是描述信息的信息,用于描述信息的结构\语义\用途\用法等。比如视频元信息就包含了视频的具体信息,比如编码格式、分辨率、字幕等等.
二、音视频的文件格式与封装格式
1.视频文件格式
我们常见的 Word文档的文件格式是 .doc,JPG图片的文件格式是 .jpg 等等。 对于视频来说,我们常见的文件格式则有 .mov、.avi、.mpg、.vob、.mkv、.rm、.rmvb 等等。
文件格式通常表现为文件在操作系统上存储时的后缀名,它通常会被操作系统用来与相应的打开程序关联,比如你双击一个 test.doc 文件,系统会调用 Word 去打开它。你双击一个 test.avi 或者 test.mkv 系统会调用视频播放器去打开它。
2.视频封装格式
视频封装格式,简称视频格式,相当于一种储存视频信息的容器,它里面包含了封装视频文件所需要的视频信息、音频信息和相关的配置信息(比如:视频和音频的关联信息、如何解码等等)。一种视频封装格式的直接反映就是对应着相应的视频文件格式。
封装格式:就是将已经编码压缩好的视频数据 和音频数据按照一定的格式放到一个文件中.这个文件可以称为容器. 当然可以理解为这只是一个外壳.
容器不仅仅只存放音频数据和视频数据,还会存放 一下视频同步的元数据.例如字幕.这多种数据会不同的程序来处理,但是它们在传输和存储的时候,这多种数据都是被绑定在一起的.
下面我们就列举一些文件封装格式:
| 封装格式 | 描述 |
|---|---|
| AVI | 对应的文件格式为 .avi,英文全称 Audio Video Interleaved,是由 Microsoft 公司于 1992 年推出。这种视频格式的优点是图像质量好,无损 AVI 可以保存 alpha 通道。缺点是体积过于庞大,并且压缩标准不统一,存在较多的高低版本兼容问题。 |
| DV-AVI | 对应的文件格式为 .avi,英文全称 Digital Video Format,是由索尼、松下、JVC 等多家厂商联合提出的一种家用数字视频格式。常见的数码摄像机就是使用这种格式记录视频数据的。它可以通过电脑的 IEEE 1394 端口传输视频数据到电脑,也可以将电脑中编辑好的的视频数据回录到数码摄像机中。 |
| WMV | 对应的文件格式是 .wmv、.asf,英文全称 Windows Media Video,是微软推出的一种采用独立编码方式并且可以直接在网上实时观看视频节目的文件压缩格式。在同等视频质量下,WMV 格式的文件可以边下载边播放,因此很适合在网上播放和传输。 |
| MPEG | 对应的文件格式有 .mpg、.mpeg、.mpe、.dat、.vob、.asf、.3gp、.mp4 等等,英文全称 Moving Picture Experts Group,是由运动图像专家组制定的视频格式,该专家组于 1988 年组建,专门负责视频和音频标准制定,其成员都是视频、音频以及系统领域的技术专家。MPEG 格式目前有三个压缩标准,分别是 MPEG-1、MPEG-2、和 MPEG-4。MPEG-4 是现在用的比较多的视频封装格式,它为了播放流式媒体的高质量视频而专门设计的,以求使用最少的数据获得最佳的图像质量。 |
| Matroska | 对应的文件格式是 .mkv,Matroska 是一种新的视频封装格式,它可将多种不同编码的视频及 16 条以上不同格式的音频和不同语言的字幕流封装到一个 Matroska Media 文件当中。 |
| Real Video | 对应的文件格式是 .rm、.rmvb,是 Real Networks 公司所制定的音频视频压缩规范称为 Real Media。用户可以使用 RealPlayer 根据不同的网络传输速率制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放。 |
| QuickTime File Format | 对应的文件格式是 .mov,是 Apple 公司开发的一种视频格式,默认的播放器是苹果的 QuickTime。这种封装格式具有较高的压缩比率和较完美的视频清晰度等特点,并可以保存 alpha 通道。 |
| Flash Video | 对应的文件格式是 .flv,是由 Adobe Flash 延伸出来的一种网络视频封装格式。这种格式被很多视频网站所采用。 |
三、音视频的编码方式
音视频编解码的过程是指对数字视频进行压缩或解压缩的一个过程。
在做视频编解码时,需要考虑以下这些因素的平衡:
视频的质量、用来表示视频所需要的数据量(通常称之为码率)、编码算法和解码算法的复杂度、针对数据丢失和错误的鲁棒性(Robustness)、编辑的方便性、随机访问、编码算法设计的完美性、端到端的延时以及其它一些因素。
1.视频编码方式
-
H.26X 系列:由国际电传视讯联盟远程通信标准化组织(ITU-T)主导,包括 H.261、H.262、H.263、H.264、H.265
| H.26X 系列 | 描述 |
|---|---|
| H.261 | 主要用于老的视频会议和视频电话系统。是第一个使用的数字视频压缩标准。实质上说,之后的所有的标准视频编解码器都是基于它设计的。 |
| H.262 | 等同于 MPEG-2 第二部分,使用在 DVD、SVCD和大多数数字视频广播系统和有线分布系统中。 |
| H.263 | 主要用于视频会议、视频电话和网络视频相关产品。在对逐行扫描的视频源进行压缩的方面,H.263 比它之前的视频编码标准在性能上有了较大的提升。尤其是在低码率端,它可以在保证一定质量的前提下大大的节约码率。 |
| H.264 | 等同于 MPEG-4 第十部分,也被称为高级视频编码(Advanced Video Coding,简称 AVC),是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。该标准引入了一系列新的能够大大提高压缩性能的技术,并能够同时在高码率端和低码率端大大超越以前的诸标准。 |
| H.265 | 被称为高效率视频编码(High Efficiency Video Coding,简称 HEVC)是一种视频压缩标准,是 H.264 的继任者。HEVC 被认为不仅提升图像质量,同时也能达到 H.264 两倍的压缩率(等同于同样画面质量下比特率减少了 50%),可支持 4K 分辨率甚至到超高画质电视,最高分辨率可达到 8192×4320(8K 分辨率),这是目前发展的趋势。 |
-
MPEG 系列,由国际标准组织机构(ISO)下属的运动图象专家组(MPEG)开发。
| MPEG 系列 | 描述 |
|---|---|
| MPEG-1 第二部分 | 主要使用在 VCD 上,有些在线视频也使用这种格式。该编解码器的质量大致上和原有的 VHS 录像带相当。 |
| MPEG-2 第二部分 | 等同于 H.262,使用在 DVD、SVCD 和大多数数字视频广播系统和有线分布系统中。 |
| MPEG-4 第二部分 | 可以使用在网络传输、广播和媒体存储上。比起 MPEG-2 第二部分和第一版的 H.263,它的压缩性能有所提高。 |
| MPEG-4 第十部分 | 等同于 H.264,是这两个编码组织合作诞生的标准。 |
-
其他编码方式:AMV、AVS、Bink、CineForm 等等,这里就不做多的介绍了。
一个 H.264/MOV 的视频文件,它的封装方式就是 QuickTime File Format,编码方式是 H.264。
2.音频编码方式
| 音频编码方式 | 描述 |
|---|---|
| AAC | 英文全称 Advanced Audio Coding,是由 Fraunhofer IIS、杜比实验室、AT&T、Sony等公司共同开发,在 1997 年推出的基于 MPEG-2 的音频编码技术。2000 年,MPEG-4 标准出现后,AAC 重新集成了其特性,加入了 SBR 技术和 PS 技术,为了区别于传统的 MPEG-2 AAC 又称为 MPEG-4 AAC。 |
| MP3 | 英文全称 MPEG-1 or MPEG-2 Audio Layer III,是当曾经非常流行的一种数字音频编码和有损压缩格式,它被设计来大幅降低音频数据量。它是在 1991 年,由位于德国埃尔朗根的研究组织 Fraunhofer-Gesellschaft 的一组工程师发明和标准化的。MP3 的普及,曾对音乐产业造成极大的冲击与影响。 |
| WMA | 英文全称 Windows Media Audio,由微软公司开发的一种数字音频压缩格式,本身包括有损和无损压缩格式。 |
3.直播/小视频使用的编码格式
- 视频编码H264编码的优势:
- 低码率
- 高质量的图像
- 容错能力强
- 网络适应性强
总结: H264最大的优势,具有很高的数据压缩比率,在同等图像质量下,H264的压缩比是MPEG-2的2倍以上,MPEG-4的1.5~2倍.
举例: 原始文件的大小如果为88GB,采用MPEG-2压缩标准压缩后变成3.5GB,压缩比为25∶1,而采用H.264压缩标准压缩后变为879MB,从88GB到879MB,H.264的压缩比达到惊人的102∶1
- 音频编码AAC编码的优势:
AAC是目前比较热门的有损压缩编码技术,并且衍生了LC-AAC、HE-AAC、HE-AAC v2 三种主要编码格式。
- LC-AAC 是比较传统的AAC,主要应用于中高码率的场景编码(>= 80Kbit/s)
- HE-AAC 主要应用于低码率场景的编码(<= 48Kbit/s)
优势:在小于128Kbit/s的码率下表现优异,并且多用于视频中的音频编码;
适合场景:于128Kbit/s以下的音频编码,多用于视频中的音频轨的编码。
四.直播框架介绍
1.直播产品种类
- 泛娱乐化直播
花椒、映客等娱乐直播,还有斗鱼、熊猫等游戏直播 - 实时互动直播
音视频会议、教育直播等,像Zoom、声网
泛娱乐化直播:大规模直播(没有互动),多为观看,可以使用该架构。支持rtmp、hls、http/flv
实时互动直播:使用了RTP协议,与目前的学习协议不同;常用webrtc
2.泛娱乐化直播架构
1.主播端发送信令到信令服务器,创建房间,返回房间地址;
2.主播向获取的房间地址推流;
3.也是主播端,同1,只是协议不同;
4.同2;
5.观众端要观看节目,也需要发送信令给信令服务器。获取到主播节目的媒体流的地址;
6.观众端获取了主播节目流地址,就可以去CDN流媒体云中去拉流。赞赏、聊天,发送给信令服务器处理。
3.实时互动直播架构
实时互动直播需要自己创建网络,创建网络采用的是UDP协议而不是TCP协议(原因参考TCP与UDP);还有个原因就是业务的需求,因为为了保证客户随时都能使用实时互动直播服务,就必须保证服务器24小时正常运转。所以一般后台服务端都采用多个节点,当其中某个节点出现问题,可以将这个节点的所有业务切换到正常节点。
所有节点都通过控制中心来管理,控制中心与节点之间通过心跳保存通信,每个节点都定期向控制中心报告其状况(比如CPU、内存占用情况、网络占用情况等等),控制中心会根据节点的状况数据进行决策,当发现某个节点CPU过高或者某个指标不达标时将其业务转到其他节点或者有新的业务时分配给其他负载更低的节点去执行,以保证每个节点负载均衡。实际上节点和控制中心之间还有个内总线,内总线的作用是保证数据的安全。
如果是对于既有实时互动直播又需要观众观看,那就需要实时互动直播架构和泛娱乐化架构进行融合。此时的泛娱乐化架构中会多出一个媒体服务器,媒体服务器主要起到转换的作用。
因为实时互动直播架构采用UDP协议和RTP(实时传输协议)传输,RTP包通过内总线传到媒体服务器,媒体服务器将RTP流转换成rtmp流后传到CDN网络,然后观众就可以像泛娱乐直播那样去获取直播内容。
4.直播App框架
流程
- 采集视频,音频
使用iOS原生框架 AVFoundation.framework
- 视频滤镜处理
使用iOS原生框架 CoreImage.framework
使用第三方框架 GPUImage.framework
GPUImage OC版本下载地址
GPUImage Swift版本下载地址
- 视频\音频编码压缩
- 硬编码:
视频:VideoToolBox框架
音频:AudioToolBox框架 - 软编码
视频: 使用FFmpeg,X264算法把视频原数据YUV/RGB编码成H264
音频: 使用fdk_aac将音频数据PCM转换成AAC
- 推流: 将采集的音频/视频数据通过流媒体协议发送到流媒体服务器.
推流技术:
- 流媒体协议: RTMP\RTSP\HLS\FLV
- 视频封装格式: TS\FLV
- 音频封装格式: Mp3\AAC
-
流媒体服务器
数据分发、截屏、实时转码、内容检测
-
拉流
从流媒体服务器中获取音频\视频数据
流媒体协议: RTMP\RTSP\HLS\FLV -
解码
视频音频的解码框架还是和编码同样的框架. -
音视频播放
-
ijkplayer播放框架 -
kxmovie播放框架
ijkplayer / kxmovie 都是基于FFmpeg框架封装的。
五、了解颜色模型
开发场景中使用最多的应该是 RGB 模型:
RGB
在 RGB 模型中每种颜色需要 3 个数字,分别表示 R、G、B,通常一个数字占用 1 字节,那么表示一种颜色需要 24 bits。
那么有没有更高效的颜色模型能够用更少的 bit 来表示颜色呢?
在彩电还没研发出来之前,人们用的是黑白电视,使用的是YUV模型。
定义一个Y「亮度(Luminance)」的概念来表示颜色的亮度,那它就可以用含 R、G、B 的表达式表示为:
Y = kr*R + kg*G + kb*B
Y 即「亮度」,kr、kg、kb 即 R、G、B 的权重值。
定义一个UV「色度(Chrominance)」的概念来表示颜色的差异:
Cr = R – Y
Cg = G – Y
Cb = B – Y
Cr、Cg、Cb 分别表示在 R、G、B 上的色度分量。上述模型就是 YCbCr 颜色模型基本原理。
在YCbCr 中 Y 是指亮度分量,Cb 指蓝色色度分量,而 Cr 指红色色度分量。
从 ITU-R BT.601-7 标准中拿到推荐的相关系数,就可以得到 YCbCr 与 RGB 相互转换的公式:
Y = 0.299R + 0.587G + 0.114B
Cb = 0.564(B - Y)
Cr = 0.713(R - Y)
R = Y + 1.402Cr
G = Y - 0.344Cb - 0.714Cr
B = Y + 1.772Cb
- 在 YUV 中 Y 表示的是「亮度」,也就是灰阶值,U 和 V 则是表示「色度」。
- YUV 的关键是在于它的亮度信号 Y 和色度信号 U、V 是分离的。
那就是说即使只有 Y 信号分量而没有 U、V 分量,我们仍然可以表示出图像,只不过图像是黑白灰度图像。
YUV常见格式
- YUV4:4:4 (YCbCr 4:4:4)--理解为1:1:1,就是4个Y对应4个U和4个V。
YUV4:4:4
- YUv4:2:2 (YCbCr 4:2:2)--YUV4:2:2就是比RGB小了三分之一;RGB需要8:8:8.YUV也是节省了很多空间,这是历史原因。
YUv4:2:2
- YUV4:2:0 (YCbCr 4:2:0)--这比RGB少了二分之一。
YUV4:2:0 最常见
YUV存储格式
-
plannar(平面)
I420 : YYYYYYYY UU WV --> YUV420P (PC端用的)
YV12: YYYYYYYY VV UU --> YUV420P -
packed (#T5)
NV12: YYYYYYYY UVUV --> YUV420SP (iOS)
NV21: YYYYYYYY VUVU --> YUV420SP (安卓)
有可能在开发过程,比如i0S/安卓在解码视频后发现视频图像出现倒置或者翻转,有可能是因为他们的YUV的格式不一致。
因为PC端一般常用与 I420,安卓一般默认 NV21,iOS一般默认是 NV12。如果想行为统一就需要保证一致的存储格式。









网友评论