开放平台 - 互动玩法演进之路
本期作者

1. 背景
随着直播业务和用户规模日益壮大,如何丰富直播间内容、增强直播间内用户互动效果,提升营收数据变得更加关键。为此,直播互动玩法应运而生。通过弹幕、礼物、点赞、大航海等方式,用户可以参与主播的直播内容。B站还通过开放平台,为第三方厂商和开发者提供了强大的技术支持,让直播互动玩法更加便捷、稳定和高效,为用户和主播创造了更多的乐趣和价值。

图:星体工作室 互动玩法案例
2. 平台建设
在着手开发之前,我们需要确立清晰的业务划分边界,特别是涉及多方参与的开放平台互动玩法业务。这有助于避免日积月累的问题,确保未来的发展不受制于历史债务。
我们的业务划分主要集中在几个核心场景和能力模块上:
-
开发者管理平台:
与开发者互动,包括入驻流程、应用审核、礼物与面板审核。
作为开发者数据的展示出口,为他们提供数据回收的支持。 -
应用商店平台:
与主播互动,包括平台与直播姬的应用展示与获取。
提供定制化应用推荐算法的出口,以提升应用的曝光和吸引力。 -
应用交互平台:
与直播间用户互动,利用事件平台进行控制,包括开关礼物与面板。
互动玩法期间数据流转等行为。
监测与标记应用的实时状态,确保流畅的用户体验。 -
结算平台:
与营收互动,包括应用期间营收数据的统计、落库和对账。
为确保透明度和准确性,提供完善的结算支持。
因此我们设计的如下的业务模块分层:

图:平台架构
3. 项目生命周期

图:互动玩法生命周期
社区优先的原则确保了我们平台的演进和提升是以开发者和用户的需求为中心的良好策略,明确了业务边界之后,围绕互玩的整个生命周期,我们将重心放在四个核心提升目标上:
-
开发者入驻效率与权益保障:
通过简化入驻流程,提供清晰的文档和支持,确保开发者能够快速且顺利地接入平台。
提供快速且准确的审核机制,加速应用上线,促进生态系统的快速发展。
提供明确的营收手段与完善的对账系统,保证开发者收益。 -
主播使用体验:
提供直观且易用的工具和功能,以增强主播的覆盖率和互动性,提升直播质量。 -
直播间用户体验:
优化直播间界面,降低用户参与门槛。
提供有趣、多样化的互动玩法,激发用户的参与热情,提高用户粘性。 -
平台管控能力:
强化对内容的管理和监督,确保内容的合法性与安全性。
提供丰富的工具,快速响应违规行为,维护平台生态安全与健康。
3.1 入驻与开发
在整个互玩生命周期过程中,开发者接入平台与开发作为起点,门槛会直接影响开发者数量与互玩的供给速度,有一些问题是我们需要思考并解决的:
-
开发者如何快速搭建模型?
-
开发者如何低成本进行数据交互调试?
-
个人开发者在缺少专业的礼物UI设计师的情况下如何进行礼物设计?
3.1.1 SDK&Demo
我们明白对事物的认识往往从“是什么”开始,然后才能理解“为什么是这样”。作为首次接入开放平台的开发者,理解众多API和调用文档并梳理出清晰的交互流程确实需要时间。同时由于开发者的历史开发背景各异,对官方接入文档的理解也会有所不同。
为了降低开发者的开发成本并减轻研发的解答压力,我们在完善官方技术文档的同时,提供了不同语言的示例,以帮助开发者建立概念模型:
-
Unity&C#客户端SDK
-
Python&Golang Demo

图:互动玩法接入SDK&Demo
3.1.2 启动调试能力
测试阶段是完整的应用开发流程中不可或缺的一个重要环节,未经充分测试的应用可能存在潜在的不可预估的风险,为了辅助开发者在应用上架之前能够进行充分且完善的测试,我们解决了以下两点问题:
Q:开发者在应用开发完成之后如何在真实环境下测试应用功能?
A:在应用通过审核之前,开发者可以选择将其直播间设置为白名单直播间,这就意味着开发者可以在真实的线上环境中对其开发的应用进行完整的测试与功能回归。
Q:送礼、发送醒目留言以及大航海是互动玩法交互的重要组成部分,在线上环境应该如何进行这几种交互操作的调试?
A:这几种直播间用户参与的高成本行为,让开发者在线上环境使用正常流程进行大量的测试显然是不合理的。为了解决这个问题,我们提供了开发者调试工具。通过这个此工具,开发者可以通过后台操作主动触发由开放平台发出的长连接消息内容(包括弹幕、送礼、大航海和醒目留言),从操作到出口消息的过程则由平台侧保证数据的正确性。

