FCon7折倒计时最后一周:日程已上线70%!查看详情>>> 了解详情
写点什么

直播答题技术方案解析

  • 2018-02-10
  • 本文字数:3176 字

    阅读完需:约 10 分钟

直播答题已经是风口,毋容置疑。对攻城狮们来说,2018 年春节是个坎,直播答题技术做细致做到位了,才能安心过个好年。

为了应对这个挑战,我们首先分析一下直播答题和传统直播在技术上的不同,然后深度解释一下直播答题解决方案的海量并发派题和收题。

直播答题和传统直播在技术上的不同

直播答题首先是直播,然后是答题。直播答题是构建在传统直播基础上的创新玩法,和传统直播的不同包括下面几点:

1. 海量并发派题

就传统视频直播而言,直播间通常在线用户人数是少几万人,通常情况下超过五万的不多。而对直播答题来说,直播间在线用户人数超过百万那是很平常的事情,某一线直播平台旗下的直播答题直播间在线人数更是突破了五百万人。因此,派题的环节要承受百万级别的海量并发压力,而且所有用户都是在活跃答题的,这是传统视频直播不曾面对过的压力。幸运的是,直播答题可以利用视频直播实时媒体通道来派发题目,为派题的实时性和可达性提供了天然的基础。

2. 海量并发收题

派题可以重用视频直播实时媒体通道,可是收题却不能这么做,因为用户端不推流,而且收题要反馈标准答案和进行统计。收题不但不能重用实时媒体通道,而且还带来同样是百万级别的并发压力,那么要在视频直播架构以外构建一个分布式的子系统来处理。

3. 视频和答题同步

派题重用视频直播实时媒体通道,和语音视频数据包是天然同步的。需要在实时媒体通道扩展一个数据通道,题目信息可以附着在相应的语音视频数据包上传输,做到视频和答题同步。同时,为了应对网络损伤,在随后的数据中可以发送一定的冗余拷贝,接收端再进行排重。

4. 主持人背景特效

中国的直播答题应用受美国同类先行产品 HQ Trivia 的启发,主播的背景都是虚拟的特效,比如变幻的色彩,以后也可能演变成 AR 特效。这里有一个技术点就是要把画面上除了主持人以外的部分去除,然后填充上特效的画面。主持人主持直播答题节目的背景幕布是绿色的,因为在拜耳阵列中绿色的成分最多,摄影机捕捉到的绿色信息最多,在后期更容易去除绿色通道的信息。

直播答题:海量并发派题和收题

直播答题是叠加在视频直播上的业务创新,题目数据量比语音视频少很多,但派题和收题的并发压力是海量的。下面对关键技术点进行探讨,抛砖引玉,希望对大家有所启发。

首先,我们看一下直播答题的业务流程:

  1. 主持人发出派题指令;
  2. 题目信息通过实时通信网络和实时分发网络送达给用户;
  3. VIP 用户从实时通信网络拉取题目信息;
  4. 普通用户从实时分发网络拉取题目信息;
  5. 如题目信息包含完整内容,则下一步,如果只有题目 ID,则到业务服务器查询题目内容;
  6. 用户把题目答案提交给答题统计分析服务器,同时得到标准答案反馈;答题统计分析服务器是分布式的集群,统计答题结果,反馈给主持人;

然后,我们看看各个网络服务实体的分工:

  1. 实时通信网络:为实时传输而设计的网络,能实时传输海量数据,不只是语音视频。它比实时分发网络(比如 CDN)的延迟更低,具有动态回源和对抗弱网等特点。
  2. 实时分发网络:为实时分发海量内容而设计的网络,优点是能支撑海量并发,成本相对也比较低,缺点是延迟相对于实时通信网络要高一些。
  3. 答题统计服务:为统计用户提交的题目答案而在视频直播架构外设计的服务,能反馈标准答案,并且统计所有题目答案,最后反馈给主持人。该服务要能承受海量并发压力。
  4. 业务服务器:如果派题信息包含完整题目内容,用户不需要再查询题目内容;如果派题信息只有题目 ID, 那么用户要到业务服务器查询题目内容。该服务也要承受海量并发压力。

最后,我们再分析直播答题中的关键环节:

