视频直播中的基础知识
视频编码与封装格式
视频编码简介 (Video Codec)
视频可以看作是一组连续的图像在不断地切换,比如电影就是以每秒 24 幅画面的速度进行播放。其中每一幅画面被称为一个视频帧(frame)。可以想象如果不经过任何处理一个视频的存储和传输成本是巨量的。在此基础上便诞生了视频压缩。
色度抽样
对于视频的每一帧画面上的像素点,我们知道可以用RGB分量来描述。即红色、绿色和蓝色。
而通过某种算法,我们可以将其转化为另一种分量来描述。
Y=0.299×R + 0.587×G + 0.114×B
Cb=0.564×(B-Y) = -0.169×R - 0.331×G + 0.500×B
Cr=0.713×(R-Y) = 0.500×R - 0.419×G - 0.081×B
其中:
- Y 代表 明度(luminance)
- Cb 代表蓝色度 (Blue Chrominance)
- Cr 代表红色度 (Red Chrominance)
科学研究表明,人眼对亮度信号的敏感度高于色度信号,因此在色度上进行抽样,视频画面的损失是较小的,这种抽样方式被称为 YCbCr 或 YUV ,也就是色度抽样。
常见的 YUV 格式
- 444: 即没有抽样,包含了完整的RGB 信号,只有极少数编码格式采用这种抽样,如 HDCAM
-
422: Y:UV 以 2:1 的形式采样。 采样前: [Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3] 采样码流: Y0 U0 Y1 V1 Y2 U2 Y3 V3 映射后: [Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3] 少数高端数字视频格式采用这种采样,例如: AVC-Intra 100 Digital Betacam DVCPRO50及DVCPRO HD Digital-S CCIR 601 / 串列数字接口 / D1 ProRes(HQ, 422, LT, and Proxy) XDCAM HD422 Canon MXF HD422
- 420:在每一行中Y 与 UV 中的一个分量以 2:1 采样。 采样前: [Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3] [Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 V7] 、[Y8 U8 V8] 采样码流: Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8 映射后: [Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7] [Y5 U0 V5]、[Y6 U0 V5]、[Y7 U2 V7]、[Y8 U2 V7]
常见的视频编码都采用 YUV 420的抽样。例如
所有版本的MPEG,包括如DVD等MPEG-2成品(虽然有些MPEG-4 profile容许如4:4:4的更高质量采样) PAL DV及DVCAM HDV AVCHD 最常见的JPEG/JFIF、H.261,及MJPEG成品 VC-1
MPEG
- MPEG
动态影像专家小组(英语:Moving Picture Experts Group,简称MPEG)[1]为一源自国际标准化组织 (ISO) 与国际电工委员会 (IEC) 等国际组织的工作小组,成立于1988年,有超过300名专家一起制定影音压缩及传输的规格标准。MPEG的官方正式命名为ISO/IEC JTC 1/SC 29/WG 11 – Coding of moving pictures and audio
- MPEG-1
第一个官方的视频音频压缩标准,包含5个部分的标准。前三部分依序是系统,视频和音频。随后在Video CD中被采用,其中的音频压缩的第三级(MPEG-1 Layer 3)简称MP3,成为比较流行的音频压缩格式。
- MPEG-4
MPEG 2003年发布的视频压缩标准,主要是扩展MPEG-1、MPEG-2等标准以支持视频/音频物件(video/audio “objects”)的编码、3D内容、低比特率编码(low bitrate encoding)和数字版权管理(Digital Rights Management)
- MPEG-4 第10部分,又称 H.264/AVC
是一种面向块,基于运动补偿的视频编码标准 。到2014年,它已经成为高精度视频录制、压缩和发布的最常用格式之一。第一版标准的最终草案于2003年5月完成。
编码三要素
- 码率(Bit Rate) 指单位时间视频数据的大小 (kbps)
- 帧率(frame rate) 指单位时间内的平均帧数 (fps)
- 分辨率(resolution) 画面的像素点数量
宏块
宏块是视频编码的基本单元,它不是固定大小,有16×16、16×8、8×16、8×8、8×4、4×8、4×4等不同的大小,宏块划分的越大,压缩比越低,视频质量越低。
帧内压缩(空间冗余)
一幅图像中相邻像素的包含着重复信息,并且这些信息也是逐渐变化的,不太会出现突变。也就是说,图像中存在空间冗余。
对于这些区域,只要记录一小部分就可以表达全部数据。
这种用一小部分数据表达整个区域的算法称为宏块的预测模式。
在实际的编码中,编码器会对每个宏块采取一种图像预测模式,总共有 9 种预测模式。
每种预测模式中都是根据宏块已经编码的左侧和上侧的像素点进行预测。
将预测结果与原本的帧对比运算得到残差值, 最终将宏块划分信息 + 宏块预测模式 + 残差值保留下来,最终可以将这一帧几乎原样的还原出来。
帧间压缩(时间冗余)
在视频中,经常遇到一组画面中只有少量的内容发生了变化,对于随着时间经过没有发生变化的内容,称为时间冗余。
GOP (Group Of Pictures)
GOP 指的就是视频中的一组具有画面相关性的帧,它的帧分为三种类型。
-
I 帧 (intra coded picture) ,又称关键帧,它是每个 GOP 的第一帧,它使用帧内压缩。
-
P 帧 (predictive coded picture),又称前向参考帧,它没有完整画面数据,只有与前一帧的画面差别的数据。占 I 帧的一半大小,P帧是以 I 帧或前面的P帧为参考帧,在 参考帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。在接收端根据运行矢量从 I 帧找出P帧“某点”的预测值并与差值相加以得到P帧“某点”样值,从而可得到完整的P帧。
-
B 帧 (bidirectionally predictive coded pictures),又称双向参考帧,和P帧的主要区别在于它是参考前后2帧,也就是B帧记录的是本帧与前后帧的差别,B帧以前面的 I 或P帧和后面的P帧为参考帧,“找出”B帧“某点”的预测值和两个运动矢量,并取预测差值和运动矢量传送,占 I 帧1/4大小。
预测步骤
- 宏块查找
(1)全局搜索算法。该方法是把搜索区域内所有的像素块逐个与当前宏块进行比较,查找具有最小匹配误差的一个像素块为匹配块。这一方法的好处是可以找到最佳的匹配块,坏处是速度太慢。目前全局搜索算法极少使用。 (2)快速搜索算法。该方法按照一定的数学规则(菱形搜索算法、六边形搜索算法)进行匹配块的搜索。这一方法的好处是速度快,坏处是可能只能得到次最佳的匹配块。
-
运动估计
如图,假设P为当前编码帧,Pr为参考帧,当前编码块为B,则运动估计要做的就是在Pr中寻找与B相减残差最小的块Br,Br就叫做B的最佳匹配块。
与帧内预测相似,帧间预测中的 B 帧 与 P 帧,记录的也是残差值。
容器简介
MP4
MP4 或称MPEG-4第14部分(英语:MPEG-4 Part 14)是一种标准的数字多媒体容器格式。MPEG-4第14部分的扩展名为.mp4,以存储数字音频及数字视频为主,但也可以存储字幕和静止图像。因其可容纳支持比特流的视频流(如高级视频编码),为流媒体。
m3u8 & MPEG2-TS
m3u8 是 m3u(MP3 URL) 的uft-8格式,它是一种播放多媒体列表的文件格式,它的设计初衷是为了播放音频文件,比如MP3,但是越来越多的软件现在用来播放视频文件列表,M3U也可以指定在线流媒体音频源。很多播放器和软件都支持M3U文件格式。
一个ts文件在传输过程中是以188byte大小的包传输的,每一个包包括一个header和payload。header中又有不同的字段,用来描述视频信息及payload所在的位置,payload即是有效负载,就是视频信息,是一个在通信领域的专用名词。
Fragmented MP4
fmp4 是基于 MPEG-4 Part 12 的流媒体格式。
fMP4 是基于 MPEG-4 Part 12 的流媒体格式,RFC: ISOBMFF,与 mp4 很相似,但也有一些区别: fMP4 不需要一个 moov Box 来进行 initialization,fMP4 的 moov Box 只包含了一些 track 信息。fMP4 的 视频/音频 metadata 信息与数据都存在一个个 moof、mdat 中,它是一个流式的封装格式。
FLV
flv(flash video) 是 Adobe 推出的文件格式,与 fmp4 同样是基于 MPEG-4 Part 12 的流媒体格式。它的特点是封装后的音视频文件较小、封装规范简单,因此适合在互联网上进行传输和使用。
相关阅读: MP4结构概述和分析工具 FLV 封装格式解析
直播协议简介
RTMP
RTMP(Real-Time Messaging Protocol)协议,是Adobe 公司为 Flash 播放器和服务器之间音视频数据传输开发的私有协议。
- 它既是推流协议也是拉流协议
- 它是基于 TCP 通道的协议,默认端口1935
- 使用 FLV 的格式的视频
MPEG-DASH
基于HTTP的动态自适应流(英语:Dynamic Adaptive Streaming over HTTP,缩写DASH,也称MPEG-DASH)是一种自适应比特率流技术,使高质量流媒体可以通过传统的HTTP网络服务器以互联网传递。 MPEG-DASH会将内容分解成一系列小型的基于HTTP的文件片段,每个片段包含很短长度的可播放内容,而内容总长度可能长达数小时(例如电影或体育赛事直播)。 内容将被制成多种比特率的备选片段,以提供多种比特率的版本供选用。 当内容被MPEG-DASH客户端回放时,客户端将根据当前网络条件自动选择下载和播放哪一个备选方案。客户端将选择可及时下载的最高比特率片段进行播放,从而避免播放卡顿或重新缓冲事件。 也因如此,MPEG-DASH客户端可以无缝适应不断变化的网络条件并提供高质量的播放体验,拥有更少的卡顿与重新缓冲发生率。
HLS
HLS (HTTP Live Streaming) 是由苹果公司提出基于HTTP的流媒体网络传输协议。是苹果公司QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的扩展 M3U (m3u8) 播放列表文件,用于寻找可用的媒体流。
RTMP 与 HLS 的对比
RTMP
优点:低延时
由于 RTMP 是基于 TCP 通道的协议,通过长连接传输较小的分片数据,同时它的数据一般不写入磁盘而是仅在内存中循环,以上原因使得 RTMP + flv 的组合具有更好的弱网抗性和更低的延时(1-3 秒)。
缺点:兼容性
由于种种历史原因(性能落后,标准落后,功能冗杂,安全性,封闭),导致 flash 格式在浏览器与其他客户端设备中得不到原生支持,往往需要通过安装插件才能播放 RTMP 的直播流。
相关阅读: Adobe Flash永別了!從98%的市佔跌到僅剩4%,曾經的網路霸主為何會摔落神壇? iOS 不支持 Flash 的真实原因是什么?
HLS
优点:开放、自适应、便于录播
- HLS 是开放协议,能得到比较广泛的终端支持。
- 分片支持多级编码,可以无缝切换各种码率。
- 更好的支持视频加密。
- 更好的支持点播。
缺点:
- 高延迟
HLS 延迟因素
- HLS 是基于 HTTP 的短连接,每次请求分片都会有建立连接的开销
- 请求下来的分片是存储在磁盘里的,播放时需要不断读取磁盘
- HLS 官方规定起播至少需要三个分片
- 每个分片最小为一个 GOP
降低 HLS 延时的方案
3 秒左右的低延迟直播方案 - LHLS 和 LL-HLS HLS直播协议在B站的实践
RTC
RTC(Real-Time Communication)意为实时通信,它不是某种协议,而是一种实现低延时的P2P的通信技术,覆盖媒体信息的采集、编码、转码、传输、解码、缓冲、渲染整条链路,涉及众多的协议与多种架构模式。
上图展示了最简单的 RTC 通信模型,客户端 A 与 B 通过 STUN (Session Traversal Utilities for NAT) 服务器,获取并交换各自的公网ip+port,然后就可以相互建立起p2p通信。
由于P2P通信基于 UDP,同时也省去了转码、CDN分发等诸多流程,RTC通常拥有极低的延时性(400ms以下)。
但在人数增加的情况下,客户端需要成倍的增加带宽和性能开销。
因此在企业应用中,更常用的方案是以下两种
MCU (MultiPoint Control Unit)
在该种方案中客户端将流推到 MCU 服务器,MCU 合流转码后再推送到各端。
优点:
- 节省带宽
- 节省客户端开销
缺点:
- 延迟较大
- MCU 性能开销大
SFU (Selective Forwarding Unit)
在该种方案中客户端将流推到 SFU 服务器,SFU 仅负责将流转发到其他客户端。
优点:
- 延迟小
- 画质无损
缺点:
- 复杂的选流逻辑
- 带宽开销大
无论哪种方案,在直播间人数较多的时候,中间节点服务器都会承担较大的压力,造成较大的带宽、性能开销。
因此在实际的直播场景中,使用的是与 CDN 融合的技术方案。
相关阅读 字节跳动《实时音视频通讯技术》学习笔记之RTC概述及技术简介 webRTC通信方案SFU和MCU的区别 WebRTC → 信令服务器浅析与实现 零基础快速入门WebRTC.52im.net/thread-4184-1-1.html)