10月21日,杭州云栖大会-技术&可持续发展论坛,注册有礼 了解详情
写点什么

奇秀直播连麦技术探索

2020 年 8 月 08 日

奇秀直播连麦技术探索

前言

2020 上半年,直播再次成为中文互联网世界的新风口,甚至到了无达人不直播,无名人不带货的地步;从 2016 年直播元年开始,直播的内容越来越多元,从秀场直播,游戏直播,到短视频直播普济众生,再到电商直播的“带货”,“眼球经济”成长为互联网上的主流。本文介绍爱奇艺在奇秀直播的技术探索。


01 奇秀直播的两种直播场景简介

第一、普通直播: 有一个主播和很多观众,该场景下主播一个人表演,其他观众通过平台 IM 系统跟主播进行文字互动,类似于单口相声;这种场景大部分使用 RTMP 协议,然后通过 CDN 的方式去做分发,从而实现大规模高并发的数据分发。


第二、连麦直播: 该模式下主播跟观众除了基于 IM 系统沟通外,还可以进行和其他一个,或者多个主播实时音视频互动,普通观众可以同时观看多个主播的画面,效果直观,更能有效吸引用户,类似于对口相声和群口相声。


在连麦直播有很多有价值的业务场景,比如 PK 场景,此时每个主播头像上面会显示一个血条,当观众给某个主播送礼时,她的血条则会增长,结束时哪方观众送的礼物多就会胜利,失败了会被惩罚,这样一来,就能让观众更多地参与到直播的过程中,而且是通过送礼物。


02 直播场景使用的技术介绍

在技术上,普通主播一般是基于 TCP 的 RTMP 协议来推流的,而连麦直播一般是使用基于 UDP 的 RTP 协议来推流的。由于连麦直播是基于 UDP 的,还需要考虑应用层的丢包重传问题。在实现复杂度上,普通主播是相对较低的,而连麦直播实现复杂度相对较高。



对于连麦直播可以使用多种技术实现,比如对 RTMP 改进,传统的视频会议系统,WebRTC 改进等。奇秀直播采用的 woogeen,一种 WebRTC 改进实现的,对客户端 SDK 和后台 MCU 服务器进行重新设计,专门针对直播推流,直播连麦等应用场景,整体架构如下:



主要模块及功能:


第一、客户端 SDK: 主要包含信令功能和将 WebRTC 流推送到 MCU;


第二、MCU 节点: socketio 信令接入,WebRTC 流接入,音视频转码和混流,并负责把 RTMP 流推送出去;


第三、MCU_DNS: 为用户提供最佳 MCU 节点。MCU_DNS 负责节点管理,包括 MCU 单点负载收集,MCU 申请调度, 黑名单机制, MCU 集群上线/下线处理;


第四、MCU_API: 提供业务操作 API,比如 HTTP 信令接入,控制推流和混流等复杂操作,简化业务方的接入工作量;


第五、业务后台: 负责推流所需的资源(例如,MCU 房间号,RTMP 地址)和收集 MCU_API 的反馈信息,控制整个直播和连麦的过程;


03 系统架构拓扑


这里介绍一下奇秀直播系统的拓扑结构,从上图可以看出,主播是把音视频流通过 RTP 推流到 MCU 服务器;在普通直播时,MCU 服务器只需要把收到的音视频流转发到 RTMP,当前切换到连麦直播场景时,MCU 服务器会在不中断流的情况下进行合成,然后把合成流再转发到 RTMP,连麦开始和结束画面实现平滑切换;


从观众端来看,都是使用 HTTP-FLV/RTMP 来进行拉流播放,且都是基于 TCP 的,并且普通和连麦场景切换时不会断流或卡顿;其次,每台 MCU 服务器都是一个独立的服务提供者,各台服务器可独立上线和升级,服务器之间无相互依赖,如服务器异常,只影响当前服务器,做到去中心化;


04 连麦问题和优化

一、WebRTC 的优化

奇秀连麦基于 WebRTC,但由于 WebRTC 一个针对面向通话的解决方案,所以需要对 WebRTC 进行调整和优化。


  • WebRTC 采集的音频是 8K 或 16K 的,因为人在通话过程中信号的频率是不超过 4KHz 的,而直播主要是主播唱歌等一些音乐场景,所以必须要求是高采样率的,现在使用是 48K 的采样率。

  • 为了延时更低,WebRTC 使用 10~32Kbps 的低码率音频编码,这样音质很差,而音视频直播里要用到 64~320Kbps 的高码率的音频编码,但还要考虑设备和网络情况,现在通过界面选择编码码率,默认 128Kbps 的音频编码;

  • 视频编码采用的是 VP8 和 VP9,但 VP8 和 VP9 不适合在 CDN 上进行分发,现在使用的是 H.264 这种比较通用的视频编码;

  • 在传输方式上,WebRTC 使用 P2P 方式来进行媒体中转,它只是解决端到端的问题,而对于连麦直播来说,并不仅仅解决主播端的音视频互通问题,还要把主播的数据推送到连麦服务器、CDN,且要保证到达我们的观众端,所以在连麦系统上是 Relay 的方式,很好处理推流和混流的问题。


