这是我参与「第四届青训营 」笔记创作活动的的第8天
一、前言
文章的主要内容如下:
- 视频的基本元素
- 视频压缩
- 直播推拉流协议
- 客户端工作及总结
二、视频的基本元素
像素
像素是指在由一个数字序列表示的图像中的一个最小单位。
每个像素有自己的颜色值,一般为RGB 三原色来表示。
RGB三元色:每种颜色都可用三个变量来表示-红色绿色以及蓝色的强度,它们的取值,R、G、B分别从0到255,一共256个等级。
分辨率
指的是纵横方向的像素数量,一般表示为:宽高 (or 长宽),720*1080等。
码率 / 比特率
表示单位时间内传送 bit 的数目,单位bps,表示是单位时间播放连续的媒体如压缩后的音视频的bit数量,也称为码流。
这种bps的单位电信领域上表示速度,就是我们常说的网速了。100Mbps。
越高的比特率,需要更高的带宽来支撑,否则会带来卡顿、成本等问题。
太低的比特率,可能会导致视频画面过度压缩,模糊不清。
通过改变码率可以让视频文件在保持帧率、分辨率的情况下减少文件体积。
帧 & 帧率
帧
帧就是视频或者动画中的每一张画面,而视频和动画特效就是由无数张画面组合而成,每一张画面都是一帧。
帧率
每秒传输帧数通俗来讲就是指动画或视频的画面数、帧率。每秒钟帧数越多,所显示的动作就会越流畅。
封装
对于任何一部视频来说,只有图像,没有声音,肯定是不行的。所以,视频编码后,加上音频编码,要一起进行封装。
简单来说,就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中。再通俗点,视频轨相当于饭,而音频轨相当于菜,封装格式就是一个饭盒,用来盛放饭菜的容器。
目前主要的视频容器有如下: MPG、VOB、MP4、3GP、ASF、RMVB、WMV、MOV、Divx、MKV、FLV、TS/PS等。 封装之后的视频,就可以传输了,你也可以通过视频播放器进行解码观看。
三、视频压缩
首先要知道视频播放的本质:将视频画面从封装文件中进行解码、渲染。
颜色空间概念(YUV):Y亮度、U和V为色度。
GIF VS MP4
- GIF 图与 MP4 有点相似,都是包含了一组会动态图像的文件
- 但是相同内容的 GIF 和 MP4 文件体积相差非常大,GIF 会比 MP4 大上好几倍,主要原因是 GIF 缺少帧间编码,无法有效地利用图像间的相关信息
帧内压缩 / 空间压缩
- 帧内(Intraframe)压缩也称为空间压缩(Spatial compression)。当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,这实际上与静态图像压缩类似。
- 帧内一般采用有损压缩算法,达不到很高的压缩比。
帧间压缩 / 时间压缩
- 帧间压缩(Interframe compression)也称为时间压缩(Temporal_compression),是基于许多视频或动画的连续前后两帧具有很大的相关性(即连续的视频其相邻帧之间具有冗余信息)的特点来实现的。
- 通过比较时间轴上不同帧之间的数据实施压缩,进一步提高压缩比.一般是无损压缩。
视频编码格式
- H265:压缩比更高,需要更多的算力
- H264:AVC 更普及
- H265:HEVC 更小体积
- H266:VVC 未来可期
- 其它
- Google:VP9
- Netflix:AV1
四、直播推拉流协议
CDN
建立并覆盖在Internet 之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。通过智能调度将用户请求到最接近用户的服务节点,降低用户访问延迟,提升可用性。
边缘节点:指在靠近用户的网络边缘侧构建的业务平台,提供存储、计算、网络等资源,将部分关键业务应用下沉到接入网络边缘,以减少网络传输和多级转发带来的宽度和时延损耗。
不同场景的视频通信方案
名称解释
推流
主播将数据发送到CDN。
拉流
客户端从CDN拉取数据。
推拉流协议
- 实时消息协议(英语:Real-Time Messaging Protocol,缩写RTMP)
- HTTP-FLV Flash Video(简称FLV),是一种网络视频格式,用作流媒体格式。 协议友好,格式简单,便于分发
- HTTP Live Streaming(HLS)是由苹果公司提出基于HTTP的流媒体网络传输协议。
各方案对比
五、客户端工作及总结
客户端
开播过程(推流端)
- 采集方式:摄像头、屏幕、图像采集卡等
- 图像处理的场景:美颜、绿幕、头饰
看播过程(拉流端)
个人总结
在客户端中,多媒体技术的应用在于用于直播以及点播,常见的如抖音小视频、抖音直播、腾讯视频等。
而视频的传输往往有很多要求,比如需要高清、需要实时,而核心的对象就是视频。因此作为客户端开发人员有必要对了解视频的基本元素、视频的编码解码的过程、视频的压缩、常见的视频传输协议等。
六、结语
如果喜欢或有所帮助的话,希望能点赞关注,鼓励一下作者。
如果文章有不正确或存疑的地方,欢迎评论指出。