全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件

直播答题解决方案

更新时间:2018-03-02 11:19:39

行业综述

2018年伊始,互联网圈就刮起了一阵大佬狂撒币,网友喜答题的热潮。以映客芝士超人等为代表的直播问答平台,通过答题分奖金的互动模式,迅速引爆网络热点。随后,多个直播和视频平台也上线了直播问答游戏。一时之间,这种参与门槛低、奖金池高、流量裂变传播的互动模式,成为了全新的获客、促活、盈利的重要手段,显然要比烧钱推广来得更有效。

凭借此模式,直播问答APP开始占据APP STORE前排位置,并纷纷获得巨头的广告赞助,成功流量变现。毫无疑问,直播问答已经是新风口!

技术难题

从系统角度看,移动直播问答有如下4个典型特点:

  • 直播互动时间短,一次直播活动时间在30分钟左右。
  • 百万并发,单直播房间百万级别并发用户十分常见。
  • 高频直播,一天 6 次左右高频直播。
  • 推题同步,全网用户推题和音视频画面同步。

这些特点决定了整个直播答题系统对于稳定性、性能和安全都有极高的要求,如果想要实现,需要面临如下几个场景和问题。

  • 对于高并发、实时性和稳定性的高要求

直播问答游戏的单场参与人数动辄几十万、上百万,海量并发的压力非常之大。加之直播问答形式互动性又极强,主持人和作答画面、过场动画交替出现,一旦画面卡顿,整个答题过程将被破坏。所以对于系统的高并发、实时和稳定性要求非常高。

  • 全网推题同步

服务端的推题同步是直播答题系统的核心。上百万个在线手机客户端,同样一套题库,服务端需要在正确的时间点进行推题,实现秒级内容下发,还要在秒级时间内对作答结果进行准确判断和结果统计,这中间需要多个推题通道来确保推题到达客户端的成功率。

  • 流量中心频现羊毛党

作为流量风暴的中心,也要面临很大的安全风险。比如数据泄露造成业务漏洞暴露、DDos攻击导致前端业务不可用、作弊外挂带来的经济损失和服务器压力等等,一旦系统遭遇安全隐患,不仅会带来经济损失,更会产生核心用户的流失。

  • 附加功能开发难度大

为了提升用户答题过程中的互动性和趣味性,活跃直播问答的氛围,增加运营变现的手段,多数直播间除了具备直播美颜、弹幕评论功能,还支持连麦互动、片花插播、动态字幕等多种玩法整合。单独每一项功能的开发都需要花费较长的时间,想要快速上线一整套功能,开发难度还是十分大的。

风口稍纵即逝,面对种种技术难题,企业必然会选择第三方解决方案快速上线产品,既可以避免了自行开发的高难度和长周期等问题,又可以节省人力和资源成本,成功凭借风口起飞。

为什么选择阿里云

为了助力企业紧握风口,阿里云推出一站式移动直播问答解决方案。阿里云技术护航,快速构建稳定、可扩展的直播答题应用系统。

通过稳定高性能的计算基础设施和可扩展的直播问答系统架构,实现技术层面的音画题同步、稳定流畅推拉流、低延时互动、流量安全保障等核心能力,并提供了用户运营、产品优化和商业变现等服务,满足了企业高性能、高稳定性、一站式的应用需求。

主要表现在以下3个方面:

  • 百万并发

双专线推流链路,保障推流帧率稳定性;全球1200+CDN节点,智能调度加速服务,保障播放流畅。

  • 画题同步

推题服务结合音视频流时间戳推题,百万长链接,十万QPS消息互动,多方案容灾确保推题到达SLA。

  • 安全保障

全链路推拉流实时秒级监测,7层接口接入WAF、智能风控模块等多重云端防控机制保障安全、合规。

业务功能架构

阿里云稳定、高性能的基础设施,和可扩展的系统架构,帮助客户构建稳定和可扩展的直播答题应用系统。

1

系统架构图如下所示:

2

系统架构的说明如下所示:

  • 短链API服务走HTTPS,防劫持
  • 核心接口过WAF+共享防护,安全防护
  • 直播互动消息实时写入缓存,异步写入DB
  • 评论区消息实时文本检测,垃圾消息阻断
  • 长链接按用户分组、可扩展
  • IM消息可降级广播
  • 推题服务结合全局时钟和SEI信息实现音画题同步
  • 每期答题活动页面通过CDN+OSS静态页面更新
  • log、db、redis数据异步写入Hbase,离线分析
  • 阿里云ABTN专线和双直播中心保障稳定可靠的推流通道

方案参考架构

为了助力企业紧握风口,阿里云推出一站式移动直播问答解决方案。通过稳定高性能的计算基础设施和可扩展的直播问答系统架构,实现技术层面的音画题同步、稳定流畅推拉流、低延时互动、流量安全保障等核心能力,并提供了用户运营、产品优化和商业变现等服务,满足了企业高性能、高稳定性、一站式的应用需求。

双专线推流链路

直播问答推流链路最核心的诉求是推流链路的稳定性,保障30分钟推流答题过程中的推流帧率稳定,阿里云直播问答推流系统架构:

3

  • 推流服务部署阿里云北京云机房,SNAT 推流到阿里云直播中心,走阿里巴巴ABTN专线网络,推流链路稳定性有保障。
  • 两套域名,分别用于直播中心北京单元和上海单元,某个直播中心单元故障,可以实时切换。
  • 一套域名,一个房间活动推两路流,互为Backup。
  • 直播中心做实时转码。
  • 阿里云视频直播服务全链路推拉流实时秒级监测,有效监测推流帧率的稳定性和拉流播放的流畅性,并将实时秒级监控报警信息通过企业服务钉钉群同步。

