探索多媒体直播技术 | 青训营笔记

133 阅读4分钟

探索多媒体直播技术

这是我参与「第四届青训营 」笔记创作活动的的第4天

概要

  • 视频的基本元素
  • 视频压缩
  • 视频推拉流
  • 客户端工作

视频的基本元素

  • 像素: 图像中的一个最小单位,通常表现为一个小方格。每个像素有自己的颜色值,一般使用RGB三原色表示
  • RGB三原色: 用来表示一种颜色,R(ed)、G(reen)、B(lue)的取值都是0到255,一共256个等级(类似的颜色表示方案还有hsl)
  • 分辨率: 纵横方向的像素数量,一般表示为宽×高(如720×1080)
  • 码率/比特率: 表示单位时间内传送bit的数量,单位是bps(bit per second),越高的比特率需要更高的带宽来支撑,否则会带来卡顿、成本等问题,太低的比特率,可能会导致视频画面过度压缩,模糊不清
  • 帧率: 每秒传输的帧数就是帧率,单位FPS(frame per second),每秒帧数越多,所显示的动作就会越流畅
  • 视频数据的封装: 一般来说,视频编码后,要加上音频编码一起进行封装,目前主要的视频容器有MPG、VOB、MP4、3GP、ASF、RMVB、MOV、MKV、FLV、TS/PS等
  • 轨道/流:使用ffprobe可以看到视频的流信息,比如一个视频可能有一个视频轨道和一个音频轨道,也有可能有一个视频流和多个音频流(不同的语言音轨)和多个字幕流,视频流、音频流数据相互交错排列,形成混流

视频压缩

  • 色彩空间压缩: YUV是另一种(相对RGB)颜色数字化表示方式,视频中之所以使用YUV是因为RGB信号不利于压缩,而YUV加入了亮度这一概念,并且人眼对色度的敏感程度要低于对亮度的敏感程度,所以颜色信息就可以被压缩

  • 帧内压缩/空间压缩: 基于本帧的数据而不考虑相邻帧之间的冗余信息,与静态图像压缩类似,一般采用有损压缩算法,达不到很高的压缩比

  • 帧间压缩/时间压缩: 基于许多视频的连续前后两帧具有很大的相关性(即相邻帧具有冗余信息)来实现

    • I-frame:Intra-frame 帧内帧

    • P-frame:Predicted Frame 前向预测帧

    • B-frame:Bi-Directional frame 双向预测帧

    • 视频点播:节省带宽,高压缩率,会使用 B 帧

      直播:低延迟,不使用 B 帧

      视频编辑:提高响应,个别会使用全 I 帧

  • 视频编码格式: H264 VS H265,H264更普及,H265压缩比更高、需要更多算力

视频推拉流

  • CDN: 内容分发网络,通过智能调度将用户请求到最接近用户的服务节点,降低用户访问延迟,提升可用性

  • 推拉流协议: 主要有RTMP(Real-Time Messaging Protocol)、HTTP-FLV(HTTP+FLV)、HLS(Http Live Streaming)

    • RTMP:也称实时消息传输协议,是最初由Macromedia为通过互联网在Flash播放器与一个服务器之间传输流媒体音频、视频和数据而开发的一个专有协议。后被 Adobe公司收购。

      优势:

      基于 tcp 协议

      技术成熟,Ffmpeg 项目中有 rtmp 库

      低延迟

      劣势:

      停止更新

      规范上没有支持 H265

      使用 1935 端口,会被防火墙阻碍

    • HTTP-FLV: 是一种网络视频格式,用作流媒体格式。 协议友好,格式简单,便于分发

    • HLS: 由苹果公司提出基于HTTP的流媒体网络传输协议。

      它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的扩展M3U (m3u8) 播放列表文件,用于寻找可用的媒体流。

客户端工作

  • 推流端: 图像采集 -> 图像处理(可选) -> 编码+封装 -> 推流
    • 采集方式:摄像头、屏幕、图像采集卡等
    • 图像处理的场景:美颜、绿幕、头饰
  • 拉流端: 拉流 -> 解封装+解码(硬/软解) -> 图像处理(可选) -> 渲染
    • 图像处理的场景:超分辨率、美图
  • 音画同步: 因为人对于音频更敏感,所以要保证音频帧按照既定速率持续播放,视频帧向音频帧对齐