行业综述

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

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

技术难题

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

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

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

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

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

  • 全网推题同步

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

  • 流量中心频现羊毛党

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

  • 附加功能开发难度大

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

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

为什么选择阿里云

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

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

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

  • 百万并发

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

  • 画题同步

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

  • 安全保障

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

业务功能架构

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



系统架构图如下所示:



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

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

方案参考架构

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

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

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

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

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

具体操作流程如下所示:

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

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

说明
客户端在收到SEI信号后,需要向服务器获取问题,这会产生一定的通信耗时。因此实际答题系统中,可酌情延长答题时间,比如在原有答题时间上+1秒。
说明
用户答题后,客户端需要上报答案,这会产生一定的通信耗时。因此实际答题系统中,AppServer在接收到答案时,答题超时时间允许有一个宽限值,比如原有的答题时限+1秒之内的均认为及时答题。
配置与开通
  • 首先需要开通阿里云视频直播服务。
  • 提出工单,要求开通视频云添加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)调用示例


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的数据,从而进行业务的处理。

方法如下:

setSEIDataListener
public void setSEIDataListener(MediaPlayerSEIDataListener listener)
  • 描述: 给播放器设置SEI数据的回调,获取流中的SEI数据。
  • 参数: 回调监听。
MediaPlayer.MediaPlayerSEIDataListener
public void onSEIdata(String data)
  • 描述:SEI数据的回调监听
  • 参数:data:SEI的数据。
说明
同一次播放,如果SEI数据相同,则只回调一次,后续的相同数据不会回调。

使用示例

aliVcMediaPlayer = new AliVcMediaPlayer(DemoLiveAnswerActivity.this, videoSurface);
aliVcMediaPlayer.setSEIDataListener(new MediaPlayer.MediaPlayerSEIDataListener() {
           @Override
           public void onSEIdata(String data) {
                  praseData(data);//解析SEI data数据
           }
});
aliVcMediaPlayer.setMaxBufferDuration(3 * 1000);
aliVcMediaPlayer.prepareAndPlay(liveUrl);
private void praseData(String data) {
//具体格式按照自己业务的需求去解析,然后做业务处理
        JSONObject jsonObject = null;
        try {
            jsonObject = new JSONObject(data);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        SeiInfo seiInfo = SeiInfo.getFromJson(jsonObject);
        if (seiInfo == null) {
            Toast.makeText(getApplicationContext(), "SEI 数据错误", Toast.LENGTH_SHORT).show();
            return;
        }
        if (seiInfo.type.equals("startAnswer")) {
        //到服务器请求题目
            requestQuestion(seiInfo.questionId);
        } else if (seiInfo.type.equals("showResult")) {
        //到服务器请求答题汇总
            requestQuestionReport(seiInfo.questionId, seiInfo.showTime);
        }
    }

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

  1. iOS SEI数据回调

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

AliVcMediaPlayerSeiDataNotification

使用示例

添加监听通知接口:

//直播答题接收的消息
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(onSeiData:)
                                                 name:AliVcMediaPlayerSeiDataNotification object:self.mediaPlayer];
处理监听通知中SEI数据:
//答题
- (void)onSeiData:(NSNotification *)notification{
    /*
    {
     "questionId": "001”,
     "type": "startAnswer"
     }  这个是开始答题
     {
     "questionId": "001”,
     "type": "showResult",
     "showTime": "5"
     }  这个是显示答题结果
     */
    NSDictionary* dict = [notification userInfo];
    if (dict) {
        NSString* seiData = [dict objectForKey:@"seiData"];
        if (seiData) {
            NSLog(@"sei data is %@",seiData);
    }
  }

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

注意事项

1. 播放器延迟处理

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

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

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

接入步骤详述

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



步骤一:准备工作
  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文件夹中。

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

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

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

iOS

  • 系统支持

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

  • 运行环境

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

  • 如何导入

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

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

    • 头文件引入
      设置 Build Settings > Build Options > Enable BitcodeNO

    • Cocoapods导入

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

      pbash od 'AliyunPlayer_iOS/AliyunPlayerSDK'



      执行pod install或者pod update后集成SDK到项目工程。
      pod install :每次你编辑你的Podfile(添加、移除、更新)的时候使用。
      运行项目名.xcworkspace文件打开工程。
  • 播放器使用
    -(AliVcMediaPlayer *)mediaPlayer{
          if (!_mediaPlayer) {
              //1.创建播放器
              _mediaPlayer = [[AliVcMediaPlayer alloc] init];
          }
          return _mediaPlayer;
      }
      -(void)player{
          self.contentView.frame = CGRectMake(0, 0, self.view.width, self.view.height-64);
          [self.view addSubview:self.contentView];
          [self.mediaPlayer create:self.contentView];
          self.mediaPlayer.scalingMode = scalingModeAspectFit;
          self.mediaPlayer.circlePlay = YES;
          self.mediaPlayer.dropBufferDuration = 3000;
          self.mediaPlayer.printLog = YES;
          AliVcMovieErrorCode err = [self.mediaPlayer prepareToPlay:[NSURL URLWithString:self.playUrl]];
          //5.判定错误,是否可以播放。
          if (err != ALIVC_SUCCESS) {
              NSLog(@"chinese-播放失败");
          }else{
              [self.mediaPlayer play];
          }
      }

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

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

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

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

Android解析SEI信息

(1)设置回调

setSEIDataListener
 public void setSEIDataListener(MediaPlayerSEIDataListener listener)

(2)监听SEI回调

MediaPlayer.MediaPlayerSEIDataListener
 public void onSEIdata(String data)

iOS解析SEI信息

(1)添加监听通知接口

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

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

- (void)onSeiData:(NSNotification *)notification{
      NSDictionary* dict = [notification userInfo];
     if (dict) {
         NSString* seiData = [dict objectForKey:@"seiData"];
         if (seiData) {
             NSLog(@"sei data is %@",seiData);
     }
步骤六: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 提供给每个用户的操作实体。

更多参考云服务器ECS

RDS产品介绍

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

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

更多参考阿里云关系型数据库

Redis产品介绍

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

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

更多参考云数据库 Redis

CDN产品介绍

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

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

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

更多参考阿里云CDN

总结与展望

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

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

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