二、连麦问题解决

另外和普通直播相比,连麦直播还需要重点解决下面几个问题:


1、混流问题


在连麦直播里有两个或多个主播的音视频流,首先要解决的就是进行混流。对于混流的技术,可以选择在服务器合流、多流播放和在客户端合流播放等,奇秀连麦采用的服务器合流技术,可以减少下行网络带宽和播放设备的压力等;在服务器上有一个单独服务进程处理拉流、混流、和推流,它维护所有有关的信息,外部只需要通过 API 和它交互,避免了上层处理这些事务。



2、推流延时问题


试想一下,如果连麦过程中主播说一句话,对方要等三四秒才能听到,连麦的体验就会非常差,而普通直播无这个要求,这个问题从以下几个个方面进行解决:


  • 开播前的网络优选。 当主播在发起直播时会根据她所在地理位置,网络运营商以及服务器的负载等条件,然后从所有的节点里面选出一个比较好的节点和 MCU 服务器进行推流。

  • 是码率动态调整。 在连麦直播里,必须保障音视频的实时性,另外不花屏、不卡顿,所以在传输的过程中,采用了码率自适应策略。由于主播的网络是非常复杂,所以采用根据网络情况动态调整码率的情况,并不是实时地随着网络去变化,而是有一个快降慢升的逻辑,如果码率上调太快,则会导致网络出现一个很不稳定的状态。快降慢升的方式就是当出现丢包的时候,马上下调码率,并且只有当保持了几秒以上的稳定状态后,才允许码率上调。码率动态调整使用了 WebRTC 的拥塞控制算法,共有两种:


(1)、基于延迟(delay-based)的拥塞控制算法,由收端进行带宽估算,接收方需要每个数据包到达的时间和大小,并计算每个数据分组之间(inter-group)的延迟的变化,由此判断当前网络的拥塞情况,并最终输出码率估计值由 RTCP feedback(TMMBR 或 REMB)反馈给发送方;在估算时,利用卡尔曼滤波,对每一帧的发送时间和接收时间进行分析,修正估出的带宽。


(2)、基于丢包(loss-based)的拥塞控制算法,发端带宽控制,发送方通过从接收方周期性发来的 RTCP RR(Receiver Report)中获取丢包信息以及计算 RTT,进行丢包统计,并结合 TMMBR 或 REMB 中携带的码率信息算得最终的码率值,来动态的增加或减少带宽,在减少带宽时使用 TFRC 算法来增加平滑度。然后由媒体引擎根据码率来配置编码器,从而实现码率的自适应调整。


  • 是性能优化。 在直播过程中经常遇到设备发热的问题,设备发热会导致系统降频,以及对摄像头的采集掉帧严重。


首先,美颜和特效的功能是可开关的,如果发现性能不行,可以选择不开;其次,特效在不同的机型都有不同的展示。再者,除了个别机型不能支持音视频硬编解外,实现了音视频的硬编硬解。


3、房间管理问题


房间管理会涉及到一些业务层面的逻辑,比如说房间的状态、房间里有多少人、大小主播之间怎么沟通,这些都需要通过房间管理来做好的。为了保持独立,在服务器上有一个单独服务进程进行房间的管理,它维护了所有的的信息。另外为了同时支持普通和连麦直播,现在为每个主播端单独创建一个房间;当连麦时,会相互拉取对方房间的流进行合成,而不是加入同一个房间。


4、回声问题


普通直播里面回声基本上不会存在,因为它是单向的,但是在连麦里面回声是必须要解决的。一般产生回声的原因是近端的声音被自己的麦克风采集后通过网络传到远端,而远端扬声器播放出来的声音被麦克风采集后通过网络又重新发回近端,使得近端通话者能够从扬声器中听到自己的刚才说的话,产生回声。


