连麦服务
七牛的连麦互动方案在不改变原有的推流&拉流工作流程的基础上,提供了简单易用的连麦对讲功能。该方案主要 包括连麦服务端和客户端两个部分,其中,连麦互动服务端主要提供了房间管理、权限验证、信令和媒体数据转发 等功能,客户端则提供了媒体数据的采集、编码、传 输、显示等功能。
连麦互动可以单独用于很多有趣的场景如:在线教育,狼人杀游戏,一对一视频社交产品等
1. 产品优势
- 线路优势:依托七牛在全国乃至全球部署的丰富的自建节点,我们的连麦产品可以做到一秒以内的延时。且可以简单快速的扩展节点和带宽容量,以满足客户业务增长的需求。
- 方案系统覆盖全面:我们提供 web,iOS,Android,PC 等不同平台的解决方案。相互之间可以完美连接,以满足客户业务的无限想象。
- 经验优势:我们通过在直播 SDK 上累计的优势,让互动 SDK 稳定的运行在各种机型各种业务上。且服务端也提供贴合业务的 api 以满足客户的要求。
2. 功能列表
- 基本的推流和连麦对讲功能
- 基本的视频合流和音频混音功能
- 支持内置音视频采集,带美颜、水印、闪光灯、摄像头切换、聚焦等常见功能
- 支持外部采集视频数据,支持的格式为:NV21和1420
- 支持外部采集音频数据,支持的格式为;PCM,单通道,16bit位宽
- 支持外部美颜
- 支持踢人功能
- 支持静音功能
- 支持连麦的帧率配置
- 支持连麦的视频码率的配置
- 支持连麦的视频尺寸配置
- 支持连麦的网络重连和超时的配置
- 支持丰富的连麦消息回调
- 支持纯音频连麦
- 支持连麦大小窗口切换
- 支持推流的软停编配置
- 支持连麦的软硬编配置
- 连麦画面的钱帧
3. 七牛连麦方案详解
3.1. 系统框图
整个连麦系统的架构如上图所示。主要分为三个部分:
客户端 SDK
主要负责客户端的音视频采集、渲染、滤镜处理、编解码、传输等工作
服务端 REST API 和 SDK
主要提供房间管理、状态回调等业务功能
连麦服务器
主要负责信令交互、音视频传输、代理加速等工作
3.2. 交互流程
连麦交互流程如上图所示,因此,App 服务端需要开发的工作如下:
- 为主播创建连麦房间,并将连麦房间和对应主播的 Id 关联起来
- 计算连麦的 roomToken 并提供给 App,该 roomToken 是结合 userId、roomName 等信息使用七牛的 AccessKey 和 SecretKey 按照一定的规则生成
- 提供连麦的业务逻辑,如:观众申请连麦,主播同意/拒绝连麦、进入/退出房间等消息处理
3.3. 房间管理
“连麦” 其实就是一个 “视频会议” ,因此我们引入了 “连麦房间” 的概念,用于隔离不同主播的连麦过程,保障数据的安全以及互不干扰。本方案要求连麦的各方必须首先进入同一个 “连麦房间” ,然后才能开始 “视频会议” 的过程。
房间的 API 主要分为两个部分,一部分在服务端,另一部分在客户端,我们把创建/销毁 “连麦房间” 的功能放到了服务端,由 App Server 向七牛的服务器发送申请来完成。连麦客户端 SDK,只有加入/离开 “连麦房间” 的权限。
房间其实不需要每次直播都创建再销毁,而是可以预先为每一个有连麦权限的主播分配好,需要收回连麦权限的时候,再销毁掉。
4. 应用场景方案概述
4.1. 视频会议
如图所示,仅用连麦系统就可以满足视频会议场景的需求。假设有 n 个人参与会议,对于连麦系统来讲,这 n 个人的角色都是一致的,每个人需要上行一路自己的流到 RTC Server,同时拉取会议中的其它 n-1 路流到本地进行播放。与会者可以随时打开/关闭音/视频来满足不同场景的需求。
4.2. 狼人杀
狼人杀的场景如图所示。当前正在发言的玩家,发布自己的流到 RTC Server,其它玩家从 RTC Server 拉取该玩家的流。这部分功能使用连麦系统即可完成。如果需要直播游戏过程或者落存储,则可从 RTC Server 将当前正在发言的玩家转推一路 RTMP 流到 RTMP Server 上,再通过 CDN 分发给普通观众或者落存储。
4.3. 网红直播连麦
网红直播连麦连麦在业务上存在三种角色——主播、副主播/连麦观众、普通观众,不同的角色,业务流程是不一样的,具体介绍如下:
普通观众(播放)
观众是观看者角色,从流媒体分发网络拉取直播的音视频流,其工作流程如下:
播放主播画面 -> -> -> 退出播放器
副主播/连麦观众(连麦)
副主播/连麦观众是连麦后跟主播视频对讲的角色,其工作流程如下:
打开本地摄像头预览 -> 向主播申请连麦(业务服务器) -> 得到同意(业务服务器) -> 开始连麦-> -> -> 结束连麦
主播
主播是直播连麦活动的从头到尾的参与者,也是整个直播连麦活动的主持者,因此,其业务逻辑也最为复杂,根据不同的业务逻辑和观看体验的需求,可以分成两种方案:客户端合流和服务端合流,分别介绍如下:
- 客户端合流
如图所示,该方案下主播的工作流程如下:
打开本地摄像头预览 -> 初始化推流参数 -> 开始推流(主播画面)-> -> -> 收到连麦申请(业务服务器) -> 同意连麦申请(业务服务器) -> 开始连麦-> 持续推流(合成画面) -> -> -> 结束连麦-> 持续推流(主播画面)-> -> -> 结束推流
该方案的优点是延迟低、服务器资源消耗少。缺点是手机功耗较大,对主播上行带宽要求较高。
- 服务端合流
从上图可以看出,该方案下主播的工作流程与客户端合流最大的区别是连麦过程中的合流+推流的工作由主播端转移到了服务端,因此,可降低主播手机的功耗及减轻上行带宽的压力。与此同时,也给服务器带来更大的压力和更高的性能要求。
4.4. 在线娃娃机
如图所示,玩家与娃娃机摄像头之间数据通过 RTC Server 传输,玩家与摄像头画面经服务端合成后推流到 RTMP Server,普通观众通过 CDN 拉取观看。
5. 使用客户场景案例
淡蓝、敢聊、拉拉公园、小猪TV、手印、酷熊直播、纹路、配音秀、星球TV、鱼多多等
涵盖主流场景
- 秀场直播连麦
- 纯音频连麦
- 左右 PK 模式连麦
- 游戏连麦