以上直播问答系统,将推流服务部署阿里云,结合阿里巴巴ABTN专线网络,和阿里云视频直播服务北京直播单元、上海直播单元,提供双专线推流链路,可保障推流帧率的稳定性和推流服务99.99%的可用性SLA。

画题同步

直播答题的核心环节之一是如何做到画题同步。阿里云方案中,主持人信号与音视频通过同一传输通道同时传输,高精度同步。这也是决定用户体验的关键。阿里云提供的方案如下:

4

具体操作流程如下所示:

  1. 主持人提出问题,此时准备推送题目。为了能快速让用户看到题目,题库都存在阿里云持久型缓存数据库Redis上。

  2. 现场人员发出信息,通过接入方的AppServer,调用阿里云的OpenAPI,在直播视频流当前位置中插入若干SEI帧,帧内容可由业务自定义。

  3. 播放SDK接收到视频流后,解析出SEI帧,并回调给APP。此时APP立即向AppServer请求问题信息,然后显示在APP上,完成整个出题过程。

  4. 收到用户答题后,用户答题结果实时写入Redis,判断答题是否正确。并返回给现场人员。完成整个答题流程。

以上方案环环相扣,实现了从主持人信号与音视频通过同一传输通道同时传输,可实现高精度同步。通常,直播答题场景都是通过现场人员在改造之后的OBS端,实现SEI信息插入的操作,同时,阿里云直播答题解决方案也即将提供移动端出题的能力,满足主播直接出题的业务场景需求。

安全问题不能忽视

直播问答一经上线就成为了流量的中心,随之而来的就是黑色产业和安全漏洞等一系列问题。对此,阿里云通过安全组件、白盒签名技术、云端防控等技术,有效保障业务逻辑安全,预防算法泄露以及业务漏洞的暴露,同时保护答题过程中通讯链路安全,防止脱机外挂自动答题,瓜分奖金。并且提供云端防护,人机对抗,识别黑产,防止模拟器、设备信息篡改及大量垃圾注册。

同时,该解决方案可以搭配DDoS防护包安全产品,直接可以把防御能力加载到云产品上,经过简单部署即可实现分钟级生效,快速升级产品安全能力。

此外,如果出现机器外挂的瞬时涌入给业务增压的情况,解决方案可以搭配Web应用防火墙,采用智能门阀机制,过滤恶意的机器外挂请求,精准限流技术保障业务访问平稳,降低后端服务压力,轻松应对数十倍、百倍的业务高峰流量。

一站式视频直播服务

阿里云视频直播问答解决方案依托强大的云计算基础设施、领先的CDN内容分发网络而建,在功能层可以实现主播人脸美颜等标配能力,也可以通过导播技术,完成直播画面和其他内容的自由切换。

一个典型的场景应用:在主持人开场时,用动态字幕更直观的介绍活动规则,并插入推广片花来引导用户进行活动宣传,还可以在活动开始前、活动中和结束时加入视频类垫片,运用于广告植入和直播异常时的备播处理。

据悉,目前视频直播服务业务场景已经基本覆盖所有行业,服务4000多家客户。在许多直播平台看来,直播问答游戏能够风靡千万网友,离不开背后云计算技术的赋能和支持。映客芝士超人更是直接表示,映客芝士超人是阿里云稳定支持的哦!相信在新兴的直播问答领域,有了阿里云的保驾护航,一定会有更多企业乘云飞翔!

实现方案

流程说明

  1. 主持人提出问题,此时准备推送题目。

  2. 现场人员发出信息,通过接入方的AppServer,调用阿里云的OpenAPI,在直播视频流当前位置中插入若干SEI帧,帧内容可由业务自定义。

  3. 播放SDK接收到视频流后,解析出SEI帧,并回调给APP。此时APP立即向AppServer请求问题信息,然后显示在APP上,完成整个出题过程。

注1:需要说明的是,在这个方案中,由于推流会产生固定的延时,而现场人员是通过云端服务插入SEI信号,有可能插入SEI的画面比真实插入时间早一点。因此,现场人员在出题前需要做好校准,在插入SEI信号时加入一个固定延迟。

举例:现场主持人在12:00:00时提出问题,假设现场到阿里云的推流延时有1秒,那么现场工作人员应在12:00:01时调用添加SEI的OpenAPI(或者在12:00:00时调用,但是OpenAPI里面的delay参数设置为1000),这样正好保证SEI插入的是12:00:00主持人提出问题时的画面。

注2:客户端在收到SEI信号后,需要向服务器获取问题,这会产生一定的通信耗时。因此实际答题系统中,可酌情延长答题时间,比如在原有答题时间上+1秒。

注3:用户答题后,客户端需要上报答案,这会产生一定的通信耗时。因此实际答题系统中,AppServer在接收到答案时,答题超时时间允许有一个宽限值,比如原有的答题时限+1秒之内的均认为及时答题。

5

配置与开通

  • 首先需要开通阿里云视频直播服务。
  • 提出工单,要求开通视频云添加SEI功能(提交域名和appname信息)。
  • 在推流时,需要增加一个推流参数wm=1。

服务端API调用

如前流程介绍,在接入方的appserver完成视频流中添加SEI信号时需要调用以下接口。

注:除了通过服务端API方式插入SEI信号完成题目下发,还可以通过我们提供的定制OBS工具完成推题。

(1)添加SEI的OpenAPI

  • 请求参数