1. 海量并发派题

派题的指令必须是主持人端发出,然后服务器会担负起启动向海量用户群发题目的任务。题目是优先级最高的消息,不能像处理 IM 消息那样采取低优先级消息抛弃,或者用户分桶等应对海量并发的策略,必须要确保消息内容实时到达每个用户的终端,这是实打实的实时海量并发。另外,如果由服务器单点在毫秒级别时间内复制群发 N 份消息,那么单点就要承受巨大的压力,这明显是不可能的。那么海量并发派题要依仗内容分发网络的能力。内容分发可以通过实时低延迟网络或者 CDN 来完成,考虑到 CDN 有成本的优势,因此 VIP 用户的派题由实时网络完成,其它用户的派题要由 CDN 来完成。

2. 海量并发收题

收题的环节由用户触发,每个用户答题的时间窗口不尽相同,因此每个用户提交题目的时间有秒级的差别。然而,海量用户在数秒之内提交答案,题目答案属于重要消息,不能做抛弃处理,服务器的压力也是巨大的。为了减少服务器压力,用户的答题将会被就近提交到边缘节点并且获得正确答案反馈,整体的答题统计结果将会由分布式的服务器集群来完成,最后传达到主持人端,使得主持人可以近乎实时地宣布统计的结果。

3. 视频和答题同步

视频直播要低延迟,题目派送同样也要低延迟,而且要和视频画面同步。通过 IM 的能力来派题是很难做到视频和派题同步的,因为语音视频传输通道和 IM 的通道是相互独立的。一般的做法是通过实时语音视频的扩展数据通道来附带传输题目信息,让视频和题目天然就同步。考虑到网络抖动和丢包等网络损伤的情况,在答题时间窗口内,要适当发送题目的冗余 copy,然后用户端做排重,避免题目信息丢失而导致用户收不到题目。

通过实时语音视频传输通道来派题的技术手段其实并不新鲜。在视频直播的 K 歌场景中,主播 K 歌要尽量还原线下的体验 – 主播的歌声、画面还有歌词必须要同步在用户端显示。歌词信息在主播端打点,通过实时语音视频传输通道同步传输给用户端。

另外,还可以为主持人的背景增加特效,甚至 AR 效果。主持人要在绿幕背景前进行节目主持。在采集和编码之间的前处理环节,开发者获得原始视频数据,把绿色的画面部分去除,把主持人的画像扣出来,补充上动画或者 AR 等特效处理后,再把视频数据塞给编码环节。使用第三方视频直播 SDK 的话,那么该视频直播 SDK 必须要开放前处理接口,开发者才能获得原始视频数据,否则开发者没办法通过前处理的方式在视频画面增加特效。比如说,支持 WebRTC 的浏览器没有开放前处理接口,那么基于 WebRTC 的视频直播方案在浏览器端就不支持在视频画面上增加特效。

4. 题目内容安全性

直播答题悬赏巨额奖金,各种黑产活跃到其中,题目内容的安全性十分重要。题目内容缓存在用户终端是万万不可的,必须实时地送达用户终端,否则黑产从用户终端可以提前获得题目内容。

针对题目派送的方式,目前市面上有两种第三方直播答题方案:第一种方案,技术方案通过实时语音视频通道派送题目的全部内容,该方案的优势是完全负责了派题的安全性和并发压力,开发者不需要投入开发成本。第二种方案,技术方案通过实时语音视频通道只派送题目 ID,用户终端获得题目 ID 后,到开发者的业务服务器查询题目内容。该方案的优势是开发者完全把控题目内容的私密性。

以即构 ZEGO 的直播答题方案为例,如果题目内容小于 1000 字节,也就是 500 个中文字符,可以通过实时语音视频通道传输所有题目内容;如果超过 1000 字节,通过实时语音视频信道传输题目 ID, 然后由用户终端以题目 ID 从就近服务器拉取题目内容。

如果第三方直播答题方案只派送题目 ID,开发者可以把题目内容缓存在就近服务器,通过题目 ID 获取题目内容,增加的延迟很小,不会影响用户体验。然而,开发者要承担查询题目的海量并发压力,还要实现题目内容的安全保护机制,比如说拉取题目要鉴权,题目传输要加密,和题目时效窗口的控制等,开发成本也就水涨船高。

