多媒体直播技术

163 阅读2分钟

多媒体直播技术

这是我参与「第四届青训营 」笔记创作活动的第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等开源的播放器可以进行调用