图:开发者调试工具
3.1.3 官方素材库
在互动玩法系统初期,开发者需要手动设计并上传礼物素材,不仅增加了开发者的研发成本,也加大了运营审核的难度和成本,从而导致素材管理混乱。为了解决这一问题,我们为开发者提供了一个更便捷的解决方案:官方素材库。
现在,开发者只需从官方素材库中选择适合的内容,提交创建礼物即可。这一方案在业务规范性方面有很大的提升,同时降低了设计成本和审核成本。为整个互动玩法系统创造了更为有序和统一的环境,促进了生态的可持续发展。
同时为了确保官方素材库中的礼物符合用户需求,我们会定期进行用户调研。并且也会定期更新官方素材库,添加新的礼物元素和主题,以满足用户不断变化的需求和兴趣。

图:官方礼物素材库
3.2 提交与审核
3.2.1 包管理工具
当进行互动玩法项目的提审并需要上传包体时,如何有效地避免被当作一个网盘服务?这个时候我们可以反向利用单点故障理论进行思考。
单点故障理论:系统中存在一个或一些关键的组件、环节或节点,如果其中的任何一个被破坏、故障或失效,可能导致整个系统的崩溃或失效。
我们可以通过分析利用平台作为网盘的使用路径来找到其专属单点故障:
-
获取上传链接
-
上传文件
-
进行持久化存储
-
下载文件
在不影响正常业务逻辑的情况下,我们针对第3步进行处理,持久化存储追加前提条件,提升存储门槛,以业务的视角控制有效文件的判定,定时扫描删除无效包体。
同时这个问题普遍出现在开放平台的各个业务场景,因此我们搭建了一个包管理系统,统一收口这一业务场景。

图:包生命周期管理
3.2.2 运营审核工具
我们可以通过分析利用平台作为网盘的使用路径方面进行审核:
-
互动玩法内容是否合规,是否存在敏感内容?
-
互动玩法调用模式是否符合开放平台规范?
作为运营,只能够在审核的使用过程中,对于互动玩法内容作出合规性校验,因此我们为运营提供基础的合规性校验工具对于包体进行校验,为运营提供审核依据。
该工具需同时满足两个条件:
-
监听服务对于开放平台的请求
-
统计接口的调用频率
在技术调研初期,想通过抓包工具对数据进行分析,监听https请求的443端口流量,并且从流量中过滤出来host为"live-open.biliapi.com"的相关请求,即对开放平台相关请求。

图:监听端口流量
经过测试,由于通过抓包工具是在七层协议中传输层截取的数据,基于https协议的请求数据都被加密,无法获取具体的请求内容,不满足条件2,因此该方案被否决。

图:抓包结果
为了获取接口调用的详细情况,有两个数据来源,调用方和被调用方。在无法强制在调用方代码中插入统计逻辑的情况下,目光便聚焦在被调用方,但线上服务器用作测试统计,显然是不合理的。
线上真实环境不能用,便考虑使用仿真沙盒环境, 此时代理转发的方案呼之欲出,大概思路如下:
-
用户更改本地host配置,把开放平台的域名指向localhost
-
本地启动一个代理服务,监听443端口
-
本地代理负责转发"live-open.biliapi.com"的相关请求与记录接口调用结果
-
本地服务关闭时输出调用结果。

图:沙盒代理流程