采取回音分端进行优化:


  • 在 PC 端,一般通过机架软件和兼容的声卡,配置不同的通道,比如伴奏,系统,麦克风,混响等,避免连麦声音被采集再次推流进行回音处理;

  • 在移动端,通过动态切换混音消除进行回音消除,连麦时开启回音消除,不连麦时不进行回音消除,提高声音质量。采用的是 webRTC 的混音消除算法(AEC,AECM),采用自适应滤波算法实现回声消除。该算法以输出到扬声器的音频数据为依据,根据现场的回声路径特征,模拟出回声信号。以模拟回声信号为依据,从麦克风采集到的音频数据中滤除模拟回声信号,使用的算法包括 a.回声时延估计 b.NLMS(归一化最小均方自适应算法) c.NLP(非线性滤波) d.CNG(舒适噪声产生等;


05 继续优化的方向

第一、是连麦服务器是允许实时切换,前文提到当主播在发起直播时,会根据她所在地理位置,网络运营商,以及服务器的负载等条件,然后从所有的节点里面选出一个比较好的节点进行主播推流网络的优选,但是如果在推流过程中发生问题,只能重新开播;如果这时主播在 PK,会影响主播的榜单和成绩,所以在推流过程中发生问题可以实时切换服务器,是一个值得优化的方向。


第二,在移动开播过程中,如果发生网络切换时,在推流过程响应网络的实时切换是一个值得优化的方向。


第三,移动端现在回音消除通过 webRTC 的混音消除算法进行处理,但是处理后音质一般,需要进一步根据娱乐场景进行优化。


参考资料:


  1. 《基于WebRTC的互动直播实践》

  2. 《移动直播连麦技术实践》

  3. 《WebRTC回声消除技术》

  4. 《WebRTC的拥塞控制技术》

  5. 《WebRTC 权威指南》


本文转载自公众号爱奇艺技术产品团队(ID:iQIYI-TP)。


原文链接


https://mp.weixin.qq.com/s?__biz=MzI0MjczMjM2NA==&mid=2247487666&idx=1&sn=ad95172d552bd4ce7bb64b4bfda3011c&chksm=e9768c91de0105879b84ae285b33bbff05b9f769f5fcbc7e416dd63989c05cb6cdaa47b85033&scene=27#wechat_redirect


2020 年 8 月 08 日 10:031939

评论

发布
暂无评论
发现更多内容

分布式事务实战--一个完整的xa例子

叶东富

Go MySQL 数据库 分布式事务

ONES 对话敏捷专家王明兰|系统化敏捷转型,企业应该这样做

万事ONES

研发管理 解决方案 ONES 敏捷转型

你一定要知道的敏捷规划工具—影响地图

华为云开发者社区

敏捷开发 软件开发 开发 影响地图 规划工具

央行《人工智能算法金融应用评价规范》之AI安全攻击及防范解读

索信达控股

AI 金融科技 金融监管 安全性

BTA挖矿软件平台系统开发

获客I3O6O643Z97

挖矿矿池系统开发案例 BTA 挖矿挣钱是什么原理

基于深度学习的短文本相似度学习与行业测评

OPPO小布助手

深度学习 AI 短文本

Redisson 分布式锁源码 10:读写锁

程序员小航

Java redis 源码 分布式锁 redisson

解读:打破边界 跨链HDEX 重构交易价值

区块链小八歌

Python 爬虫从入门到入坑全系列教程(详细教程 + 各种实战)

若尘

爬虫 python 爬虫

2021 EdgeX中国挑战赛拉开帷幕,赋能开发者,英特尔助力创新方案落地

新闻科技资讯

什么是敏捷开发?敏捷开发的流程有哪些?

万事ONES

敏捷 敏捷开发 Agile ONES

学编程要考证么?我考了 6 个!

程序员鱼皮

Java c++ Python 数据结构 算法

十年经验帖 | 敏捷转型6大误区

LigaAI

敏捷开发 敏捷管理 敏捷转型

详解Camtasia的注释功能

淋雨

视频剪辑 Camtasia 录屏软件

EasyRecovery的工具栏介绍

淋雨

视频剪辑 Camtasia 录屏软件

如何像百度直播一样优化用户体验(起播篇)

百度Geek说

前端 直播 起播优化

BPool矿池app系统开发平台

获客I3O6O643Z97

区块链+ BPool

剖析供应链攻击的防范

华为云开发者社区

网络安全 安全 加密 供应链攻击 勒索软件

MindSpore模型精度调优实战:常用的定位精度调试调优思路

华为云开发者社区

模型 mindspore 精度 模型精度调优 静态特征

模拟定位原理

BUG侦探

定位

坚持正确的研发项目管理转型之路

万事ONES

项目管理 DevOps 敏捷开发 ONES

汇总十家互联网大厂面试题后,产出Java架构师1575道“完美圣经”

Java架构追梦

Java 阿里巴巴 架构 面试

升级数据库游戏不停服?来看看TcaplusDB是怎样操作的(1)

数据人er

数据库 nosql tencentdb TcaplusDB

Go 学习笔记之 Panic异常

架构精进之路

Go 7月日更

融云主办WICC2021 即将召开 “音视频+AI”是新技术亮点

融云 RongCloud

流动性质押挖矿系统开发DAPP

获客I3O6O643Z97

DAPP智能合约交易系统开发 DeFi流动性挖矿 质押挖矿

面试官:数据库自增 ID 用完了会咋样?

JavaFish

Java MySQL 数据库

[TcaplusDB]行业新闻汇编(7月7日)

数据人er

数据库 nosql 游戏 tencentdb TcaplusDB

如何设计实现H5营销页面搭建系统

前端森林

前端 可视化 营销 React 架构·

企业如何选择合适的敏捷项目管理工具?

万事ONES

团队协作 研发体系 研发管理工具 ONES

模块8作业

方堃

数据cool谈(第1期)数据库寻路,开源有态度

数据cool谈(第1期)数据库寻路,开源有态度

奇秀直播连麦技术探索-InfoQ