参数 类型 是否必须 描述
Action String 操作接口名,系统规定参数,取值:AddTrancodeSEI
DomainName String 您的加速域名
AppName String 直播流所属应用名称
StreamName String 流名(SEI将会被添加到该流以及该流所产生的所有转码流上)
Text String SEI文本,长度限制: 4000 字节
Pattern String 追加到每一个关键帧 / 每一帧,取值:keyframe / frame
Repeat Integer 重复次数,-1 代表无限
Delay Integer 接收到命令后的 delay 时间(毫秒)
  • 返回参数
名称 类型 描述
RequestId String 该条任务请求ID
  • 特殊错误码
错误代码 描述 Http 状态码 语义
InvalidDomain.NotFound The domain provided does not exist in our records. 404 当前账户下未查到域名
IllegalOperation Illegal domain operate is not permitted. 403 不支持当前操作,如:非直播类域名
InvalidParams invalid parameters 400 参数不合法
InternalError The request processing has failed due to some unknown error. 500 后台发生未知错误

(2)调用示例

  1. https://live.aliyuncs.com?Action=AddTrancodeSEI&Domain=test101.cdnpe.com&App=xxx&Stream=xxx&Text=hahaha&Pattern=frame&Repeat=300&Delay=0&<公共请求参数>

注意:在直播答题这种场景下,参数Pattern建议取值frame,Repeat建议为3倍的关键帧间隔(示例中为300)。这样设置可以保证在3个关键帧间隔内,即便发生丢帧,只要播放器收到1帧,即可取得SEI信息。由于SEI在多帧内重复,所以播放器需要做SEI去重的工作。

接入答题播放器

首先需要集成阿里云播放器SDK,具体参考如下链接:

针对直播答题,播放器SDK提供了SEI数据的回调,分别来看Android和iOS对应的接口。

  1. Android SEI数据回调

通过播放器设置SEI数据回调接口,来获取到SEI的数据,从而进行业务的处理。

方法如下:

  1. setSEIDataListener
  2. public void setSEIDataListener(MediaPlayerSEIDataListener listener)
  • 描述: 给播放器设置SEI数据的回调,获取流中的SEI数据。
  • 参数: 回调监听。
  1. MediaPlayer.MediaPlayerSEIDataListener
  2. public void onSEIdata(String data)
  • 描述:SEI数据的回调监听
  • 参数:data:SEI的数据。

说明:同一次播放,如果SEI数据相同,则只回调一次,后续的相同数据不会回调。

使用示例

  1. aliVcMediaPlayer = new AliVcMediaPlayer(DemoLiveAnswerActivity.this, videoSurface);
  2. aliVcMediaPlayer.setSEIDataListener(new MediaPlayer.MediaPlayerSEIDataListener() {
  3. @Override
  4. public void onSEIdata(String data) {
  5. praseData(data);//解析SEI data数据
  6. }
  7. });
  8. aliVcMediaPlayer.setMaxBufferDuration(3 * 1000);
  9. aliVcMediaPlayer.prepareAndPlay(liveUrl);
  10. private void praseData(String data) {
  11. //具体格式按照自己业务的需求去解析,然后做业务处理
  12. JSONObject jsonObject = null;
  13. try {
  14. jsonObject = new JSONObject(data);
  15. } catch (JSONException e) {
  16. e.printStackTrace();
  17. }
  18. SeiInfo seiInfo = SeiInfo.getFromJson(jsonObject);
  19. if (seiInfo == null) {
  20. Toast.makeText(getApplicationContext(), "SEI 数据错误", Toast.LENGTH_SHORT).show();
  21. return;
  22. }
  23. if (seiInfo.type.equals("startAnswer")) {
  24. //到服务器请求题目
  25. requestQuestion(seiInfo.questionId);
  26. } else if (seiInfo.type.equals("showResult")) {
  27. //到服务器请求答题汇总
  28. requestQuestionReport(seiInfo.questionId, seiInfo.showTime);
  29. }
  30. }

以上方法均可在Demo中找到使用方法。

  1. iOS SEI数据回调

通过监听播放器SEI数据通知来获取SEI数据,具体的通知如下:

  1. AliVcMediaPlayerSeiDataNotification

使用示例

