前言

视频直播已经是一种成熟的产品形态,在不同行业中有多种应用场景。在泛娱乐行业,游戏直播、秀场直播、演唱会直播等已经走进广大用户的日常生活;在电商行业,网红带货直播已经成为增长的新动能;在教育行业,1对多的教育直播也正在改变着整个行业的格局。视频直播占用着越来越多的用户使用时间。随着线上线下服务的进一步融合,视频直播也将会有迎来越来越多的使用场景。

让专业的人做专业的事。通常来说,一个典型的视频直播产品会使用二类中台能力:直播聊天室SDK和视频直播SDK。直播聊天中台主要负责提供视频直播中的文字聊天室部分,如聊天室IM消息收发、弹幕、送礼物、聊天室人员管理等功能。视频直播主要提供视频编解码、主播推流到CDN,观众从CDN拉流观看等功能。

功能分析

典型的聊天中台主要的功能特性包括:

聊天室消息类型及扩展功能

  • 支持丰富的消息类型,包括文字、语音、图片、点赞、礼物、弹幕等类型,同时支持自定义消息,您可以根据自己业务逻辑来自行实现;(点赞、礼物、弹幕等消息类型可以使用自定义消息体消息实现)

  • 实时消息回调,支持对用户发送的消息进行处理,可以在您的应用服务器上实时保存聊天记录;

聊天室管理功能:

  • 聊天室创建和销毁;

  • 聊天室成员管理功能,支持加入、离开、禁言、踢人、封禁等用户操作;

  • 支持黑名单功能,被列入黑名单的用户不能再次加入聊天室;

  • 支持多管理员,除主播外可以指定管理员,对成员进行管理;

内容审核:

  • 敏感词过滤&消息反垃圾,支持自定义敏感词对消息进行过滤,基于用户行为智能反垃圾;

超大并发直播聊天室:

  • 消息分级,白名单,支持超大并发直播聊天室;

自定义消息集成建议:

  • 中台完整的自定义消息体消息封装(礼物,点赞,弹幕等),

  • 关于点赞消息实现建议:直播聊天室观众可连续多次点赞,您可以对点赞消息做合并统计、延迟发送的处理,单次点赞消息可统计一段时间内的点赞数量,提高消息的实时性,降低服务器压力。

典型视频直播产品的架构

一个典型的视频直播产品通常由3个中台模块构成:

  • 视频直播产品厂家的业务代码

  • 直播聊天室

  • 视频直播流服务及CDN

简单的说, 视频直播产品厂家的业务代码负责在客户端和服务器端实现所有视频直播的业务逻辑和数据管理。

直播聊天室负责视频直播的直播间(或聊天室。以下文中直播间或聊天室均指同一个概念)中的文字聊天室部分,包括聊天室中的IM沟通(发消息,弹幕,刷礼物)以及聊天室的管理比如聊天室的成员列表、禁言踢人等。

对于这2个部分,本文档的后续部分会详细介绍具体实现方式。

视频直播流处理及CDN厂商提供的SDK分为主播端和观众端。主播端主要负责视频采集编码,然后将自己的视频流和音频流推流到CDN。观众则使用拉流SDK从CDN拉取主播的视频流和音频流,并进行视频解码和视频播放。视频流和音频流的鉴黄、录音录像等工作也都是由视频直播流处理及CDN厂家提供的。

图1.视频直播流处理及CDN厂商的SDK架构示意图

可以参考以下视频直播服务CDN厂商提供的直播SDK:

  • 阿里云

  • UCloud

  • 金山云

  • 七牛云

直播聊天室中台设计

下面将以环信直播聊天室的设计作为参考,来分析如何设计一个中台聊天室。其中集成分为服务端集成和客户端集成。

业务服务器需要做什么

业务服务器上,和视频直播业务最直接相关的模块有2个:

  • 用户体系管理:负责记录和管理直播业务的用户,如主播和观众的创建和删除,用户的头像、昵称、等级等信息的维护

  • 直播间管理:负责记录和管理当前进行中或者已结束的直播间信息,如创建和销毁直播间,名称、封面、属性等直播间信息的维护

以上2个业务模块和环信直播聊天室的集成点是:

  • 用户体系集成:这部分的主要工作是完成客户自己的业务服务器上的用户体系与环信服务器上的环信ID的映射关系。注意,环信服务器只保存用户的环信ID,不保存用户的头像、昵称等业务信息。相关的文档请见: 用户体系集成、 昵称和头像的显示与更新、 已上线应用的用户体系导入到环信

  • 环信聊天室的创建、获取、修改、删除等功能的集成:部分聊天室有关的操作,是APP端通过环信APP端SDK的方法来直接调用环信服务器。还有部分聊天室有关的操作,是业务服务器通过环信服务器端REST API来调用环信服务器。具体哪些操作适合直接调用环信服务器,哪些操作适合提供业务服务器调用环信服务器,可以参考以下的2个章节:理解app主播端操作的典型时序、理解app观众端操作的典型时序。和服务器端聊天室管理有关的API主要有3个部分:管理聊天室、管理聊天室成员、管理禁言。

  • 直播回放:直播回放需要使用环信聊天记录功能,配合CDN厂商的视频录制回放功能来完成。

