多媒体直播技术
这是我参与「第四届青训营 」笔记创作活动的第3天
视频的基本元素
- 像素:图像中的最小单位,用rgb表示颜色
- 分辨率:横纵方向的像素数
- 码率/比特率:单位时间传送的bit数(bps),过高的码率导致卡顿,太低的码率导致压缩过度,过于模糊
- 帧:一个画面,帧率是指每秒的画面数,帧率太低导致不连贯、画面闪烁
- 数据封装:视频文件中,画面和声音分开存储,封装在一个文件(容器)中,如MP4,3gp等
- 轨道/流:图像和音频储存在不同轨道中,一个文件中有可以有多个视频流、音频流,还可以有字幕流,同一种流还可以有不同规格;视频流和音频流交替排列,一小段信息称为packet,对顺序读取、下载比较友好,可以边下边播等
- ffmpeg:视频处理工具,支持码率转换、剪辑、格式转换等
- ffplay:用于播放,ffprobe:视频信息
视频压缩
播放本质上是将视频解压缩,然后一帧一帧地进行播放
- 颜色空间:YUV是另一种颜色数据表示方式,三个通道分别是亮度和两种色度,压缩时可以对UV通道进行降采样
- 帧内压缩(空间压缩):静态地图像压缩,用某一区域的数据代表周围区域的数据
- 帧间压缩(时间压缩):利用前后两帧的相关性,只保留两帧之间的残差
- 根据压缩方式,可以对帧进行编码,主要有帧内帧、前向预测帧、双向预测帧,先解码I帧再解码P帧,最后解码B帧,组成group of pictures(GOP)。这种编码方式对解码顺序有要求,B帧会带来较大延迟
- 编码格式:H264,H265,H266 不同压缩方式(算法)
直播推拉流协议
封装格式
- MP4:存在文件头(moov),其中包含了大量的索引和时间信息
- FLV:采用链式格式,更适合直播,但是不容易实现拖拽
推流:推送数据;拉流:获取数据 (CDN网络)
推拉流协议:RTMP、HTTP-FLV、HLS
客户端
直播:图像采集- 图像处理- 编码- 推流
看播:拉流-解码- 图像处理- 渲染
EXOPlayer、IJKPlayer等开源的播放器可以进行调用