这是我参与「第四届青训营 」笔记创作活动的第5天。
01 视频的基本元素
像素:是指在由一个数字序列表示的图像中的一个最小单位,称为像素,通常表现为一个小方格。每个像素有自己的颜色值,一般为 RGB三原色来表示。
分辨率:指的是纵横方向的像素数量,一般表示为:宽x高(or长x宽),720*1080等
码率/比特率:表示单位时间内传送bit 的数目,单位bps,表示是单位时间播放连续的媒体如压缩后的音视频的bit数量,也称为码流。这种bps的单位电信领域上表示速度,就是我们常说的网速了。100Mbps 越高的比特率,需要更高的带宽来支撑,否则会带来卡顿、成本等问题 太低的比特率,可能会导致视频画面过度压缩,模糊不清
不是码率越高越好,如果带宽不够支撑,会卡顿。
帧率:每秒传输帧数,帧率越高越流畅,一帧是一个画面。
视频数据的封装:封装:就是封装格式,简单来说,就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中。 再通俗点,视频轨相当于饭,而音频轨相当于菜,封装格式就是一个饭盒,用来盛放饭菜的容器。
视频流和音频流是分开摆放的,类型不同。他们交错排列,虽然视频与音频数据是可以独立存在的,不过合并到视频文件后,我 们的文件一 般是顺序下载的。一个位置的音视频数据相隔太远的话会 造成卡顿、音画不同步。
02 视频压缩
RGB信号不利于压缩,在视频通信系统中采用YUV。y是亮度,uv是色度。
通过降采样,YUV420可以节省1/2数据量。
压缩:利用视频画面的相关性减少数据量,有帧内压缩和帧间压缩。
帧的编码类型有I帧(帧内),P帧(前项),B帧(双向)。
不同场景对gop的设置:
- 视频点播:节省带宽,高压缩率,会使用B帧
- 直播:低延迟,不使用B帧
- 视频编辑:提高响应,个别会使用全I帧
03 直播推拉流协议
封装格式有MP4,flv,cdn。推流:主播将数据发送到CDN网络; 拉流:观众从CDN拉取直播数据。
推流协议:rtmp
- 基于tcp协议,比较可靠,丢包问题较少出现。而且延迟比较低,转换成flv时去掉包头即可。
- iOS不支持rtmp协议。
拉流协议:
- HTTP-FLV
- HTTP Live Streaming(iOS)
04 客户端工作及总计
(青训营PPT)