APP主播端操作的典型时序

如下图:

根据以上时序图的序号,我们逐个讲解APP主播端的主要操作:

1.创建聊天室:

首先在业务服务器上创建聊天室,然后业务服务器调用环信服务器端REST API在环信服务器创建聊天室。环信创建聊天室API只需要传入roomID和环信用户ID这2个参数。服务器端创建聊天室的API是: 创建聊天室

注意,该方法除了要返回环信聊天室的roomID外,一般还会返回该聊天室内的推流URL,以便APP主播端向CDN推流

5.更新聊天室属性:

一个视频直播应用的直播间,会有很多业务属性,比如封面、直播状态(未开播|开播中|已结束等)、直播场次等。通常来说,直播APP都是调用业务服务器上实现的更新聊天室属性方法,和环信服务器无关。

7.踢人:

删除聊天室成员。以Android端为例,踢人的API是: 删除聊天室成员

8.禁言:

添加成员到聊天室黑名单、从聊天室黑名单移除成员、分页获取聊天室黑名单。以Android端为例,添加成员到黑名单的API是: 聊天室黑名单

9.更新聊天室公告:

以Android端为例,更新聊天室公共的API是: 更新聊天室公告。聊天室成员会收到推送通知。

10.销毁聊天室:

以Android端为例,销毁聊天室的API是: 销毁聊天室

APP观众端操作的典型时序

如下图:

根据以上时序图的序号,我们逐个讲解APP观众端的主要操作:

1.获取聊天室列表及聊天室详情:

通常来说,直播APP都是调用业务服务器上实现的获取聊天室列表和聊天室详情方法。因为,向观众推荐聊天室列表、列表排序以及聊天室详情profile,这些都是业务问题。聊天室列表推荐也是一个视频直播APP的核心算法能力和运营能力的表现。

注意,该方法除了要返回环信聊天室的roomID外,一般还会返回该聊天室的拉流URL,以便进入聊天室后,APP观众端可以从CDN拉流。

获取到聊天室列表后,就可以把聊天室列表展现在APP的UI上,点击聊天室可以查看聊天室详情。

3.加入聊天室:

在时序1返回的聊天室详情信息中会包含环信聊天室roomID字段。调用环信SDK的加入聊天室API,加入聊天室。以Android端为例,加入聊天室的API是: 加入聊天室

4.获取聊天室历史消息:

新进入聊天室的用户,对聊天上下文不清楚,不知道之前别人说了什么。环信支持「聊天室最近消息历史」功能。这个功能默认关闭,需要联系客户经理打开。聊天室历史消息会在用户加入聊天室后由环信服务器推送到客户端。

5.获取聊天室成员列表:

环信服务器并不维护聊天室的所有成员名单,尤其对大型聊天室来说既没有这个需求,也不经济。本方法会返回最新加入聊天室的20个成员的环信用户ID。如果需要实现一些特殊业务逻辑,比如在app端显示聊天室内的一些高级别用户,可以通过调用业务服务器的方法来实现。

此外,不推荐频繁调用本方法。建议的实现方法是在获取初始成员列表后,APP端缓存环信直播聊天室广播的用户退出/加入消息,从而在APP端自行计算最新的聊天室用户列表。以Android端为例,监听直播聊天室用户退出/加入消息的API是: 注册聊天室监听

7.获取聊天室人数:

通常来说,直播APP都是调用业务服务器上实现的获取聊天室详情方法来获取初始的聊天室人数。获取初始聊天室人数后,APP端缓存环信直播聊天室广播的用户退出/加入消息,从而在APP端自行计算最新的聊天室人数。以Android端为例,监听直播聊天室用户退出/加入消息的API是: 注册聊天室监听

9.显示主播和观众的头像、昵称、等级和其他详细profile信息

获取到聊天室成员的环信用户ID列表后,调用业务服务器的方法,获取并显示主播和观众的头像、昵称、等级和其他详细profile信息。注意,环信服务器只保存用户的环信ID,不保存用户的头像、昵称等业务信息。相关的文档请见: 用户体系集成、 昵称和头像的显示与更新。

11.发消息。和消息有关的功能包括:

  • 发送和接收消息

  • 礼物和点赞消息的实现:环信SDK提供礼物和点赞的消息类型

  • 弹幕的实现:弹幕是纯UI的展现方式,是由开发者在客户端自行实现

以Android端为例,收发消息API见消息。

12.获取聊天室公告:

以Android端为例,可以通过注册聊天室监听来获取聊天室公告的推送消息: 注册聊天室监听

