这是我参与「第四届青训营 」笔记创作活动的第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数量,称为码流。
- 越高的比特率,需要更高的带宽来支持,否则带来卡顿、成本等问题;过低的比特率,可能导致视频画面过度压缩、模糊不清。
- 通过改变码率可以让视频文件在保持帧率、分辨率的情况下减少文件体积。
帧 & 帧率
帧(frame):帧就是视频或者动画中的每一张画面。而视频和动画特效就是由无数张 画面/帧 组合而成。
帧率(Frame Rate):每秒传输帧数。每秒钟帧数越多,所显示的动作就越流畅。
封装
目前主要的视频容器: MPG、VOB、MP4、3GP、ASF、RMVB等等
用时间戳来关联音频与画面
GIF与MP4
相同内容时GIF比MP4大,因为GIIF缺少帧间编码,无法利用图像间的相关信息。
帧内压缩/空间压缩
帧内(Intraframe)压缩也称为空间压缩(Spatial compression)。压缩一帧图像与静态图像压缩类似。 帧内一般采用有损压缩算法,达不到很高的压缩比。
帧间压缩/时间压缩
帧间压缩(Interframe compression)也称为时间压缩(Temporal_compression),是基于许多视频或动画的连续前后两帧具有很大的相关性(即连续的视频其相邻帧之间具有冗余信息)的特点来实现的。 通过比较时间轴上不同帧之间的数据实施压缩,进一步提高压缩比。一般是无损压缩。
I、P、B
GOP(Group of Picures)
不同类型的帧组合成 GOP 的概念
视频改变播放进度后,如果不在同一个 GOP 中,需要从新位置所在的 GOP 的 I 帧开始解码
拖动后起播所需的耗时取决于位置在 GOP 中的位置,越靠前能越快响应
对于进度条,当拖拽时进行解码会耗时较长,这时候会选择较前较近的另一个点开始作为新的解码起点,降低加载速度,从而留住观众(观众进行拖拽时一般并没有特别确定指定的开始位置)
对于视频和音频,为什么是交叉排序的?
答:便于预加载后,视频与音频同步播出
不同场景适用的帧:
视频点播:节省带宽,高压缩率,B帧
直播:低延迟,不使用B帧
视频编辑:提高响应,个别使用全I帧
直播推拉流协议:
CDN
很多结点,一级一级分发。优化:IP地址,找到最近的进行转播播放
封装格式: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
实时消息协议(RTMP)Real-Time Messaging Protocol
也称实时消息传输协议,是最初由Macromedia为通过互联网在Flash播放器与一个服务器之间传输流媒体音频、视频和数据而开发的一个专有协议。后被 Adobe公司收购。
HTTP-FLV Flash Video(FLV)
网络视频格式,用作流媒体格式
协议友好,格式简单,便于分发,延迟低,不会转码
对比
推流段
图像采集 => 图像处理(可选) => 编码+封装 => 推流到CDN
拉流端
从CDN拉流 => 解封装+解码 => 图像处理(可选) => RGB渲染
解码:将视频数据解码成RGB图像
- 硬件解码 依赖于设备有相关附带的设备(相关的解码的芯片等等)
- 软件解码(CPU)对手机发热和卡顿有一定影响
音画同步
解码时都会全力以赴,但视频比音频大,需要时间长;而人对音频比较敏感,所以需要将视频向音频对齐。
安卓的软件: 谷歌esoPlayer、bilibili ijkPlayer