添加监听通知接口:

  1. //直播答题接收的消息
  2. [[NSNotificationCenter defaultCenter] addObserver:self
  3. selector:@selector(onSeiData:)
  4. name:AliVcMediaPlayerSeiDataNotification object:self.mediaPlayer];
  5. 处理监听通知中SEI数据:
  6. //答题
  7. - (void)onSeiData:(NSNotification *)notification{
  8. /*
  9. {
  10. "questionId": "001”,
  11. "type": "startAnswer"
  12. } 这个是开始答题
  13. {
  14. "questionId": "001”,
  15. "type": "showResult",
  16. "showTime": "5"
  17. } 这个是显示答题结果
  18. */
  19. NSDictionary* dict = [notification userInfo];
  20. if (dict) {
  21. NSString* seiData = [dict objectForKey:@"seiData"];
  22. if (seiData) {
  23. NSLog(@"sei data is %@",seiData);
  24. }
  25. }

可以在Demo中查询具体的使用方法。

注意事项

  1. 播放器延迟处理

需要控制每个端上的延迟是一致的,可以设置播放器最大的延迟参数来处理,一般的原则是延迟越大,越能够抗网络抖动,延迟越小,则卡顿越频繁。针对直播答题来说,需要考虑到整条链路上的整体延迟,所以这个延迟参数对题目的有效性时间会有影响。如果播放器延迟控制在3秒,答题时间是10秒,则题目的有效性时间需要加上播放器的延迟时间则是13秒。

ios延迟控制参数,单位毫秒@property(nonatomic, readwrite) int dropBufferDuration;android延迟控制接口:单位毫秒public void setMaxBufferDuration(int duration);

  1. 下发题目延迟处理客户端在收到SEI信号后,需要向服务器获取问题,这会产生一定的通信耗时。因此在下发题目时,可酌情加大expiredSeconds,比如在原有答题失效时间上+1秒。

接入步骤详述

本文档用于实现从零开始搭建直播问答服务,包括使用直播推流并下发题目、app和appserver交互完成答题的详细过程。

6

步骤一:准备工作

  1. 开通阿里云视频直播服务

  2. 登陆控制台,在 视频直播 > 域名管理 中,选择管理,获取推流和拉流地址。详细操作请查看视频直播文档

  3. 提出工单,申请开通在视频直播的推流时添加SEI信号的功能,并附上相关的直播域名和appname信息。

    注意:由于鉴权功能默认为开启状态,您须使用 鉴权URL 才能进行推流,避免被盗链的风险。

步骤二:开始直播推流

在获取推流地址后,可进行推流。如用OBS进行推流,可查看OBS设置文档

注意:

  • 开启云端添加SEI功能,务必在推流地址中加上参数wm=1。
  • 推流开始之后,在“流管理”中查看拉流地址时,您会看到除了目标推流地址之外,还会显示存在一个带有“_sei-copy”字符串的推流地址,请忽略即可。您还是从自行配置的推流地址中去获取拉流地址。

步骤三:答题播放器接入

阿里云播放器SDK支持SEI信号的解析,您可以直接集成使用(下载)。

Android

  • 系统支持

播放器SDK支持Android4.0以上。手机芯片要求armv7或arm64架构。

  • 运行环境

推荐开发者使用 Android Studio 作为自己的开发工具,本开发文档也是基于 Android Studio开发环境下进行编写的。

  • 如何导入
  1. 将如下aar添加到libs文件夹中。

    7

  2. 在app的gradle中添加对aar的引用。

    8

  • 播放器使用

在需要使用播放器SDK的activity里面添加如下方法:

9

此外,andriod播放器更详细的使用方式介绍请见基础播放器;andriod播放器更多功能和接口请参考相关接口文档

iOS

  • 系统支持

    播放器SDK支持iOS8.0以上。

  • 运行环境

    建议使用XCode8.0以上版本进行编译。

  • 如何导入

    播放器SDK支持普通导入和Cocoapods两种导入方式,选择一种即可。

    • 普通导入

      需要导入AliyunPlayerSDK.framework、AliyunLanguageSource.bundle到工程中。

      打开工程,选中目标target,依次选择 General > Embededed Binaries,单击+号,单击 Add Other…,基础播放器仅需导入下载好的AliyunPlayerSDK.framework到项目中,并勾选copy选项。

      10

    • 头文件引入

      设置 Build Settings > Build Options > Enable Bitcode为 NO

      11

    • Cocoapods导入

      添加如下语句加入你的Podfile文件中。

      pbash od 'AliyunPlayer_iOS/AliyunPlayerSDK'

12

  1. 执行pod install或者pod update后集成SDK到项目工程。
  2. pod install :每次你编辑你的Podfile(添加、移除、更新)的时候使用。
  3. 运行项目名.xcworkspace文件打开工程。
  • 播放器使用

    1. -(AliVcMediaPlayer *)mediaPlayer{
    2. if (!_mediaPlayer) {
    3. //1.创建播放器
    4. _mediaPlayer = [[AliVcMediaPlayer alloc] init];
    5. }
    6. return _mediaPlayer;
    7. }
    8. -(void)player{
    9. self.contentView.frame = CGRectMake(0, 0, self.view.width, self.view.height-64);
    10. [self.view addSubview:self.contentView];
    11. [self.mediaPlayer create:self.contentView];
    12. self.mediaPlayer.scalingMode = scalingModeAspectFit;
    13. self.mediaPlayer.circlePlay = YES;
    14. self.mediaPlayer.dropBufferDuration = 3000;
    15. self.mediaPlayer.printLog = YES;
    16. AliVcMovieErrorCode err = [self.mediaPlayer prepareToPlay:[NSURL URLWithString:self.playUrl]];
    17. //5.判定错误,是否可以播放。
    18. if (err != ALIVC_SUCCESS) {
    19. NSLog(@"chinese-播放失败");
    20. }else{
    21. [self.mediaPlayer play];
    22. }
    23. }

    此外,iOS 播放器更详细的使用方式见基础播放器;iOS播放器更多功能和接口请参考接口文档

步骤四:题目信息下发(从服务端)

当主持人准备播报题目时,现场工作人员需要调用AppServer的接口下发题目。下发题目的接口中包含以下参数:

  • liveId表示直播场次。此ID代表了唯一一场直播。
  • questionId表示需要下发题目的ID。
  • expiredSeconds 答题失效时间(秒)。即多少秒内答题有效。
  • AppServer在接收到请求后完成以下动作:
  • 根据liveId查到直播流信息,从而调用视频云OpenAPI的接口,往直播流中添加自定义的SEI信号(里面包含questionId信息)。
  • 初始化答题session。一个答题session包含:题目内容、答题失效绝对时间戳、各选项选择人数。

  • OpenAPI调用示例

  1. https://live.aliyuncs.com?Action=AddTrancodeSEI&Domain=test101.cdnpe.com&App=xxx&Stream=xxx&Text=hahaha&Pattern=frame&Repeat=300&Delay=0&<公共请求参数>

注意:在直播答题这种场景下,参数Pattern建议取值frame,Repeat建议为3倍的关键帧间隔(示例中为300)。这样设置可以保证在3个关键帧间隔内,即便发生丢帧,只要播放器收到1帧,即可取得SEI信息。由于SEI在多帧内重复,所以播放器需要做SEI去重的工作。

注意事项

  • 由于推流会产生固定的延时,而现场人员是通过云端服务插入SEI信号,有可能插入SEI的画面比真实插入时间早一点。因此现场人员在活动前需要预先测量出推流延时,从而在插入SEI信号时加入一个固定延迟。

  • 测量推流延时的方法,可以在画面上摆一个秒表。假设在T0时间插入了SEI,而播放器在播放到Ts时间的时钟画面时检测到了SEI,那么推流延时就等于T0 - Ts(Ts < T0)。

    举例:现场主持人在12:00:00时提出问题,假设现场到阿里云的推流延时有1秒,那么现场工作人员应在12:00:01时调用添加SEI的OpenAPI(或者在12:00:00时调用,但是OpenAPI里面的delay参数设置为1000),这样正好保证SEI插入的是12:00:00主持人提出问题时的画面。

  • 客户端在收到SEI信号后,需要向服务器获取问题,这会产生一定的通信耗时。因此在下发题目时,可酌情加大expiredSeconds,比如在原有答题失效时间上+1秒。

步骤五:播放器解析SEI信息

播放器会监听SEI信号的回调,通过播放器的SEI信号回调接口,可以获取到下发过来的SEI信息。

  1. Android解析SEI信息

    (1)设置回调

    1. setSEIDataListener
    2. public void setSEIDataListener(MediaPlayerSEIDataListener listener)

    (2)监听SEI回调

    1. MediaPlayer.MediaPlayerSEIDataListener
    2. public void onSEIdata(String data)
  2. iOS解析SEI信息

    (1)添加监听通知接口

    1. //直播答题接收的消息
    2. [[NSNotificationCenter defaultCenter] addObserver:self
    3. selector:@selector(onSeiData:)
    4. name:AliVcMediaPlayerSeiDataNotification object:self.mediaPlayer];

    (2)处理监听通知中SEI数据:

    1. - (void)onSeiData:(NSNotification *)notification{
    2. NSDictionary* dict = [notification userInfo];
    3. if (dict) {
    4. NSString* seiData = [dict objectForKey:@"seiData"];
    5. if (seiData) {
    6. NSLog(@"sei data is %@",seiData);
    7. }

步骤六:APP获取完整题目并展示

APP在获取到SEI中携带的questionId后,向AppServer请求对应的题目内容(请求中包含liveId和questionId)。

AppServer收到请求后,返回题目内容和剩余答题秒数remainSeconds。剩余答题秒数通过以下方式计算:

剩余答题秒数 = 答题失效绝对时间戳 - 当前绝对时间戳

APP收到响应后,显示题目,并根据remainSeconds开始倒计时。

步骤七:APP答题计时并提交答案

  1. APP显示题目,并根据appServer返回的remainSeconds字段来进行倒计时。如果用户上次答题正确,则可选择选项答题。如果已经淘汰,则不能答题。

  2. 当用户点击选项,则用户不能更改选项,同时APP需要向AppSever上报用户选择的答案(请求中包含liveId,questionId,answerId和userId)。

  3. 当用户没有选择,则不许要上报用户的选择答案,答题结果为失败,下次不能答题。

  4. 上报答案之后,APP需要记录下来作为用户的答题结果,下次答题需要根据上次答题的结果判断用户是否能够答题。

步骤八:答题服务收集答案

AppServer收到APP上报的答案,需要做如下处理:

  1. 根据上报答案请求中的liveId和questionId,查找答题session是否存在。若不存在则拒绝。

  2. 根据当前时间是否超过答题失效绝对时间,判断答题是否超时,超时则答题无效。

    注意:考虑到APP上传答案存在一定的网络延时,在判断答题是否超时时,可宽限一定时间,如2秒。

  3. 统计答题人数:对应选项的答题人数+1。

步骤九:答题结果下发

当主持人宣布答题结束,准备公布答题结果时,现场工作人员需要调用AppServer的接口下发答题结果(请求中包含liveId和questionId)。

同样地,此时AppServer调用视频云OpenAPI的接口,往直播流中插入SEI信号(包含questionId信息),告知APP可以来请求答题结果。

步骤十:APP展示答题结果,进入下一轮

  1. APP播放器获取到显示答题汇总的SEI信息之后,这个时候APP端需要区分是答题SEI信号还是答题汇总SEI信号,区分是答题汇总SEI后,向APPServer请求答题汇总(包括liveId和questionId)。

  2. APP在接收到答题汇总之后,显示汇总对话框,将是否答对以及各个答案的答题人数显示出来。

  3. 当显示到一定时间后,隐藏汇总对话框,可以进入下一轮答题。

云产品介绍

ECS产品介绍

云服务器 Elastic Compute Service(ECS)是阿里云提供的一种基础云计算服务。您无需提前采购硬件设备,而是根据业务需要,随时创建所需数量的云服务器实例。使用过程中,随着业务的扩展,您可以对云服务器进行扩容磁盘、增加带宽。如果不需要了,您还可以释放资源,节省费用。

云服务器 ECS 实例是一个虚拟的计算环境,包含了 CPU、内存、操作系统、磁盘、带宽等最基础的服务器组件,是 ECS 提供给每个用户的操作实体。

产品优势

与普通的IDC机房或服务器厂商相比,阿里云提供的云服务器ECS具有高可用性、安全性以及弹性。

高可用性

相较于普通的IDC机房以及服务器厂商,阿里云会使用更严格的IDC标准、服务器准入标准以及运维标准,以保证云计算整个基础框架的高可用性、数据的可靠性以及云服务器的高可用性。

在此基础之上,阿里云所提供的每个地域都存在多可用区。当您需要更高的可用性时,可以利用阿里云的多可用区搭建自己的主备服务或者双活服务。

对于面向金融领域的两地三中心的解决方案,您也可以通过多地域和多可用区搭建出更高的可用性服务。其中包括容灾、备份等服务,阿里云都有非常成熟的解决方案。

在阿里云的整个框架下,这些服务可以非常平滑地进行切换。无论是两地三中心,还是电子商务以及视频服务等,都可以在阿里云找到对应的行业解决方案。

此外,阿里云为您提供了如下3项支持:

  • 提升可用性的产品和服务,包括云服务器、负载均衡、多备份数据库服务以及数据迁移服务DTS等。
  • 行业合作伙伴以及生态合作伙伴,帮助您完成更高、更稳定的架构,并且保证服务的永续性。
  • 多种多样的培训服务,让您从业务端到底层的基础服务端,在整条链路上实现高可用。
安全性

选择了云计算,最关心的问题就是云计算的安全与稳定。阿里云近期通过了很多的国际安全标准认证,包括ISO27001、MTCS等,这些所有的安全合规都要求对于用户数据的私密性、用户信息的私密性以及用户隐私的保护都有非常严格的要求。

  • 在阿里云专有网络之上,可以产生更多的业务可能性。您只需进行简单配置,就可在自己的业务环境下,与全球所有机房进行串接,从而提高了业务的灵活性、稳定性以及业务的可发展性。

  • 对于原来拥有自建的IDC机房,也不会产生问题。阿里云专有网络可以拉专线到原有的IDC机房,形成混合云的架构。结合阿里云的生态,您可以在云上发展出意想不到的业务生态。

  • 阿里云专有网络更加稳定和安全,详情如下:

    • 稳定性:业务搭建在专有网络上,而网络的基础设施将会不停进化,使您每天都拥有更新的网络架构以及更新的网络功能。专有网络允许您自由地分割、配置和管理自己的网络。

    • 安全性:面对互联网上不断的攻击流量,专有网络天然就具备流量隔离以及攻击隔离的功能。业务搭建在专有网络上后,专有网络会为业务筑起第一道防线。

弹性

目前,阿里云已拥有在数分钟内开出一家中型互联网公司所需要的IT资源的能力,这就能够保证大部分企业在云上所构建的业务都能够承受巨大的业务量压力。

  • 计算的弹性

    纵向的弹性,即单个服务器的配置变更。对于阿里云,当您购买了云服务器或者存储的容量后,可以根据业务量的增长或者减少自由变更自己的配置。

  • 横向的弹性

    对于游戏应用或直播平台出现的高峰期,若在传统的IDC模式下,您根本无法立即准备资源;而云计算却可以使用弹性的方式帮助客户度过这样的高峰。当业务高峰消失时,您可以将多余的资源释放掉,以减少业务成本的开支。

  • 存储弹性

    当存储量增多时,对于传统的IDC方案,您只能不断去增加服务器,而这样扩展的服务器数量是有限的。在云计算模式下,将为您提供海量的存储,当您需要时可以直接购买,为存储提供最大保障。

  • 网络弹性

    若您购买了阿里云的专有网络,所有的网络配置与线下IDC机房配置可以是完全相同的,并且可以拥有更多的可能性。可以实现各个机房之间的互联互通,各个机房之间的安全域隔离,对于专有网络内所有的网络配置和规划都会非常灵活。

产品规格族

实例作为提供计算服务的最小单位,是以一定的规格来为您提供相应的计算能力的。

注意:各个地域可供售卖的实例规格不一定完全相同,请以实际实例售卖页上的信息为准。

根据业务场景和使用场景,ECS 实例可以分为多种规格族。同一个规格族里,根据 CPU 和内存的配置,可以分为多种不同的规格。ECS 实例只有同时配合磁盘、镜像和网络类型,才能唯一确定一台实例的具体服务形态。

RDS产品介绍

阿里云关系型数据库(Relational Database Service,简称 RDS)是一种稳定可靠、可弹性伸缩的在线数据库服务。

基于阿里云分布式文件系统和高性能存储,RDS支持MySQL、SQL Server、PostgreSQL 和 PPAS(Postgre Plus Advanced Server,一种高度兼容 Oracle 的数据库)引擎,并且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案。

产品优势

  • 在源码底层做了改进,使数据库的性能提升了3倍。RDS提供了性能监控、异地容灾、主备库故障切换、数据备份与恢复等功能,保障了云数据库的安全性、稳定性和可靠性。

  • RDS便宜易用、可弹性伸缩,您不必购买硬件,不需安装软件,只要根据业务需求购买实例即可。同时,您也不必担心硬件规划问题,可根据业务压力随时调整RDS实例的规格和容量。

  • RDS支持全量数据热迁移,在不影响业务的前提下,可将业务平滑迁移至云上。

  • RDS通过自动化运维管理,可以简化繁琐的运维工作,节省人力成本,让您更专注于业务的发展。

功能特性

读写分离

关于读写分离的具体实现,详情如下图所示。

9

  • 开通只读实例后,即可免费开通读写分离功能。
  • 读写分离可提供实时健康检查、自定义读权重分配等功能,可用性可达99.95%。
  • 开通读写分离功能后,实例中会存在三类连接地址:主实例的连接地址、只读实例的连接地址、读写分离地址。
异地容灾

数据库支持创建异地容灾实例,用户可以通过创建异地容灾实例来抵御多可用区级别的故障。

另外,用户通过DTS数据传输服务,可以将自建机房的数据库实时同步到阿里云数据库上任一地域的RDS实例里面。即使发生机房损毁的灾难,数据永远在阿里云数据库上有一个备份。

10

大数据分析

大数据计算服务(MaxCompute,原ODPS)是一项大数据计算服务,它能提供快速、完全托管的PB级数据仓库解决方案,使您可以经济并高效地分析处理海量数据。

通过数据集成服务,可将RDS数据导入MaxCompute,实现大规模的数据计算,如下图所示。

12

开放搜索

开放搜索服务(OpenSearch)是一款结构化数据搜索托管服务,为移动应用开发者和网站站长提供简单、高效、稳定、低成本和可扩展的搜索解决方案。 通过 OpenSearch 自带功能,可将 RDS 中的数据自动同步至 OpenSearch 实现各类复杂搜索。

13

数据多样化存储

RDS支持搭配云数据库Memcache、云数据库Redis和对象存储OSS等存储产品使用,实现多样化存储扩展。

14

  • 缓存数据持久化

    RDS可以搭配云数据库Memcache和云数据库Redis使用,组成高吞吐、低延迟的存储解决方案。

    与RDS相比,云数据库缓存产品有2个特性:

    • 响应速度快,云数据库Memcache和云数据库Redis请求的时延通常在几毫秒以内。
    • 缓存区能够支持比RDS更高的QPS(每秒处理请求数)。
  • 多结构数据存储

OSS是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。RDS可以和OSS搭配使用,组成多类型数据存储解决方案。

Redis产品介绍

云数据库 Redis 版(ApsaraDB for Redis)是兼容开源 Redis 协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。

通过内存+硬盘的存储方式,云数据库 Redis 版在提供高速数据读写能力的同时满足数据持久化需求。

产品优势

  • 性能卓越

    集群功能支持超大容量,超高性能。支持集群功能,提供128 GB 及以上集群实例规格,可满足大容量和高性能需求。提供 64 GB 及以下的主-从双节点实例,满足一般用户的容量和性能需求。

  • 弹性扩容

    • 存储容量一键扩容:用户可根据业务需求通过控制台对实例存储容量进行调整。
    • 在线扩容不中断服务:调整实例存储容量可在线进行,无需停止服务,不影响用户自身业务。
  • 数据安全

    • 数据持久化存储:内存+硬盘的存储方式,在提供高速数据读写能力的同时满足数据持久化需求。
    • 数据主从双备份:所有数据在主从节点上进行双备份。支持密码认证方式以确保访问安全可靠。
  • 高可用

    双副本与集群版实例均有主从双节点,避免单点故障引起的服务中断。硬件故障自动检测与恢复:自动侦测硬件故障并在数秒内切换,恢复服务。实例级别的资源隔离可以更好地保障单个用户服务的稳定性。

  • 秒级别监控

    提供秒级别实时监控,分钟级别历史监控。提供各数据结构和接口的监控信息,访问情况一目了然,便于用户对云数据库 Redis 版的使用情况有充分的了解。

  • 简单易用

    • 服务开箱即用:支持即开即用的方式,购买之后即可使用,方便业务快速部署。
    • 兼容开源 Redis:兼容 Redis 命令,任何 Redis 客户端都可以轻松与云数据库 Redis 版建立连接进行数据操作。
    • 可视化的管理监控面板:控制台提供多项监控统计信息,方便用户对Redis 实例进行管理。

游戏行业应用

游戏行业可以选择云数据库 Redis 版作为重要的部署架构组件。

  • 场景一 Redis 作为存储数据库使用

    游戏部署架构相对简单,主程序部署在 ECS 上,所有业务数据存储在 Redis 中,作为持久化数据库。云数据库 Redis 版支持持久化功能,主备双机冗余数据存储。

  • 场景二 Redis 作为缓存加速应用访问

    Redis 作为缓存层,加速应用访问。数据存储在后端的数据库中(RDS)。

    云数据库 Redis 版提供双机热备的高可用架构,保障极高的服务可靠性。主节点对外提供服务,当主节点出现故障,系统自动切换备用节点接管服务,整个切换过程对用户全部透明。

CDN产品介绍

阿里云CDN(内容分发网络)全称是 Alibaba Cloud Content Delivery Network,是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络,替代传统以WEB Server为中心的数据传输模式。

简单的说,CDN就是将您源站的资源缓存到位于全国各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥塞、分担源站压力,保证用户访问资源的速度和体验。

阿里云拥有 1000+ 国内节点,200+ 海外节点,80T 的带宽能力储备。海外节点覆盖全球六大洲 30 多个国家和地区,国内节点完整覆盖 34 个省级区域。大量节点位于省会等一线城市,骨干网络接入,全万兆网卡;且单节点存储容量大(40TB — 1.5PB),带宽负载大(40-200Gbps),可以很好地应对突发情况。

功能介绍

节点缓存

  • 智能对象热度算法,分层缓存HOT资源,实现资源精准加速。
  • 高性能缓存Cache系统设计,均衡使用CPU多核处理能力,高效合理使用和控制内存,最大化SSD IOPS和吞吐。
  • 各节点具备高速读写固态硬盘SSD存储,配合SSD加速能力,大幅减少用户访问等待时间,提高可用性。
  • 智能压缩,有效减少用户传输内容大小,加速分发效果。
  • 页面优化,去除页面的空格、换行、TAB、注释等冗余内容,减少页面的大小
  • 组合多个JavaScript/CSS文件成为一个请求,从而减少请求数目。

精准调度

不论您的站点属于门户资讯类网站、多媒体视音频类网站、游戏类网站或是移动应用类APP等等,CDN会智能分配调度域提供针对需求的业务支持,全面为您的站点提速。

  • 自主研发的调度系统,单机支持百万级别域名调度。
  • 更加优异的可控性、协议扩展性,进一步降低成本。
  • 支持多级的调度策略,节点故障不会造成用户不可用。
  • 多系统联动,与安全防御系统、刷新系统、内容管理系统等协调工作。
  • 数据化实时调度,支持节点级别流量预测,提升调度质量和准确性。

多场景的业务支持,多组件配合服务

  • 视频流媒体直播服务,媒资存储、切片转码、访问鉴权、内容分发加速一体化解决方案(即将上线)。
  • 视音频渐进式点播服务,低缓冲时间,高流畅度播放体验,支持 mp4、flv 视频格式。
  • 支持资源链接鉴权,可自定义鉴权KEY,保障您的媒体资源安全,免去盗链担忧。
  • 自由集成阿里云多种云服务,系统无缝配合提升云端资源访问下载速度。
  • 天然无缝配合对象存储OSS使用,提高网站访问速度,有效降低OSS的外网流量费用。
  • 结合云服务器ECS使用,提高网站可用性,保护服务器源站信息,降低带宽使用成本。
  • 也可使用负载均衡做为源站地址回源,降低回源带宽压力。
  • 同时也支持非阿里云源站,对接无门槛,经过资源审核即可快速部署加速服务。

自助式管理

  • 自助式控制台,自定义配置分钟级全节点智能部署。
  • 简单操作即可快速开通CDN服务。您可以通过控制台自助化配置域名的添、删、改、查,设置加速节点缓存策略、防盗链、http头信息等,也可根据需求选择性开启多种加速优化功能。
  • 开放原子性可扩展的API,通过CDN API实现对加速域名、分发资源和监控数据进行灵活部署、快速操作、精确使用、及时监控。也可配合其他阿里云云产品API,实现多平台自定义portal。

实时监控

  • 全景信息监控,多维度护航资源分发。
  • 全面的网络监控,丰富的数据分析,方便的资源报表下载,提供包含带宽流量、访问质量、访客数据、热门分析、安全防护等全景监控信息。

产品优势

  • 稳定快速

    • 先进的分布式系统架构,国内节点数最多的云CDN:国内 1000+ 节点,海外 200+ 节点。
    • 充足的带宽、存储资源:单节点带宽 40Gbps+,全网带宽输出能力 80Tbps
    • 稳定高效的性能指标:95%+命中率,ms级响应时间,视频95%+流畅率。
    • 完善的监控体系&服务体系:7×24小时全网监控,基于服务质量智能监控和调度。
  • 节约成本

    • 资源弹性扩展,按实际使用量付费,接入即可实现跨运营商、跨地域的全网覆盖
    • 先用后付,提供按流量或峰值带宽两种计费方式,满足不同业务需求。
    • 对于网站突发流量,无需用户干预,自动作出响应和调整,有效减少源站压力。
  • 简单易用

    • 自助化配置域名的添、删、改、查,丰富简洁可定制配置项,支持自定义防盗链、缓存策略、HTTP响应头等功能。
    • 开放 API 接口,提供服务开通、内容刷新、获取监控数据、下载分发日志等功能。

应用场景

  • 网站/应用 静态加速

    站点或应用中大量静态资源的加速分发。建议将站点内容进行动静分离,静态内容使用阿里云CDN加速。动态内容可以使用云服务器ECS,静态资源如各类型图片、css、js小文件等,建议结合对象存储OSS使用。可以有效加速内容加载速度,轻松搞定网站图片、短视频等内容分发。

  • 视音频点播/大文件下载

    支持各类文件的下载、分发,支持在线点播加速业务,如mp4、flv视频文件或者平均单个文件大小在20M以上,主要的业务场景是视音频点播、大文件下载(如安装包下载)等,建议搭配对象存储OSS使用,可提升回源速度,节约近2/3回源带宽成本。

  • 直播加速

    阿里云视频直播服务已单独上线发布。基于领先的内容接入与CDN网络以及大规模分布式实时转码技术打造的音视频直播平台,提供便捷接入、高清流畅、低延迟、高并发的音视频直播服务。支持多直播场景,全景数据统计,丰富角度分析;直播功能丰富,录制回放、实时封面、实时转码、连麦混流。

  • 其他CDN产品

    • 如果您对CDN加速有较高的安全需求,可使用阿里云安全加速 SCDN。
    • 如果您想使用含P2P技术的CDN进一步降低CDN成本,可使用阿里云 PCDN。
    • 如果您对动态内容的加速也有需求,可使用阿里云全站加速。

总结与展望

本文档从行业需求、技术难题、方案参考架构、实现方案、云产品介绍等多个方面进行了阐述,旨在为越来越多做直播答题的客户提供全面的解决方案。

针对直播答题解决方案,分别从双专线推流链路、画题同步、安全问题以及一站式视频直播服务这四个方面给出了相应的方案参考架构,并简要地介绍了具体的方案实现以及方案中涉及的相关产品介绍。

售前咨询

  • 7×8小时售前咨询电话:95187-1
  • 专业的售前团队已经做好准备,随时为您提供全面的售前服务支持。
  • 您还可以进入阿里云直播问答解决方案进行全方位的咨询和了解。
  • 阿里云专业的售前咨询团队为您提供全方位的购买咨询/配置推荐/价格方案等1对1的贴心服务。

您也可以直接下载PDF版文件:阿里云直播答题解决方案

本文导读目录