图:检测结果
3.3 使用与结算
3.3.1 身份码体系
互动玩法的使用与直播房间强绑定,因此在互动玩法开启时,玩法客户端需要一个途径与当前直播间进行关联操作,基于此问题,我们考虑过以下两种途径:
| 提供方式 | 优势 | 劣势 |
| 开启互动玩法后主播输入房间号 | 使用门槛低,可在OBS使用 | 安全性低,主播可以在他人直播间开启互动玩法 |
| 读取主播的登陆态传递房间号 | 安全性中,主播之间不可互相开启 | 使用门槛高,只能在直播姬使用 开发者可以开启任意房间的互动玩法 |
在以上两种途径的劣势都不可接受的情况下,我们需要一种新的房间号标识的传输方式,并且同时要满足以下几个要求:
-
不依赖直播姬的登陆态,主播在使用其他直播工具时依然可以开启互动玩法
-
主播之间不可知,主播不可以通过一个公开标识启动其他主播的应用
-
开发者不可知,玩法开发者无法获取任意主播的应用
因此我们推出了一套独立标识(即身份码系统),主播可以生成唯一标识与房间号绑定,并且在公域对他人不可见,确保主播之间以及主播与开发者之间的信息是隔离的,与开放平台的交互通过身份码进行,由开放平台进行数据转换,并且同时为了避免身份码泄漏造成安全问题,提供定时刷新以及手动强制刷新能力,保证数据的合规安全。
3.3.2 互动结算
与开发者分成由互动玩法产生的营收流水是构建良好合作模式的关键。然而,如果仅以互动启动时间作为计算依据,可能会导致不合理的结果,因为在启动期间产生的舰长、醒目留言等营收行为都会被计算在内。
为了解决这个问题,我们提出了一个与互动玩法紧密相关的流水计算依据:互动礼物。每一个互动玩法都有自己特定的礼物,我们只统计由互动礼物产生的营收。这样可以准确反映互动玩法的实际贡献,避免了其他不相关因素的干扰。
通过将互动礼物作为流水计算的依据,我们希望能够建立一个更公正、透明且与互动玩法紧密相关的分成机制,从而激励更多的开发者参与。这不仅可以提高开发者的积极性,也有助于形成一个健康、正向循环的互动生态。
由于不同的互动玩法的分成比例不同且可以实时调整,这给我们的管理和感知带来了挑战。为了有效应对这些变化,我们需要建立一套与公司内部结算体系紧密相关的结算系统。

图:结算架构
同时为了保障公司和开发者的权益,我们需要进行流水对账工作,主要包括以下两个维度:
-
实时对账:在互动玩法运行过程中,建立实时对账系统,实时追踪和核对每一笔交易的流水,以便及时发现和解决可能出现的问题。
-
日流水对账:日流水对账是对实时对账的补充,也是在出具日账单前的最后核查工作。通过日流水对账,我们可以确保对账的准确性和完整性。

图:结算对账流程
3.4 监控与反馈
在开放平台的互动玩法系统的迭代维护过程中,确保系统的安全性和鲁棒性是至关重要的。面对各种不确定性、噪声以及变化,保障系统在这些情况下能够保持稳定的基本能力是一个重大因素。考虑到互动玩法系统的调用方均为外部开发者,相比公司内部业务,我们需要更加严格的管控措施。
上线并不是互动玩法生命周期的终点,我们采取了一系列措施来持续跟踪监控系统,对系统bug进行触达反馈,并对恶意调用进行限流或封禁,以确保平台高效运转或在极端情况下降低运行。
以下是我们采用的一些措施:
-
安全中心体系:为防止突发流量的恶意请求,我们将互玩相关接口接入开放平台统一的安全管控中心。超过预设限制的调用方将被一段时间封禁,并随着触发次数的增加,封禁时间会逐渐延长,后续可以单独讨论一下安全中心的相关建设。
-
监控大盘与数据统计:除了突发流量,开发者频繁的错误请求也是常见问题。我们在请求时进行上报统计,并将数据接入公司的监控平台,实时观察和统计。这有助于降低告警的噪音,同时提高对问题的敏感度。
-
线上问题反馈:针对互动玩法内的bug,我们为主播提供了专门的反馈渠道。通过定期机器人同步,运营团队能够将问题及时反馈给开发者,从而实现问题的快速定位和解决。