写在最后

视频直播的魅力在于,它已经成为类电视的流量入口,类似开心辞典等在电视上被验证过的业务玩法也会逐一在视频直播平台上尝试和落地。如果说直播答题是视频直播的第二春,那么每年春天还会来,请不要意外。

作者介绍

冼牛,即构科技资深语音视频专家,北京邮电大学计算机硕士,香港大学工商管理硕士,多年从事语音视频云服务技术研究,专注互动直播技术、语音视频社交和实时游戏语音。

2018-02-10 17:1416735

评论

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

spring-cloud-kubernetes的服务发现和轮询实战(含熔断)

Java 程序员 后端

最佳实践|放弃 Ceph,Salesforce 使用 Apache BookKeeper 在云中实现最强存储

Apache Pulsar

开源 云原生 存储系统 Apache Pulsar 消息系统 Apache BookKeeper

Springboot整合Mybatis增删查改、连接MYSQL数据库及配置druid连接池

Java 程序员 后端

springboot+Redis+Shiro,java编程技术高级八大类

Java 程序员 后端

SpringBoot实战教程(3,mysql集群和主从原理

Java 程序员 后端

Springboot快速整合JPA实现增删查改(1),java教程视频下载

Java 程序员 后端

六问六答理解ForkJoin原理

华为云开发者联盟

Java 线程 线程池 forkjoin 归并计算

SpringBoot + Vue 开发前后端分离的旅游管理系统,unixlinux编程实践教程

Java 程序员 后端

SpringBoot2----Web模块的基本注解,美的java面试题

Java 程序员 后端

SpringBoot2----数据访问,实战java虚拟机百度云

Java 程序员 后端

dart系列之:dart语言中的特殊操作符

程序那些事

flutter dart 程序那些事 11月日更

springboot入门教程和mysql数据库,java框架面试基础

Java 程序员 后端

SpringBoot+Redis基本操作,实现排行榜功能(1),springmvc教程下载

Java 程序员 后端

SpringBoot+Redis基本操作,实现排行榜功能,javasql优化面试题

Java 程序员 后端

Windows/Mac 安装、使用Python环境+jupyter notebook

老表

python入门 11月日更 Python自动化 运营学Python

SpringBoot整合Shiro(完整版)(1),java企业级应用教程视频

Java 程序员 后端

SpringBoot2----拦截器和文件上传功能,源码+原理+手写框架

Java 程序员 后端

腾讯云原生开源生态专场在武汉召开,洞察开源云原生技术发展趋势和商业化路径

科技热闻

Springboot快速整合JPA实现增删查改,linux系统架构和应用技巧

Java 程序员 后端

Springboot整合ActiveMQ(Queue和Topic两种模式),Java开发者跳槽指

Java 程序员 后端

SpringBoot整合MybatisPlus实战动态SQL,java编程入门经典

Java 程序员 后端

Spring02:基本配置与依赖注入,贼好用的Java学习路线集合

Java 程序员 后端

SpringBoot 实战:优雅的使用枚举参数(原理篇,这一次带你搞懂Spring代理创建过程

Java 程序员 后端

springboot+mybatis+druid整合笔记,java程序设计案例教程课后答案

Java 程序员 后端

springboot多数据源配合docker部署mysql主从实现读写分离

Java 程序员 后端

Springboot 整合Shiro 轻量级权限框架,从数据库设计开始带你快速上手shiro

Java 程序员 后端

Springboot 使用Quartz定时器执行多个定时任务 配置篇

Java 程序员 后端

springboot中如何使用拦截器,Javaweb资料视频

Java 程序员 后端

SpringBoot使用Aop自定义注解展示日志信息,mysqlsql性能调优的方法

Java 程序员 后端

云原生领域再添重磅开源项目:腾讯发布 K8s 多集群管理开源项目 Clusternet

科技热闻

SpringBoot整合Shiro实现权限管理,rabbitmq原理图

Java 程序员 后端

  • 扫码添加小助手
    领取最新资料包
直播答题技术方案解析_语言 & 开发_冼牛_InfoQ精选文章