human: 如何处理七牛云的直播云七牛直播云技术白皮书

gpt: [直播云](https://developer.qiniu.com/pili) > 产品简介 > 七牛直播云技术白皮书

#  七牛直播云技术白皮书

最近更新时间: 2021-01-19 12:02:34

# 七牛直播云技术白皮书

## 目录

### 一、七牛直播云的整体架构设计

  1. 直播云整体架构设计图
  2. 模块简述

### 二、七牛直播云 LiveNet 分发网络

  1. 去中心化的架构设计
  2. 智能的线路调度系统
  3. LiveNet 在专业检测网络下的表现

### 三、配套的数据处理服务

  1. 直播鉴黄
  2. 转码服务
  3. 服务端水印
  4. 防盗链
  5. 数据存储

### 四、移动端 SDK 介绍

  1. 推流端 SDK
  2. 播放端 SDK
  3. 连麦互动 SDK

### 五、 APM 数据服务介绍

  1. 产品的基本原理
  2. 产品的价值
  3. 发展阶段

# 七牛直播云的整体架构设计

## 一、直播云整体架构设计图

![product-architecture](https://dn-odum9helk.qbox.me/product-architecture.jpg)

## 二、模块简述

  1. 业务服务器

     * 集成七牛直播服务端SDK后，具备流管理能力，例如创建和获取推流地址
  2. LiveNet 实时流网络（流媒体 CDN）

     * 负责流媒体的分发、直播流的创建、查询等相关操作
  3. 数据处理业务

     * 支持鉴定黄、实时转码、服务端水印、录制回放等数据处理
  4. 推流端 SDK

     * 负责采集和推送流媒体
  5. 播放端 SDK

     * 负责拉取并播放流媒体

**在上述五个模块中，除了业务服务器需要客户自己搭建剩余都是七牛提供的直播一站式服务，下面会详细接受这些产品。**

# 七牛直播云 LiveNet 分发网络

## 一、去中心化的架构设计

![2](https://dn-odum9helk.qbox.me/2.png)

**LiveNet**
的第一个技术特征是组网的方式发生了根本性变革。由过去面向区域划分的多中心树状层级网络，变成了去中心化自组织的一体化网状网络。下面详细说下这种设计的几个特征。

**按需伸缩：**基于 LiveNet
的网状网络模型，任意一台联网的服务器，都可以在经过有效授权后远程一键刷机、一键部署、一键运行，加入自组织网络成为贡献资源的一分子，这种轻量级的刷机扩建节点的方式，极为高效，真正可以做到无限节点的延伸，快速响应任意地区覆盖的需求。

**智能选线：**相比树状网络固定有限的线路集合，LiveNet
的网状网络内部的线路是动态且灵活组合的，且每多增加一个节点，在线路组合上，基于平台自身的红利，能带来数量级的组合可能，基于这些动态的线路组合和实时数据，可以决策调度最优线路。

**故障容错：**LiveNet
已经不再按照传统的静态网络做拓扑，而是采用软件定义网络的方式，用程序智能取代人工静态配置。好处不仅仅是线路的动态组合，并且能够实现节点故障的常态处理。在
LiveNet
里边，节点分为调度器和流服务器节点。无状态的流服务器节点数量众多，天然形成了自组织网络的互备特性，流服务器的上线下线通过调度器来切换和维持状态，从而可以进行故障转移。调度器节点本身多活的特性保障了调度器的高可用。由于全网对称部署，流服务器和调度器两者角色可以相互转化，在
LiveNet 工作机理不受影响的情况下，都能够及时容错保障服务的高可用。

## 二、智能的线路调度系统

在 LiveNet
实时流网络中，调度分为：计算资源调度、存储资源调度、网络流量调度、网络线路调度。和直播相关的是流量调度和线路调度，而线路调度的好坏直接影响了一个直播流的关键指标：首屏播放耗时、延时、流畅性。  
LiveNet
的网状网络内部的线路是动态且灵活自由组合的，并不局限于有限集合，而且节点数量越多，线路组合越多。这个动态组合节点灵活绘制线路的机制为程序找出优质的线路提供了可能。

**多节点自由组合，提供丰富的可选线路**

![3](https://dn-odum9helk.qbox.me/3.png)

**调度系统也可以根据数据反馈的即使决策最优的路线**

![4](https://dn-odum9helk.qbox.me/4.png)

## 三、LiveNet 现在专业检测网络下的表现

从对应的销售经理处可以获取

# 七牛直播云配套数据处理服务

## 一、直播鉴黄服务

图片鉴黄服务 pulp 帮您智能判断在七牛云的图片是属于色情、性感还是正常。
本服务为您提供非常方便的色情检测，根据评测结果显示，目前的鉴别准确率超过99.6%，可以替代90%以上的人工审核，并且通过本服务机器正在不断学习提高鉴别的准确率。  
防画面晃动、模糊鉴黄技术，高性能自动截帧。

### 1\. 产品基本原理

基本的技术原理是七牛直播云会对直播流按一定的时间间隔抽帧（即机器视频画面），通过图片鉴黄技术给该图片进行色情度的评分。然后将可疑度较高的图片和对应的直播流信息返回给客户。开发者可以根据返回的结果信息优先给审核人员进行审核，进行封停等进一步处理。

### 2\. 产品的价值

**2.1 节省人力资源**  
目前七牛鉴黄服务的鉴别准确率超过99.6%，可以替代90%以上的人工审核

**2.2 减少人工漏审**  
人工审核鉴黄服务无法避免疲劳、走神等生理因素造成的疏忽，经常造成漏检导致平台存在播放非法内容的风险。

**2.3 反馈更加及时**  
自动鉴黄服务不但可以避免以上问题，还可以更快速的把有问题的直播流反馈给客户。

## 二、实时转码

**1\. 产品基本原理**  
推流端 SDK
将视频源推到七牛的服务器，七牛直播云会在服务器上将编码过的视频流进行解码。如果只是做转码功能，那么我们会把视频源按目标的分辨率进行转码（如：视频源是
1080P 的数据，客户可以转成一路 720P 和 一路 480P 的视频）

**2\. 产品的价值**  
转码的价值在于给不同网络状况的终端用户提供最合适的观看体验。比如说：当客户网络带宽比较大而且网络状况比较稳定的时候，客户可以看 1080P
的高清视频。当客户网络比较差可以，客户可以用转码后的 480P 的标准视频。

## 三、服务端水印

**1\. 产品基本原理**  
基本原理和实时转码差不多，只是解码之后在每一帧的画面上打上水印，然后再去做视频编码。

**2\. 产品的价值**  
主要应用场合传媒行业。因为客户的推流工具往往是专业的摄像机，而摄像机一般不是安卓系统无法集成七牛的推流
SDK。所以如果直播视频需要加水印功能，只能在服务器端使用。那么我们的数据处理服务可以帮助到客户。

## 四、防盗链服务

**1\. 产品基本原理**  
七牛的服务端会加一个配置，客户只需要在 url 后面加一个时间并且用跟服务端约定的 key 签算一个 token 加在 url
后面，就可以做到时间戳防盗链的功能。

**2\. 产品的价值**  
防止盗链照成的下行流量额外开支，也可以一定程度上保证主播的权益。

## 五、直播落存储服务

**1\. 产品基本原理**  
推流端 SDK 将视频源推到七牛的服务器，七牛直播云会将视频源进行切片存为 ts 文件。当客户需要完成回放业务的时候，他们只需要调用 API 获取 m3u8
文件即可播放。

**2\. 产品的价值**  
当直播平台做的内容有反复观看的价值时，可以通过这个功能轻松实现回放功能。而且国家对直播行业也有相关规定，直播内容必须存储相关内容 60 天以上。

# 移动端 SDK 介绍 —— 推流 SDK

## 一、推流 SDK 特征简述

七牛在 iOS 和 Android 平台上各有一个推流 SDK。PLDroidMediaStreaming 是七牛自研的 Android 推流 SDK ，在
github 上有近 700 star。PLMediaStreamingKit 是七牛自研的 iOS 推流 SDK ，在 github 上新老版本相加有
1000多 star。这两款推流 SDK 是目前市场上功能最丰富，自定义开发最灵活的 SDK。

## 二、核心功能以及应用场景

核心功能 | 应用场景  
---|---  
支持美颜以及调节磨皮、美白、红润效果 | 秀场类直播的必备功能，可以让主播更漂亮和受欢迎。  
支持客户端加水印 | 配合国家直播的管理要求，提供直播适配。  
录屏功能（Android／iOS） | 手机游戏直播必备功能。  
弱网优化功能 | 户外直播，主播网络抖动较大的情况下可以改善直播体验。  
支持纯音频推流，以及后台运行 | • 支持音频直播客户的需求  
• 主播切后台直播  
支持外部数据源（音频、视频）导入 | 客户可以自己做音视频采集和处理，只要按照要求的格式导入就可以完成推流的工作。  
支持数据源（音频、视频）的回调 | 七牛的推流SDK自带的采集模块获取数据后可以回调给客户自己做处理，例如拿到视频数据做美颜，拿到音频数据做变声等。只要按照规定的音视频格式导入给编码模块即可完成推流。  
支持混音功能（目前iOS已经支持，Android已经开发完毕安排测试中） | 当主播想唱歌需要背景音乐的时候，我们提供了混音功能。可以让主播更好的表演才艺。  
支持镜像功能（Mirror）并且可以动态切换 | 主播可以动态切换左右镜像，让观众的观看体验更好。  
支持连麦功能 | 连麦有单独的SDK，详细信息可以参考 [连麦文档 __](https://developer.qiniu.com/rtn)  
支持人脸特效（付费功能） | 该功能主要是检测出主播的脸部特征，根据脸部特征完成一些有趣的特效制作。  
如给主播带个兔耳朵，喂主播吃冰激淋，做局部美颜、瘦脸处理等，并且提供美术资源加工平台。  
支持三方美颜、滤镜，并且有多家战略合作的供应商提供选择 | 因为七牛的推流SDK会把采集到的音视频数据回调给开发者，所以意味着客户可以用任何第三方的SDK去做数据处理。然后把数据给到七牛的编码模块  
  
## 三、基础功能概述

功能类别 | 普通功能  
---|---  
编码推流格式定义 | • 视频 h.264 编码，音频 ACC 编码  
• 推流 RTMP 格式推流  
DNS | 支持自定义 DNS 解析  
编码相关 | • 同时支持软编和硬编  
• 支持多分辨率编码  
• 支持推流时可变码率推流  
• 支持动态帧率功能  
• 支持弱网丢帧策略  
• 内置自适应码率功能  
硬件 | • 支持前后摄像头切换  
• 支持自动以及手动对焦  
• 支持闪光灯特效  
• 支持 Zoom 操作  
• 支持 Mute  
架构支持 | 支持 ARMv7、 ARM64、i386、x86_64  
  
## 四、推流 SDK 的简要测试数据

项目 | 概述  
---|---  
测试设备 | iPhone6S  
系统版本 | iOS 10.1  
测试功能 | 开启美颜水印后推流，每次采样5 mins  
|  |  | 数值  
---|---|---|---  
CPU 占有率 | 单位 % | Total AVG | 23.68  
Memory 占有量 | 单位 M | Total AVG | 54.16  
  
**CPU 负载**

![7](https://dn-odum9helk.qbox.me/7.png)

**内存占用**  
![Group 2](https://dn-odum9helk.qbox.me/3.21.21.png)

**码率控制**  
![makong](https://dn-odum9helk.qbox.me/makong.png)

# 移动端 SDK 介绍 —— 播放器 SDK

## 一、播放器简介

七牛在 iOS 和 Android 平台上各有一个播放器 SDK 。PLDroidPlayer 是一款基于 ijkplayer 的 Android 播放器的
SDK 在 github 上有近两千多个 star , 是市面上 ijkpalyer 衍生分支里面最活跃的一款播放器 SDK。PLPlayerKit
是一款基于 ffmpeg 的 iOS 播放器的 SDK 在 github 上有将近 900 个 star 。这两款直播 SDK
是目前市场上功能点最丰富，效果最好的一款播放器 SDK。已知客户中有超过两百家直播客户在使用这款播放器

## 二、核心功能以及应用场景

核心功能 | 应用场景  
---|---  
支持首屏秒开 | 秒开是直播场景下重要客户体验指标，我们对此做了大量优化  
支持直播累计延迟优化 | 保证直播的实时性，延时累积到一定的程度  
直播后台播放 | 观众在看直播的时候切后台依旧可以听到主播的声音  
支持纯音频播放 | 是后台播放的前提，也可以用于音频直播  
支持画面镜像翻转 | 观众可以镜像调整主播的画面，以选择自己最喜欢的模式观看  
支持画面以0度、90度、180度、270度旋转 | 比如手机一边充电一边看直播时，大部分手机的充电口在下方，有些观众需要倒手机看视频，这时候就可以根据重力感性调整应调的横竖屏  
支持多种画面的预览模式包括：原始尺寸、适应屏幕、全屏铺满、16:9、4:3 等 | 满足客户对画面显示的各种不同需求  
支持带 IP 的地址播放 URL | 做 DNS 预解析  
支持获取码流的 metadata 信息 | Metadata 可以带机型信息、流信息等，方便客户锁定问题  
支持获取播放的统计信息，比如实时帧率、码率 | 我们把帧率、码率实时信息回调给客户，方便客户做不同网络状况下的业务  
支持设置播放封面和缓冲加载图片 | 大部分客户会做封面，APP 的直播室列表视觉效果更佳  
支持渲染方式：自定义 View、SurfaceView、TextureView | 支持客户自己去渲染数据，更方便客户按照自己的使用场景自定义  
  
## 三、基础功能概述

功能类别 | 基础功能  
---|---  
播放格式以及文件 | • RTMP-FLV、HTTP-FLV、HLS、HTTPS、MP4、MP4V 等格式的音视频  
• 支持本地播放  
解码相关功能 | • H.264、AAC、speex 解码  
• 支持软解和硬解  
• 支持软硬解自动切换  
架构支持 | 支持 ARMv7、ARM64、i386、x86_64  
  
## 四、播放器 SDK 的简要测试数据

项目 | 概述  
---|---  
测试设备 | iPhone6S  
系统版本 | iOS 10.1  
测试方法 | 播放（videoSize 368*640; videoBitRate 768Kbps; frameRate 24fps）10组数据均值  
| 软解直播 AVG | 硬解直播 AVG | 软解点播 开启 ffmpeg | 硬解点播 开启 FFmpeg  
---|---|---|---|---  
CPU 占有率 % | 14.8 | 5.5 | 17.49 | 16.59  
Memory 占有量 MB | 53.62 | 58.71 | 68.59 | 68.64  
项目 | 概述  
---|---  
测试设备 | 小米 Note  
系统版本 | Android 5.0.2  
测试方法 | 播放（videoSize 480*848; videoBitRate 1000Kbps; frameRate 30fps）10组数据均值  
| 软解直播 AVG | 硬解直播 AVG | 软解点播 开启 ffmpeg | 硬解点播 开启 FFmpeg  
---|---|---|---|---  
CPU 占有率 % | 9.55 | 5.4 | 10.456 | 4.62  
Memory 占有量 MB | 64.55 | 60.15 | 89.74 | 83.20  
  
# 移动端 SDK 介绍 —— 连麦 SDK

## 一、连麦 SDK 简介

七牛的连麦方案与七牛直播云紧密结合，在不改变原有的推流&拉流工作流程的基础上，提供了简单易用的连麦对讲功能。该方案主要包括连麦服务端和客户端两个部分，其中，连麦服务端主要提供了房间管理、权限验证、信令和媒体数据转发等功能，客户端则提供了媒体数据的采集、编码、传输、显示等功能。

由于连麦 SDK 和服务端有紧密的联系，这边先介绍下七牛连麦 SDK 的架构设计。

## 二、核心功能以及应用场景

  * 基本的推流和连麦对讲功能
  * 基本的视频合流和音频混音功能
  * 支持内置音视频采集，带美颜、水印、闪光灯、摄像头切换、聚焦等常见功能
  * 支持外部采集视频数据，支持的格式为：NV21 和 I420
  * 支持外部采集音频数据，支持的格式为：PCM，单通道，16bit 位宽
  * 支持外部美颜
  * 支持踢人功能
  * 支持静音功能
  * 支持连麦的帧率配置
  * 支持连麦的视频码率配置
  * 支持连麦的视频尺寸配置
  * 支持连麦的网络重连和超时的配置
  * 支持丰富的连麦消息回调
  * 支持纯音频连麦
  * 支持连麦大小窗口切换
  * 支持推流的软硬编配置
  * 支持连麦的软硬编配置
  * 连麦画面的截帧

## 三、七牛连麦方案详解

![1](https://dn-odum9helk.qbox.me/2.55.09.png)

### 1\. 连麦方案的权限控制

“连麦” 其实就是一个 “视频会议” ，因此我们引入了 “连麦房间”
的概念，用于隔离不同主播的连麦过程，保障数据的安全以及互不干扰。本方案要求连麦的各方必须首先进入同一个 “连麦房间” ，然后才能开始 “视频会议” 的过程。

![屏幕快照 2017-02-06 下午2.58.00](https://dn-odum9helk.qbox.me/2.58.00.png)

房间的 API 主要分为两个部分，一部分在服务端，另一部分在客户端，我们把创建/销毁 “连麦房间” 的功能放到了服务端，由 App Server
向七牛的服务器发送申请来完成。连麦客户端 SDK，只有加入/离开 “连麦房间” 的权限。

房间其实不需要每次直播都创建再销毁，而是可以预先为每一个有连麦权限的主播分配好，需要收回连麦权限的时候，再销毁掉。

### 2\. 连麦的交互示意图

![屏幕快照 2017-02-06 下午2.59.31](https://dn-odum9helk.qbox.me/2.59.31.png)

  1. 为主播创建 “连麦房间号”，并将 “连麦房间号”和该主播的ID对应关系存储起来
  2. 计算连麦的Token 并提供给客户端，该 Token 是根据七牛的 AK、SK 按照一定的规则生成
  3. 提供连麦的业务逻辑，如：观众申请连麦，主播同意/拒绝连麦等消息处理

### 3\. 连麦的流程

实际上，连麦在业务上存在三种角色，“主播”，“副主播”，“普通观众”，不同的角色，业务流程是不一样的。

**主播（推流＋连麦+合流）**  
主播是负责推流和合流的角色，数据来自自身的采集和连麦的副主播，其工作流程如下：  
打开本地摄像头预览 -> 初始化推流参数 -> 开始推流［主播画面］-> -> -> 收到连麦申请(业务服务器) -> 同意连麦申请(业务服务器) ->
开始连麦-> 持续推流[合成画面] -> -> -> 结束连麦-> 持续推流［主播画面］-> -> -> 结束推流

**副主播/连麦观众（连麦）**  
副主播是连麦后跟主播视频对讲的角色，其工作流程如下：  
打开本地摄像头预览 -> 向主播申请连麦(业务服务器) -> “得到同意”(业务服务器) -> 开始连麦-> -> -> 结束连麦

**普通观众（播放）**  
观众是观看者角色，从流媒体分发网络拉取主播推送的音视频码流，其工作流程如下：  
播放主播画面 -> -> -> 退出播放器

# APM 数据服务介绍

![屏幕快照 2017-02-06 下午3.04.50](https://dn-odum9helk.qbox.me/3.04.50.png)

## 一、产品基本原理

客户可以把终端搜集的数据实时打点给到七牛。七牛会通过 APM 服务把数据实时展现出来。

## 二、产品的价值

现在的直播客户体量大到一定的程度必然要做备选线路。七牛的 APM 产品就可以客观的评价 CDN，优化 CDN 的分配，降低运维成本。

## 三、发展阶段

现在已经有种子客户在使用，并且已经成功提高了线路运维的工作效率。

以上内容是否对您有帮助？