图:监控大盘
4. 未来展望
B站的互动玩法目前仍在发展完善阶段,我们经历了从0到1的探索阶段,并结合开放平台的体系完成了全链路的建设与搭建。然而,在1到100的发展过程中,相比市场中的竞品,我们仍需不断演进与探索。
我们面临的挑战有以下几个方面:
-
数据实时分析能力不足:在互动玩法过程中,我们实时数据分析能力不足。强化数据预警分析能力可以帮助我们及时地发现潜在问题并做出相应调整。
-
商业化体系尚待完善:我们需要提升直播间用户的消费能力,同时深入挖掘直播间广大用户的潜在商业价值。完善商业化体系将有助于增加收入来源并提高用户参与度。
-
超前思考系统稳定性建设:随着上架的互玩和使用的主播扩大,我们需要以超前的思维布局,持续思考和落地系统的稳定性建设。这包括技术和流程的不断优化,以确保系统的稳定性和用户体验。
在面对这些挑战时,通过持续的努力和创新,我们相信可以不断优化互动玩法系统,更好地满足用户需求,使其在市场中脱颖而出。
更多体验欢迎访问开放平台官网地址:https://open-live.bilibili.com/
相关文章:
开放平台 - 互动玩法演进之路
本期作者 1. 背景 随着直播业务和用户规模日益壮大,如何丰富直播间内容、增强直播间内用户互动效果,提升营收数据变得更加关键。为此,直播互动玩法应运而生。通过弹幕、礼物、点赞、大航海等方式,用户可以参与主播的直播内容。B站…...
Linux之进程控制进程终止进程等待进程的程序替换替换函数实现简易shell
文章目录 一、进程创建1.1 fork的使用 二、进程终止2.1 终止是在做什么?2.2 终止的3种情况&&退出码的理解2.3 进程常见退出方法 三、进程等待3.1 为什么要进行进程等待?3.2 取子进程退出信息status3.3 宏WIFEXITED和WEXITSTATUS(获取…...
RegSeg 学习笔记(待完善)
论文阅读 解决的问题 引用别的论文的内容 可以用 controlf 寻找想要的内容 PPM 空间金字塔池化改进 SPP / SPPF / SimSPPF / ASPP / RFB / SPPCSPC / SPPFCSPC / SPPELAN  ASPP STDC:short-term dense concatenate module 和 DDRNet SE-ResNeXt …...
Qt中常用宏定义
Qt中常用宏定义 一、Q_DECLARE_PRIVATE(Class)二、Q_DECLARE_PRIVATE_D(Dptr, Class)三、Q_DECLARE_PUBLIC(Class)四、Q_D(Class) 和 Q_Q(Class) 一、Q_DECLARE_PRIVATE(Class) #define Q_DECLARE_PRIVATE(Class) inline Class##Private* d_func() { # 此处的 d_ptr 是属于QOb…...
【计算机网络】第 9 问:四种信道划分介质访问控制?
目录 正文什么是信道划分介质访问控制?什么是多路复用技术?四种信道划分介质访问控制1. 频分多路复用 FDM2. 时分多路复用 TDM3. 波分多路复用 WDM4. 码分多路复用 CDM 正文 什么是信道划分介质访问控制? 信道划分介质访问控制(…...
Rust编程(五)终章:查漏补缺
闭包 & 迭代器 闭包(Closure)通常是指词法闭包,是一个持有外部环境变量的函数。外部环境是指闭包定义时所在的词法作用域。外部环境变量,在函数式编程范式中也被称为自由变量,是指并不是在闭包内定义的变量。将自…...
LLM漫谈(五)| 从q star视角解密OpenAI 2027年实现AGI计划
最近,网上疯传OpenAI2027年关于AGI的计划。在本文,我们将针对部分细节以第一人称进行分享。 摘要:OpenAI于2022年8月开始训练一个125万亿参数的多模态模型。第一个阶段是Arrakis,也叫Q*,该模型于2023年12月完成训练&…...
【echart】数据可视化+vue+vite遇到问题
1、vue3使用echars图表报错:"Initialize failed:invalid dom" 原因是因为:Dom没有完成加载时,echarts.init() 就已经开始执行了,获取不到Dom,无法进行操作 解决:加个延时 onMounted(async () …...
mac m1安装和使用nvm的问题
mac m1安装和使用nvm的问题 使用nvm管理多版本node 每个项目可能用的node版本不同,所以需要多个版本node来回切换 但是最近遇到安装v14.19.0时一直安装失败的问题。 首先说明一下,用的电脑是mac M1芯片 Downloading and installing node v14.19.0... …...
git泄露
git泄露 CTFHub技能树-Web-信息泄露-备份文件下载 当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。 工具GitHack使用:python2 GitHack.py URL地址/.git/ git命令…...
Java项目:78 springboot学生宿舍管理系统的设计与开发
作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统的角色:管理员、宿管、学生 管理员管理宿管员,管理学生,修改密码,维护个人信息。 宿管员…...
ArcGis Pro Python工具箱教程 03 工具箱中工具自定义
ArcGis Pro Python工具箱教程 03 工具箱中工具自定义 用于定义工作工具类的方法 工具方法必选或可选描述__ init __必需项right-aligned 初始化工具类。getParameterInfo可选定义工具的参数。isLicensed可选返回工具是否获得执行许可。updateParameters可选在用户每次在工具对…...
【C++初阶】之类和对象(中)
【C初阶】之类和对象(中) ✍ 类的六个默认成员函数✍ 构造函数🏄 为什么需要构造函数🏄 默认构造函数🏄 为什么编译器能自动调用默认构造函数🏄 自己写的构造函数🏄 构造函数的特性 ✍ 拷贝构造…...
Vue2(十一):脚手架配置代理、github案例、插槽
一、脚手架配置代理 1.回顾常用的ajax发送方式: (1)xhr 比较麻烦,不常用 (2)jQuery 核心是封装dom操作,所以也不常用 (3)axios 优势:体积小、是promis…...
在宝塔面板中,为自己的云服务器安装SSL证书,为所搭建的网站启用https(主要部分攻略)
前提条件 My HTTP website is running Nginx on Debian 10(或者11) 时间:2024-3-28 16:25:52 你的网站部署在Debain 10(或者11)的 Nginx上 安装单域名证书(默认)(非泛域名…...
学习JavaEE的日子 Day32 线程池
Day32 线程池 1.引入 一个线程完成一项任务所需时间为: 创建线程时间 - Time1线程中执行任务的时间 - Time2销毁线程时间 - Time3 2.为什么需要线程池(重要) 线程池技术正是关注如何缩短或调整Time1和Time3的时间,从而提高程序的性能。项目中可以把Time…...
@Transactional 注解使用的注意事项
事务管理 事务管理在系统开发中是不可缺少的一部分,Spring提供了很好的事务管理机制,主要分为编程式事务和声明式事务两种。 编程式事务: 是指在代码中手动的管理事务的提交、回滚等操作,代码侵入比较强。 声明式事务ÿ…...
电商系列之库存
> 插:AI时代,程序员或多或少要了解些人工智能,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家…...
Apache HBase(二)
目录 一、Apache HBase 1、HBase Shell操作 1.1、DDL创建修改表格 1、创建命名空间和表格 2、查看表格 3、修改表 4、删除表 1.2、DML写入读取数据 1、写入数据 2、读取数据 3、删除数据 2、大数据软件启动 一、Apache HBase 1、HBase Shell操作 先启动HBase。再…...
【设计模式】原型模式详解
概述 用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象 结构 抽象原型类:规定了具体原型对象必须实现的clone()方法具体原型类:实现抽象原型类的clone()方法,它是可以被复制的对象。访问类&…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...
Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合
无论是python,或者java 的大型项目中,都会涉及到 自身平台微服务之间的相互调用,以及和第三发平台的 接口对接,那在python 中是怎么实现的呢? 在 Python Web 开发中,FastAPI 和 Django 是两个重要但定位不…...
2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】
1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...
mq安装新版-3.13.7的安装
一、下载包,上传到服务器 https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-generic-unix-3.13.7.tar.xz 二、 erlang直接安装 rpm -ivh erlang-26.2.4-1.el8.x86_64.rpm不需要配置环境变量,直接就安装了。 erl…...
