媒体处理过程
解协议
将流媒体传输方案中要求的数据解析为标准的相应封装格式数据。
音视频在网络中传播时需要遵守对应的传输方案所要求的格式,如 DASH、HLS 将媒体内容分解成一系列小片段,每个片段有不同的备用码率版本。
同时应用层的协议会要求在媒体文件本身之外,传输信令数据(如对播放的控制或网络状态的描述)
解协议的过程会去除信令数据并保留音视频内容,需要的话还要对视频段进行拼接,最终将其还原成传输之前的媒体格式如 MP4,FLV 等。
封装格式
封装格式如 AVI、MPEG、Real Video 将音频和视频组合打包成一个完整的文件.
封装格式不会影响视频的画质,影响画质的是视频的编码格式。
解封装过程就是将打包好的封装格式分离成某种编码的音频压缩文件和视频压缩文件,有时也包含字幕和脚本。
比如 FLV 或 TS 格式数据,解封装之后得到 H.264-AVC 编码的视频码流和 AAC 编码的音频码流。
编码
视频的本质是一帧又一帧的图片。
所以对于一部每秒 30 帧,90 分钟,分辨率为 1920x1080,24 位的真彩色的视频,在压缩之前的大小$S$满足:
$$ 一帧大小s = 1920 * 1080 * 24 = 49766400(bit) = 6220800(Byte) \ 总帧数n = 90 * 60 * 30 = 162000 \ 总大小S = s * n = 6220800 * 162000 = 1.0077696*10^{12}(Byte) \approx 939(GB) $$
因为未经压缩的视频体积过于庞大,所以需要对其进行压缩,而压缩就是通常所说的编码。
视频编码方式:H.264-AVC,H.265-HEVC,H.266-VVC
音频编码方式:MP3,AAC
压缩比越大,解压还原之后播放的视频越失真,因为压缩过程中不可避免地丢失了视频中原有图像的数据信息。
解码
解码就是解压缩过程。
解码之后能够得到系统音频驱动和视频驱动能识别的音频采样数据(如 PCM 数据)和视频像素数据(如 YUV420,RGB 数据)。
音视频同步
根据时间,帧率和采样率采用一定的算法,同步解码出来的音频和视频数据,将其分别送至声卡和显卡播放。
视频质量指标
分辨率
分辨率指的是视频图像在一个单位尺寸内的精密度。
将视频放大足够大的倍数之后就能看到组成影像的基本单元:像素。
视频的分辨率从数值上描述了像素点的个数,如 1920x1080:视频在水平方向有 1920 个像素,垂直方向有 1080 个像素。
常见的描述方式:
- 1080P:指视频有1080 行像素,P=>Progressive(逐行扫描)
- 2K:指视频有2000 列像素
- MP:像素总数,指像素的行数 P 与列数 K 乘积的结果(百万像素)
- 1080P 的分辨率为 1920x1080=2073600,所以 1080P 通常也称为 200 万像素分辨率
通常视频在同样大小的情况下,分辨率越高,所包含的像素点越多,画面就越细腻清晰
参考链接:
视频帧率
帧率的单位 FPS(Frame Per Second)或 Hz,即每秒多少帧,决定视频画面的流畅程度。
低帧率会导致播放卡顿,镜头移动不顺畅,并伴随画面模糊的主观体验;
帧率过高则会造成眩晕的感觉。
不同帧率的视频在支持不同帧率的设备上播放:
若设备最高支持 60fps,则播放 120fps 视频的时候,设备会每隔一帧删除一帧,被删除的帧即成为无效帧。
所以高帧率的视频在低帧率设备上播放时会导致播放卡顿。
若设备最高支持 120fps,则播放 60fps 视频的时候,设备会每隔一帧复制一帧,来填补空缺的帧位置。
但是效果和在 60fps 上的设备播放一样,不能提升播放流畅度。
关于显卡对帧率的影像:
- 显示器帧率低而显卡输出帧率高时,会导致画面撕裂:显示器同时将两帧或几帧显示在同一个画面上
- 显示器帧率高而显卡输出帧率低时,同视频帧率高显示器帧率低的情况。
视频码率
码率的概念出现在视频编码之后,因为压缩之后的视频已经成为二进制数据,所以使用码率的称呼。
码率的单位是 bps(bit per second),即每秒多少比特。
与视频质量的关系:
分辨率不变的情况下,码率越大,压缩比越好,画面质量越清晰。
码率越高,精度越高,处理出的文件就越接近压缩前的原始状态,每一帧的图像质量越高,画质越清晰,当然对播放设备的解码能力要求也越高。
压缩比越小,视频体积越大,越接近源文件。