标签:内容 文件中 封装 code 使用 load 间隔 layer com
从图中可以看到,我们拿到一个视频文件(例如MP4)后,需要经过一下几个步骤,才能将其播放出来:
1)解封装,即将MP4容器解开,拿出其中的视频码流(码流一般指编码后的数据)、音频码流、字幕、元数据信息等。
2)分别对音频码流和视频码流进行解码,解码需要响应的解码器,例如H.264的解码器对H.264码流进行解码。
3)视频码流解码后我们一般得到YUV数据,这种数据可以直接由显示器进行显示。音频码流解码后我们一般得到PCM数据。
4)在拿到YUV数据和PCM数据后,就可以交给显示器和音响进行输出了,输出的同时要进行音视频的同步,确保画面和声音的同步性。
容器,即音视频文件的封装格式,例如我们常见的MP4、RMVB、TS、FLV、AVI、MKV等。
他是用于将编码好的视频码流、音频码流、字幕和一些信息封装成一个文件,这个文件就是我们平时播放的视频文件。
一般来说,我们看到的文件后缀,例如*.mp4、*.mkv就表示这个文件是用什么格式封装的。要打开这个文件,则需要对应的解封装器。
容器中包含的内容如下图所示:
目前使用比较多的容器主要是MP4、AVI、MKV等。MP4是目前应用最多的封装格式,可支持多码流封装。而AVI由于只支持一个视频码流和一个音频码流,是一种比较老的封装技术,目前逐渐被淘汰。MKV也是一种比较好的封装格式,一般用在高清电影中。
视频编码:将采集到的视频数据使用压缩算法处理成码流。例如YUV--->H.264等。
视频解码:将码流解码为原始图像数据YUV或RGB。例如H.264--->YUV等。
编码和解码是一一对应的关系,使用什么编码器进行编码,就要采用对应的解码器进行解码。
常见的一些视频编码格式:
名称 | 推出机构 | 推出时间 | 一般使用领域 |
HEVC(H.265) | MPEG/ITU-T | 2013 | 研发推广中 |
H.264 | MPEG/ITU-T | 2003 | 各个领域,很常用 |
MPEG4 | MPEG | 2001 | 不温不火 |
MPEG2 | MPEG | 1994 | 数字电视 |
VP9 | 2013 | 研发中 | |
VP8 | 2008 | 不普及 | |
VC-1 | Microsoft Inc. | 2006 | 微软平台 |
目前在学习中主要使用h.264作为编码案例。
音频编码:将采集到的音频数据使用压缩算法处理成码流。例如PCM--->MP3等。
音频解码:将码流解码为原始音频数据PCM。例如AC-3--->PCM等。
常见音频编码格式:
名称 | 推出机构 | 推出时间 | 一般使用领域 |
AAC | MEPG | 1997 | 各个领域(新) |
AC-3 | Dolby Inc. | 1992 | 电影 |
MP3 | MPEG | 1993 | 各个领域(旧) |
WMA | Microsoft Inc. | 1999 | 微软平台 |
视频像素数据:视频码流经过解码后可以得到视频像素数据,保存了屏幕上每个像素点的像素值。
常见的像素数据格式有RGB24、RGB32、YUV420P、YUV422P,YUV444P等,压缩编码中,一般使用的是YUV格式的像素数据,最为常见的格式为YUV420P。
YUV是由RGB转换成的一种格式。
RGB保存的是红、绿、蓝三个颜色通道,数值大小代表该颜色的亮度。
YUV格式的Y保存的只是亮度,而UV保存的是颜色和饱和度。
后面的420、444、422表示取样方式,444表示完全取样,422表示水平2:1取样,垂直完全采样,420表示水平和垂直都2:1采样。目前大部分使用的是YUV420,在后面的学习过程中也主要使用420采样方式。
特点:视频像素数据体积很大,一般情况下1小时高清(1080P)视频的RGB24格式的数据体积为,3600秒*25帧/秒*1920*1080*3=559.9GByte。
播放器:YUV也是可有用专门的播放器来进行播放的,例如YUV player。
研究发现人眼对亮度信息比较敏感,而对色度信息不是很敏感,所以将RGB中的色度和亮度信息分离,就形成了YUV。
在压缩的时候,压缩算法会对色度进行进行更“狠”的压缩,更大限度的提高了压缩率,而又不对视频效果有较大影响。
YUV在存储的时候,和RGB不一样的是,他先存储整个图像的Y值,然后存储U值,再存储V值。而RGB是像素点的排列顺序来存储的(不利于压缩)。
音频采样数据:从模拟数据中采样出来的数字音频原始数据PCM。我们的声音数据在一般的电气设备中都是以模拟信号形式存在的(连续的),而这种方式的数据,在电脑中是不能处理的,所以我们要将其转换为数字信号(离散的)。每隔一段时间我们在连续波中进行一次采样,当间隔时间非常小的时候,就可以将模拟信号转换为几乎不失真的离散数据。
采样设计几个概念:
采样率:即每秒钟采样的次数,一般有44100Hz和48000Hz,也就是44.1KHz和48.0KHz。
采样精度:每次采样的数据大小,例如16bit,即一个点2byte(视频RGB24的一个像素点为24bit,即3byte)。
声道:声音可能有多声道,所以大小要乘以声道数。存储方式是按顺序存储采样点,例如左右左右左右左右......
尺寸计算:例如4分钟的两声道(左右声道)PCM音频的大小为 4分钟*44100Hz*2声道*2byte=42.3MBytes,可以看到PCM的体积还是很大的,不利于数据的传输和存储。
查看工具:Adobe Audition
从以上的几个概念,我们可以知道,采样率、采样精度越高理论上声音效果越好,对应文件大小也越大。声道的数量主要是便于还原声音的真实场景,声道越多营造的环境更真实,各个方向或声源发出的声音不会全部混杂在一个声道中,声音会更有辨析度。
无损:我们常听说的无损音频就是指经过压缩后的音频在解压缩后能够恢复原始PCM,没有任何数据丢失。而相对的有损压缩,是为了更大的压缩比,压缩的时候会丢失一部分不那么重要的数据,这种压缩方式解压缩后,会比原本的PCM数据少。
该工具主要用于查看视频文件的封包信息,例如容器中包含哪些视频码流和音频码流等。
查看封装格式详细信息。
这个工具可以用于查看码流中帧的详细信息,例如I、P、B帧,以及直观的看到压缩算法是如何来对图像进行处理的(可以大概了解)。
可以从图中看到,红色柱状为I帧,蓝色为P帧,绿色为B帧。I帧包含所有的图像信息,所以体积最大,而P帧只保留了一部分数据,其余数据根据前面的帧来计算,所以大小偏小,B帧是根据前后帧进行计算,所以占用的空间最小。
我们可以看到每一帧对应画面:
可以看到图像被分成若干网格,有些网格比较细致,有些要粗一些,并且可以看到每个单元格的类型。这就是压缩算法会根据图像各部分的具体复杂度来对数据进行压缩,在减小体积的同时,能够尽可能保证图像不失真。
用于播放YUV原始视频文件。
注意,YUV格式的视频文件是没有文件头信息的,也就是说播放器不会知道该文件中的视频数据的分辨率、采样格式(420、444等)等基础信息,我们在播放他时需要手工指定这些信息,如果指定错误,则画面全是乱的。
用于查看PCM音频文件。
注意:PCM文件也是没有文件头信息的,我们在播放他时需要手工指定采样率、通道(声道)、分辨率(采样精度)等。当指定错误的话,声音会出问题,例如采样率指定太高,可能声音播放速度会变快,采样精度写错的话,声音杂乱不堪。
===
标签:内容 文件中 封装 code 使用 load 间隔 layer com
原文地址:https://www.cnblogs.com/leokale-zz/p/13073348.html