架构集二---如何从中台角度搭建直播聊天室相关推荐

  1. 微信直播聊天室单房间1500万在线的消息架构演进之路

    1.引言 随着直播和类直播场景在微信内的增长,这些业务对临时消息(在线状态时的实时消息)通道的需求日益增长,直播聊天室组件应运而生.直播聊天室组件是一个基于房间的临时消息信道,主要提供消息收发.在线状 ...

  2. 微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路

    本文由微信开发团队工程师" kellyliang"原创发表于"微信后台团队"公众号,收录时有修订和改动. 1.引言 随着直播和类直播场景在微信内的增长,这些业务 ...

  3. 从零搭建直播聊天平台(二.nginx-rtmp)

    从零搭建直播聊天平台(二.nginx-rtmp) 上篇用到了obs来推视频流数据到nginx服务器,现在是时候来说一下搭建nginx-rtmp服务了 nginx安装 下载nginx-1.12.2.ta ...

  4. WebRTC 教程五:WebRTC搭建视频聊天室

    这篇文章主要介绍了 WebRTC 聊天室的整体演示,以及 WebRTC 视频聊天的功能设计,代码逻辑以及整体演示. 目录 WebRTC 聊天室:总体演示 WebRTC 视频聊天: 设计 WebRTC ...

  5. 抓住语音社交风口,1天快速搭建语音聊天室

    语音聊天室孵化 一起KTV.众人大合唱.语音开黑.狼人杀.剧本杀.多人配音.观影.语音电台.相亲联谊社交等,一般都是在语音聊天室中进行,那么语音聊天室产品如此火热的原因有哪些呢? 一对一社交适用于朋友 ...

  6. 2021-06-14 Socketio学习使用搭建一个聊天室

    Socketio搭建一个聊天室 前言 本次实验所用编程语言为HTML以及javascript和JQurey语言和Socketio框架,所用编辑文本工具为VS code. 注意事项 (1)前端编程注意H ...

  7. SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室

    SpringBoot入门建站全系列(二十七)WebSocket做简单的聊天室 一.概述 WebSocket 是一种网络通信协议.RFC6455 定义了它的通信标准. WebSocket 是 HTML5 ...

  8. 音视频---速搭建语音聊天室技术分析

    语音聊天室孵化 一起KTV.众人大合唱.语音开黑.狼人杀.剧本杀.多人配音.观影.语音电台.相亲联谊社交等,一般都是在语音聊天室中进行,那么语音聊天室产品如此火热的原因有哪些呢? 一对一社交适用于朋友 ...

  9. 从零搭建直播聊天平台(三.video.js)

    从零搭建直播聊天平台(三.video.js) video.js可以自动在flash和html5播放器之间进行切换,可以兼容到IE8,由于是开源的所以还可已进行二次开发,是一个不错的选择. video. ...

最新文章

  1. 有什么看起来很难,但是其实很简单的题目
  2. 使用Spock 1.2简化对遗留应用程序的集成测试
  3. 扇贝有道180909每日一句
  4. 双目视觉摄像机的参数标定参考坐标系介绍
  5. STM32MP157(实验九)——SysTick定时器us延时
  6. 淘宝宝贝商家编码 管理好你的宝贝
  7. Nodemailer 使用Gmail发送邮件
  8. 计算机技术是不是信息技术,计算机技术和信息技术
  9. 解决complex转int的问题
  10. http上传文件服务器限制大小,修改Nginx与Apache配置参数解决http状态码:413上传文件大小限制问题...
  11. java8 joda_Java基础之如何取舍Joda与 Java8 日期库
  12. 修改.srt格式字幕文件
  13. 分享在Linux下编译Android源代码并修改调试系统自带应用的方法
  14. H3CR4900G3服务器的创建Raid
  15. python随机生成验证码,数字+大小写字母
  16. c语言有效的预处理命令,9、C语言之预处理命令(示例代码)
  17. 有关计算机启动过程的书籍,操作系统—计算机的启动过程
  18. windows蓝屏错误代码查询
  19. 除了IPv4,还有IPv5、IPv6、IPv7和IPv9,IPv10
  20. 读者写者问题浅析(代码实现)

热门文章

  1. PVR实用技术使用介绍
  2. 安装软件时出现 win10 defender smartscreen
  3. React组件的生命周期
  4. 如何解决触摸屏的电磁干扰问题【转】
  5. Python 之 readline()
  6. 【文末福利】国际妇女节特别策划:与科学家和工程师对话 | 终有一日,星光满天...
  7. 语文高数英语计算机,江苏专转本高数、英语、计算机、语文复习方法.docx
  8. 用c语言编写购物车系统,05-购物车功能实现
  9. 只需要把脸对准摄像头就可以实现刷脸支付
  10. python爬虫senlenium爬取拉勾网招聘数据!