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

147 阅读5分钟

这是我参与「第四届青训营 」笔记创作活动的第11天。 本文主要对探索多媒体直播技术课程进行笔记梳理。该笔记主要对视频的一些主要概念:分辨率、帧、码、目前流行的尺寸、容器形式等等进行说明。

概览

  • 视频的基本元素
    • 分辨率
    • 帧率
    • 码率
    • 视频轨道
  • 视频压缩
    • I、P、B帧的特点
    • GOP的概念
    • H264、H265编码的特点
  • 直播推拉流协议
    • 对比不同视频场景的技术方案选取
    • 对比FLV和MP4的封装特点
    • 介绍RTMP/HTTP-FLV/HLS的特点和选择
  • 客户端工作及总结
    • 开播:图像采集、图像处理、编码、推流
    • 看播:拉流、解码、图像处理、渲染

像素

最小单位,RGB三原色表示。0-255

分辨率

宽高or长宽 720*1080等等

目前手机多是可以1080p,为了电池的容量,长期携带的特性。 《双子神偷》120帧率,4k的高清

码率/比特率

单位时间内传送bit的数目,单位bps,表示的是单位时间播放连续的媒体,如压缩后的音视频的bit数量,称为码流。

  1. 越高的比特率,需要更高的带宽来支持,否则带来卡顿、成本等问题;过低的比特率,可能导致视频画面过度压缩、模糊不清。
  2. 通过改变码率可以让视频文件在保持帧率、分辨率的情况下减少文件体积。

帧 & 帧率

帧(frame):帧就是视频或者动画中的每一张画面。而视频和动画特效就是由无数张 画面/帧 组合而成。

帧率(Frame Rate):每秒传输帧数。每秒钟帧数越多,所显示的动作就越流畅。

封装

目前主要的视频容器: MPG、VOB、MP4、3GP、ASF、RMVB等等

用时间戳来关联音频与画面

GIF与MP4

相同内容时GIF比MP4大,因为GIIF缺少帧间编码,无法利用图像间的相关信息。

帧内压缩/空间压缩

帧内(Intraframe)压缩也称为空间压缩(Spatial compression)。压缩一帧图像与静态图像压缩类似。 帧内一般采用有损压缩算法,达不到很高的压缩比。

帧间压缩/时间压缩

帧间压缩(Interframe compression)也称为时间压缩(Temporal_compression),是基于许多视频或动画的连续前后两帧具有很大的相关性(即连续的视频其相邻帧之间具有冗余信息)的特点来实现的。 通过比较时间轴上不同帧之间的数据实施压缩,进一步提高压缩比。一般是无损压缩。

I、P、B

image.png

GOP(Group of Picures)

不同类型的帧组合成 GOP 的概念

视频改变播放进度后,如果不在同一个 GOP 中,需要从新位置所在的 GOP 的 I 帧开始解码

拖动后起播所需的耗时取决于位置在 GOP 中的位置,越靠前能越快响应

对于进度条,当拖拽时进行解码会耗时较长,这时候会选择较前较近的另一个点开始作为新的解码起点,降低加载速度,从而留住观众(观众进行拖拽时一般并没有特别确定指定的开始位置)

对于视频和音频,为什么是交叉排序的?

答:便于预加载后,视频与音频同步播出

不同场景适用的帧:

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

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

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

直播推拉流协议:

CDN

很多结点,一级一级分发。优化:IP地址,找到最近的进行转播播放

image.png

封装格式:MP4

Moov:Movie Box,存储 mp4 的 metadata,一般位于mp4文件的开头。

按一定格式将视频数据和音频数据放在一个文件夹中。在某一特定场景,例如为了追求秒播率,会在moov装入大量数据等等。

Stbl:Sample Table Box

包含了这些媒体数据的索引以及时间信息

封装格式:FLV(Flash Video)

FLV是一个二进制文件,由文件头(FLV header)和很多tag组成。

tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流(关键字或者文件信息之类)

推拉流协议

直播互动延迟低于200ms,WebRTC低延迟

RTMP:Real-Time Messaging Protocol

HTTP-FLV:HTTP + FLV

HLS:HTTP Live Streaming

实时消息协议(RTMP)Real-Time Messaging Protocol

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

HTTP-FLV Flash Video(FLV)

网络视频格式,用作流媒体格式

协议友好,格式简单,便于分发,延迟低,不会转码

image.png

对比

image.png

推流段

图像采集 => 图像处理(可选) => 编码+封装 => 推流到CDN

拉流端

从CDN拉流 => 解封装+解码 => 图像处理(可选) => RGB渲染

解码:将视频数据解码成RGB图像

  • 硬件解码 依赖于设备有相关附带的设备(相关的解码的芯片等等)
  • 软件解码(CPU)对手机发热和卡顿有一定影响

音画同步

解码时都会全力以赴,但视频比音频大,需要时间长;而人对音频比较敏感,所以需要将视频向音频对齐。

安卓的软件: 谷歌esoPlayer、bilibili ijkPlayer

参考文档:【Android 客户端专场 学习资料二】第四届字节跳动青训营 - 掘金 (juejin.cn) 的第二部分