password
Created
Feb 19, 2023 04:15 PM
type
Post
status
Published
date
Jul 4, 2021
slug
summary
直播背后使用的技术
tags
其他
直播
category
其他
icon
一. 采集
采集分为音频采集和视频采集两种, 两种采集方式与实现迥异
1. 音频采集
音频在采集阶段主要的技术参数有这几个:
- 采样率: 记录这段音频信号所采用的数据量
- 位宽, 一般有4bit 8bit 16bit 32bit等, 位数越多代表越精细, 一般采用的位宽是8bit或16bit
- 声道数: 使用多个采集源并输出到不同的扬声器称为声道, 一般是单声道或双声道
- 音频帧: 不同于视频的是, 音频记录的是"声波", 是连续的, 因此音频帧也被称为采样时间, 一般是2.5ms - 60ms之间
2. 视频采集
视频采集其实本质上采集的是图片, 并将一个个的图片进行组合变成一组可以连续播放的动画
视频采集因为设备不同, 又存在不同的采集源, 例如:
- 摄像头等设备
- 屏幕录屏
- 推流
等等
视频内容会被编码压缩成H.264等格式来进行传输以降低传输大小
视频内容中主要包含的技术参数有:
- 图像传输格式: Common Intermediate Format 通用影像传输格式
- 图像格式: 通常用YUV格式存储原始数据信息 RGB的彩色图像或8位黑白图像灰度值
- 传输通道: 正常情况下拍摄只需要一路通道, 随着VR和AR的逐渐成熟, 需要通过不同角度来进行拍摄, 然后经过多通道传输后合成
- 分辨率: 适配不同大小的尺寸
- 采样频率: 采样频率越高 图像质量越高, 但所占用内存也会更大
二. 处理
1. 视频处理
- 去噪(美颜)
美颜的本质其实就是 磨皮 + 美白
其中需要智能对人脸进行识别, 然后对特定位置进行特定算法的优化.
需要注意的点是: 脸部的部位不尽相同, 需要对特定位置进行处理, 比如脸蛋则需要进行磨皮和美白操作, 而眼睛则需要保留一定的模糊效果而保证眼部视觉的真实性
- 水印
水印是相对比较常见的直播需求
水印分为播放器水印和实时流水印两种
- 播放器水印: 直接在播放器端编码实现的水印能力, 优势是实现成本低, 但缺点很明显: 容易被盗取去水印内容
- 实时流水印: 需要在实时流中为每帧印上对应位置的水印再进行传输, 可以规避去水印内容盗取的问题
- 滤镜
滤镜IOS和Android都提供了有效可行的滤镜库
Android: https://github.com/google/grafika
- 连麦
连麦是互动直播中常见的需求, 主播和部分观众之间可以进行实时互动,然后将互动结果实时播放给其他观众观看。
但是这个时候RTMP无法满足连麦时的实时性要求.
在连麦时需要做到: 低延时互动/音画同步/音视频实时合成
这时候比较成熟的方案是使用WebRTC的实时通讯方案
使用WebRTC技术将多人的互动联合起来, 然后合流之后进行RTMP传送
2. 音频处理
音频处理则简单的多, 进行音轨合成并输出即可
三. 编码
视频编码的意义:
- 原始视频数据存储空间大,一个 1080P 的 7 s 视频需要 817 MB
- 原始视频数据传输占用带宽大,10 Mbps 的带宽传输上述 7 s 视频需要 11 分钟
而经过 H.264 编码压缩之后,视频大小只有 708 k ,10 Mbps 的带宽仅仅需要 500 ms ,可以满足实时传输的需求,所以从视频采集传感器采集来的原始视频势必要经过视频编码。
视频编码的核心在于去除冗余
- 空间冗余: 图像的相邻像素之间具有很强的相关性
- 时间冗余: 视频序列的相邻图像之间的内容是非常相似的
- 编码冗余: 不同像素值出现的概率不同
- 视觉冗余: 人的视觉系统对某些细节不敏感
- 知识冗余: 规律性的结构贺仪有先验知识和背景知识得到
因为视频的本质就是一系列图片快速连续的播放, 那么最简单的压缩方式就是对每一帧图片进行压缩, 例如古老的MJPEG就是采用这种编码方式, 但这种方式的缺陷是无法捕获帧与帧之间的相关性. 例如一个相同的物体在当前视区相同的距离上移动.
编码器经过数十年的演变, 目前市面上的主流编码方式是H.264 和VP9
谈到视频编码相关内容就不得不提一个伟大的软件包 – FFmpeg。
FFmpeg 是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了 libavcodec -这是一个用于多个项目中音频和视频的解码器库,以及 libavformat -一个音频与视频格式转换库。
FFmpeg 这个单词中的 FF 指的是 Fast Forward
四. 封装
封装可以理解为采用哪种货车去运输,也就是媒体的容器
所谓容器,就是把编码器生成的多媒体内容(视频,音频,字幕,章节信息等)混合封装在一起的标准。
容器使得不同多媒体内容同步播放变得很简单,而容器的另一个作用就是为多媒体内容提供索引,也就是说如果没有容器存在的话一部影片你只能从一开始看到最后,不能拖动进度条(当然这种情况下有的播放器会话比较长的时间临时创建索引),而且如果你不自己去手动另外载入音频就没有声音
常见的封装格式有以下几种
1. AVI格式
于 1992 年被 Microsoft 公司推出。这种视频格式的优点是图像质量好。无损 AVI 可以保存 alpha 通道
但是缺点是: 体积过于庞大, 且压缩标准不统一, 导致高版本windows媒体播放器无法播放早起的AVI格式视频.
2. DV-AVI格式
后缀也是.avi
是由索尼、松下、JVC 等多家厂商联合提出的一种家用数字视频格式, 数字摄像机就是使用这种格式记录视频数据的
它可以通过电脑的 IEEE 1394 端口传输视频数据到电脑,也可以将电脑中编辑好的的视频数据回录到数码摄像机中
3. QuickTime File Format 格式
后缀是.mov
国 Apple 公司开发的一种视频格式,默认的播放器是苹果的 QuickTime。具有较高的压缩比率和较完美的视频清晰度等特点,并可以保存 alpha 通道
4. MPEG格式
文件后缀可以是 .mpg .mpeg .mpe .dat .vob .asf .3gp .mp4等
它的英文全称为 Moving Picture Experts Group,即运动图像专家组格式
目前主流的MPEG是mp4格式
MPEG-4 是为了播放流式媒体的高质量视频而专门设计的,以求使用最少的数据获得最佳的图像质量。目前 MPEG-4 最有吸引力的地方在于它能够保存接近于 DVD 画质的小体积视频文件。
5. WMV 格式
后缀为.wmv .asf
它的英文全称为 Windows Media Video,也是微软推出的一种采用独立编码方式并且可以直接在网上实时观看视频节目的文件压缩格式。WMV 格式的主要优点包括:本地或网络回放,丰富的流间关系以及扩展性等。WMV 格式需要在网站上播放,需要安装 Windows Media Player( 简称 WMP),很不方便,现在已经几乎没有网站采用了
6. Real Video 格式
后缀为 .rm .rmvb
Real Networks 公司所制定的音频视频压缩规范称为Real Media。用户可以使用 RealPlayer 根据不同的网络传输速率制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放。RMVB 格式:这是一种由 RM 视频格式升级延伸出的新视频格式,当然性能上有很大的提升。RMVB 视频也是有着较明显的优势,一部大小为 700 MB 左右的 DVD 影片,如果将其转录成同样品质的 RMVB 格式,其个头最多也就 400 MB 左右。
7. Flash Video 格式
后缀为 .flv
由 Adobe Flash 延伸出来的的一种流行网络视频封装格式。随着视频网站的丰富,这个格式已经非常普及。
8. Matroska 格式
后缀为 .mkv
是一种新的多媒体封装格式,这个封装格式可把多种不同编码的视频及 16 条或以上不同格式的音频和语言不同的字幕封装到一个 Matroska Media 档内。它也是其中一种开放源代码的多媒体封装格式。Matroska 同时还可以提供非常好的交互功能,而且比 MPEG 的方便、强大。
9. MPEG2-TS 格式
后缀为 .ts
是一种传输和存储包含音效、视频与通信协议各种数据的标准格式,用于数字电视广播系统,如 DVB、ATSC、IPTV 等等。
直播中主要采用的就是 FLV 和 MPEG2-TS 格式,分别用于 RTMP/HTTP-FLV 和 HLS 协议。
五. 推流和传输
1. 推送协议
主要是以下几种:
- RTMP
- WebRTC
- 基于 UDP 的私有协议
1. RTMP
RTMP 是 Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于 TCP,是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。RTMP 是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash/AIR 平台和支持 RTMP 协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括 Adobe Media Server/Ultrant Media Server/red5 等。
RTMP 是目前主流的流媒体传输协议,广泛用于直播领域,可以说市面上绝大多数的直播产品都采用了这个协议。
优点是: CDN支持好. 协议简单
缺点是: 基于TCP导致传输成本高, 不支持浏览器推送, 是Adobe私有协议, 但Adobe已经不再更新
2. WebRTC
WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的 API。它于 2011 年 6 月 1 日开源并在 Google、Mozilla、Opera 支持下被纳入万维网联盟的 W3C 推荐标准。
目前主要应用于视频会议和连麦中,协议分层如下:
优点
- W3C 标准,主流浏览器支持程度高
- Google 在背后支撑,并在各平台有参考实现
- 底层基于 SRTP 和 UDP,弱网情况优化空间大
- 可以实现点对点通信,通信双方延时低
缺点
- ICE,STUN,TURN 传统 CDN 没有类似的服务提供
3. 基于 UDP 的私有协议
有些直播应用会使用 UDP 做为底层协议开发自己的私有协议,因为 UDP 在弱网环境下的优势通过一些定制化的调优可以达到比较好的弱网优化效果,但同样因为是私有协议也势必有现实问题:
优点
- 更多空间进行定制化优化
缺点
- 开发成本高
- CDN 不友好,需要自建 CDN 或者和 CDN 达成协议
- 独立作战,无法和社区一起演进
2. 传输网络
传输网络其实说的就是CDN (内容分发网络) Content Delivery Network
传统CDN会将用户内容进行分发, 从中心节点分发到区域节点, 然后再由区域节点分发到边缘节点
在直播上, 有区别于传统CDN来讲, 有以下几点挑战
- 流媒体协议的支持,包括 RTMP,HLS ,HTTP-FLV 等。
- 首屏秒开,从用户点击到播放控制在秒级以内
- 1~3 延迟控制,从推流端到播放端,延迟控制在 1~3 秒之间
- 全球全网智能路由,可以利用整个 CDN 网络内的所有节点为某一单一用户服务,不受地域限制。随着全球一体化进程不断推进,跨区域、跨国家、跨洲的直播正变为常态,很可能主播在欧美,而用户在亚洲。
- 天级别的节点按需增加,中国公司出海已成大势,CDN 需要更多的海外节点,如今比拼的更多的是海外节点可以快速部署,从提出节点增加需求到节点入网提供服务,需要达到一天之内,对 CDN 运维和规划提出非常高的要求。原有的月级别规划和入网满足不了先进的要求。
- 对 Cache 的要求没有以前那么高
- 对实时性的要求非常高
- 对节点运维的要求高,要更智能,尽量减少人工干预
- 对扩容这种运维事件响应度要求非常高
- 去中心化,网状拓扑
- 全球全网调度
- 节点无状态,节点对等
- 智能运维
我们发现 Live 时代我们需要的内容分发网络是:
要做到如上几点,我们需要:
六. 延迟优化
1. 编码优化
- 确保 Codec 开启了最低延迟的设置。
- 编码器码控设置得尽可能小
- 尽可能减少使用关键帧(I帧)来安静滴传输过程中的累计延迟
- 不使用MJPEG的视频压缩格式 使用H.264
- FFmpeg降低probesize和analyze duration的参数值, 也就是降低视频帧信息检测和用户检测的时长
- 尽量使用VBR来编码以减小带宽
2. 传输协议优化
- 尽量使用RTMP
- 尽量使用靠近推流端的收流节点进行转码来降低传输的视频流大小
- 如果有必要,可以使用定制的 UDP 协议来替换 TCP 协议
3. 传输网络优化
- 实时传输网络
- 服务端节点缓存当前GOP
- 服务端实时记录每个视频流流向每个环节时的秒级帧率和码率
- 客户端查询服务端实时获取当前最优节点
4. 推流/播放优化
- 考察发送端系统自带网络Buffer大小
- 播放端设置一定的缓存
- 播放端动态Buffer策略
- 动态码率播放策略
七. 现代播放器原理
现代播放器核心组成: UI 多媒体引擎 解码器
- UI: 播放器最上层部分 用户实现交互和用户体验
- 多媒体引擎: 描述文件解析和处理播放控制, 自适应码率的规则设定和切换
- 解码器: 直接调用操作系统暴露的API来解码和渲染视频内容
1. 用户界面(UI)
皮肤
- Videojs: 定制功能特性
UI逻辑
- dash.js 处理直播窗口的小窗 布局
业务逻辑
- hls.js: 多媒体引擎
2. 多媒体引擎
开放的底层API
- Web: MediaSourceExtensions
- Flash: Netstream
- Android: Media Codec
1. 声明文件和解析器
从XML文件中获取正确的视频描述信息
提取信息之后, 解析器会从中解析出数据, 用于构建流式视觉图像
2. 下载器
是一个包装了处理HTTP请求原生API的模块.
不仅用于下载多媒体文件, 必要的时候也会用于下载声明文件和DRM秘钥
3. 流播放引擎
解码器和API交互的中央模块, 将多媒体片段导入编码器, 同事处理多码率转换和播放时的差异性
4. 资源质量参数预估器
预估带宽和CPU计算能力
5. APR切换控制器
根据数据, 告诉流播放引擎是否需要切换视频或者音频质量
6. DRM管理器
内容解密API的包装
7. 格式转换复用器
转换格式
3. 解码器和DRM管理器
1. 解码器
在不同端的底层API不同,
而Web 上标准的 Media Sources Extensions。MSE 越来越吸引眼球,将来可能会成为继浏览器之后其它平台上的事实标准。
2. DRM
几个 Web 巨头一起创建了通用加密标准Common Encryption (CENC) 和通用的多媒体加密扩展Encrypted Media Extensions
CENC 声明了一套标准的加密和密钥映射方法,它可用于在多个 DRM 系统上解密相同的内容,只需要提供相同的密钥即可。