====== 直播聊天室集成介绍 ====== ------- 前言:本文将介绍环信直播聊天室的主要功能列表。并讲解基于环信直播聊天室,实现一个典型视频直播产品的步骤。 ===== 场景概述 ===== 视频直播已经是一种成熟的产品形态,在不同行业中有多种应用场景。在泛娱乐行业,游戏直播、秀场直播、演唱会直播等已经走进广大用户的日常生活;在电商行业,网红带货直播已经成为增长的新动能;在教育行业,1对多的教育直播也正在改变着整个行业的格局。视频直播占用着越来越多的用户使用时间。随着线上线下服务的进一步融合,视频直播也将会有迎来越来越多的使用场景。 现在已经很少有视频直播产品的技术栈完全是自建开发。让专业的人做专业的事。通常来说,一个典型的视频直播产品会使用二类外部厂家的能力:直播聊天室SDK和视频直播SDK。环信是典型的直播聊天室SDK供应商,主要负责提供视频直播中的文字聊天室部分,如聊天室IM消息收发、弹幕、送礼物、聊天室人员管理等功能。视频直播SDK的推荐使用声网 Agora 融合CDN直播SDK,直播SDK主要提供视频编解码、主播推流到CDN,观众从CDN拉流观看等功能。声网 Agora 融合CDN直播SDK采用了领先的网络监测与预判算法,可以更快地监测用户的网络波动并进行自适应切换。 ===== Demo ===== ====Demo体验==== 请扫码体验DEMO Android&iOS: {{:im:other:integrationcases:直播新demo.png?200|}} 版本:V1.0.0 DEMO开发者名称:北京易掌云峰科技有限公司 [[https://www.easemob.com/protocol|隐私协议]] [[https://www.easemob.com/agreement|用户权限]] ====Demo源码==== 我们在 Github 已经提供了一套完整的 Demo,大家可以在 Github 地上获取。 * [[https://github.com/easemob/livestream_demo_android/|Android]] * [[https://github.com/easemob/livestream_demo_ios/tree/main|iOS]] * [[https://github.com/easemob/easemob-im-app-server|AppServer]] * [[https://github.com/easemob/livestream_demo_miniprogram|微信直播聊天室小程序]] 在 Demo 的基础上,开发者只需要不到1周的时间,对 UI 和功能做简单修改即可准备测试上线。 ===== 功能列表 ===== 环信直播聊天室,主要的功能特性包括: **聊天室消息类型及扩展功能**: * 支持丰富的消息类型,包括文字、语音、图片、点赞、礼物、弹幕等类型,同时支持自定义消息,您可以根据自己业务逻辑来自行实现;(点赞、礼物、弹幕等消息类型可以使用自定义消息体消息实现) * 实时消息回调,支持对用户发送的消息进行处理,可以在您的应用服务器上实时保存聊天记录; **聊天室管理功能:** * 聊天室创建和销毁; * 聊天室成员管理功能,支持加入、离开、禁言、踢人、封禁等用户操作; * 支持黑名单功能,被列入黑名单的用户不能再次加入聊天室; * 支持多管理员,除主播外可以指定管理员,对成员进行管理; **内容审核:** * 敏感词过滤&消息反垃圾,支持自定义敏感词对消息进行过滤,基于用户行为智能反垃圾; **超大并发直播聊天室:** * 消息分级,白名单,支持超大并发直播聊天室; **自定义消息集成建议:** * 环信直播聊天室Demo提供了完整的自定义消息体消息封装(礼物,点赞,弹幕等),以便您集成使用,您可直接访问 Github 上环信直播聊天室Demo开源库获取您需要的集成资源。 [[https://github.com/easemob/livestream_demo_android/tree/main|Android]] [[https://github.com/easemob/livestream_demo_ios|iOS]] * 关于点赞消息实现建议:直播聊天室观众可连续多次点赞,您可以对点赞消息做合并统计、延迟发送的处理,单次点赞消息可统计一段时间内的点赞数量,提高消息的实时性,降低服务器压力。 ===== 典型视频直播产品的架构 ===== 一个典型的视频直播产品通常由3个厂家的模块构成: * 视频直播产品厂家的业务代码 * 直播聊天室 * 视频直播流服务及CDN 简单的说, 视频直播产品厂家的业务代码负责在客户端和服务器端实现所有视频直播的业务逻辑和数据管理。 直播聊天室负责视频直播的直播间(或聊天室。以下文中直播间或聊天室均指同一个概念)中的文字聊天室部分,包括聊天室中的IM沟通(发消息,弹幕,刷礼物)以及聊天室的管理比如聊天室的成员列表、禁言踢人等。 对于这2个部分,本文档的后续部分会详细介绍具体实现方式。 视频直播流处理及CDN厂商提供的SDK分为主播端和观众端。主播端主要负责视频采集编码,然后将自己的视频流和音频流推流到CDN。观众则使用拉流SDK从CDN拉取主播的视频流和音频流,并进行视频解码和视频播放。视频流和音频流的鉴黄、录音录像等工作也都是由视频直播流处理及CDN厂家提供的。 {{:im:other:integrationcases:1直播服务示意图.png?800|}} //图1.视频直播流处理及CDN厂商的SDK架构示意图// 可以参考以下视频直播服务CDN厂商提供的直播SDK: * [[https://www.agora.io/cn/fls|Agora 融合CDN直播]] ===== 环信直播聊天室集成 ===== 环信直播聊天室的集成分为服务端集成和客户端集成。 ==== 业务服务器需要做什么 ==== 业务服务器上,和视频直播业务最直接相关的模块有2个: * 用户体系管理:负责记录和管理直播业务的用户,如主播和观众的创建和删除,用户的头像、昵称、等级等信息的维护 * 直播间管理:负责记录和管理当前进行中或者已结束的直播间信息,如创建和销毁直播间,名称、封面、属性等直播间信息的维护 以上2个业务模块和环信直播聊天室的集成点是: * 用户体系集成:这部分的主要工作是完成客户自己的业务服务器上的用户体系与环信服务器上的环信ID的映射关系。注意,环信服务器只保存用户的环信ID,不保存用户的头像、昵称等业务信息。相关的文档请见: [[http://docs-im.easemob.com/im/server/ready/user |用户体系集成]]、 [[http://docs-im.easemob.com/im/other/integrationcases/nickname |昵称和头像的显示与更新]]、 [[http://docs-im.easemob.com/im/other/integrationcases/usersandfriends |已上线应用的用户体系导入到环信]] * 环信聊天室的创建、获取、修改、删除等功能的集成:部分聊天室有关的操作,是APP端通过环信APP端SDK的方法来直接调用环信服务器。还有部分聊天室有关的操作,是业务服务器通过环信服务器端REST API来调用环信服务器。具体哪些操作适合直接调用环信服务器,哪些操作适合提供业务服务器调用环信服务器,可以参考以下的2个章节:[[http://docs-im.easemob.com/im/other/integrationcases/live-chatroom#理解app主播端操作的典型时序|理解app主播端操作的典型时序]]、[[http://docs-im.easemob.com/im/other/integrationcases/live-chatroom#理解app观众端操作的典型时序|理解app观众端操作的典型时序]]。和服务器端聊天室管理有关的API主要有3个部分:[[http://docs-im.easemob.com/im/server/basics/chatroom#管理聊天室|管理聊天室]]、[[http://docs-im.easemob.com/im/server/basics/chatroom#管理聊天室成员|管理聊天室成员]]、[[http://docs-im.easemob.com/im/server/basics/chatroom#管理禁言|管理禁言]]。 * 直播回放:直播回放需要使用环信[[http://docs-im.easemob.com/im/server/basics/chatrecord|聊天记录]]功能,配合CDN厂商的视频录制回放功能来完成。 ==== 客户端开发环境准备 ==== 首先当然是开发环境的准备,SDK的导入等。详见各端文档: * [[http://docs-im.easemob.com/im/android/sdk/import |Android SDK 介绍及导入]] * [[http://docs-im.easemob.com/im/ios/sdk/prepare |iOS SDK 快速集成]] * [[http://docs-im.easemob.com/im/web/intro/start |Web IM 介绍]] * [[http://docs-im.easemob.com/im/pc/intro/integration|桌面端集成说明]] * [[http://docs-im.easemob.com/im/applet/intro |微信小程序 SDK 简介]] ==== 理解APP主播端操作的典型时序 ==== 如下图: {{:im:other:integrationcases:app主播端时序.png|}} 根据以上时序图的序号,我们逐个讲解APP主播端的主要操作: **1.创建聊天室:** 首先在业务服务器上创建聊天室,然后业务服务器调用环信服务器端REST API在环信服务器创建聊天室。环信创建聊天室API只需要传入roomID和环信用户ID这2个参数。服务器端创建聊天室的API是: [[http://docs-im.easemob.com/im/server/basics/chatroom#创建聊天室 |创建聊天室]] 注意,该方法除了要返回环信聊天室的roomID外,一般还会返回该聊天室内的推流URL,以便APP主播端向CDN推流 **5.更新聊天室属性:** 一个视频直播应用的直播间,会有很多业务属性,比如封面、直播状态(未开播|开播中|已结束等)、直播场次等。通常来说,直播APP都是调用业务服务器上实现的更新聊天室属性方法,和环信服务器无关。 **7.踢人:** 删除聊天室成员。以Android端为例,踢人的API是: [[http://docs-im.easemob.com/im/android/basics/chatroom#删除聊天室成员 |删除聊天室成员]] **8.禁言:** 添加成员到聊天室黑名单、从聊天室黑名单移除成员、分页获取聊天室黑名单。以Android端为例,添加成员到黑名单的API是: [[http://docs-im.easemob.com/im/android/basics/chatroom#聊天室黑名单 |聊天室黑名单]] **9.更新聊天室公告:** 以Android端为例,更新聊天室公共的API是: [[http://docs-im.easemob.com/im/android/basics/chatroom#更新聊天室公告 |更新聊天室公告]]。聊天室成员会收到推送通知。 **10.销毁聊天室:** 以Android端为例,销毁聊天室的API是: [[http://docs-im.easemob.com/im/android/basics/chatroom#销毁聊天室 |销毁聊天室]] ==== 理解APP观众端操作的典型时序 ==== 如下图: {{:im:other:integrationcases:app观众端时序.png|}} 根据以上时序图的序号,我们逐个讲解APP观众端的主要操作: **1.获取聊天室列表及聊天室详情:** 通常来说,直播APP都是调用业务服务器上实现的获取聊天室列表和聊天室详情方法。因为,向观众推荐聊天室列表、列表排序以及聊天室详情profile,这些都是业务问题。聊天室列表推荐也是一个视频直播APP的核心算法能力和运营能力的表现。 注意,该方法除了要返回环信聊天室的roomID外,一般还会返回该聊天室的拉流URL,以便进入聊天室后,APP观众端可以从CDN拉流。 获取到聊天室列表后,就可以把聊天室列表展现在APP的UI上,点击聊天室可以查看聊天室详情。 **3.加入聊天室:** 在时序1返回的聊天室详情信息中会包含环信聊天室roomID字段。调用环信SDK的加入聊天室API,加入聊天室。以Android端为例,加入聊天室的API是: [[http://docs-im.easemob.com/im/android/basics/chatroom#加入聊天室 |加入聊天室]] **4.获取聊天室历史消息:** 新进入聊天室的用户,对聊天上下文不清楚,不知道之前别人说了什么。环信支持「聊天室最近消息历史」功能。这个功能默认关闭,需要联系客户经理打开。聊天室历史消息会在用户加入聊天室后由环信服务器推送到客户端。 **5.获取聊天室成员列表:** 环信服务器并不维护聊天室的所有成员名单,尤其对大型聊天室来说既没有这个需求,也不经济。本方法会返回最新加入聊天室的20个成员的环信用户ID。如果需要实现一些特殊业务逻辑,比如在app端显示聊天室内的一些高级别用户,可以通过调用业务服务器的方法来实现。 此外,不推荐频繁调用本方法。建议的实现方法是在获取初始成员列表后,APP端缓存环信直播聊天室广播的用户退出/加入消息,从而在APP端自行计算最新的聊天室用户列表。以Android端为例,监听直播聊天室用户退出/加入消息的API是: [[http://docs-im.easemob.com/im/android/basics/chatroom#注册聊天室监听 |注册聊天室监听]] **7.获取聊天室人数:** 通常来说,直播APP都是调用业务服务器上实现的获取聊天室详情方法来获取初始的聊天室人数。获取初始聊天室人数后,APP端缓存环信直播聊天室广播的用户退出/加入消息,从而在APP端自行计算最新的聊天室人数。以Android端为例,监听直播聊天室用户退出/加入消息的API是: [[http://docs-im.easemob.com/im/android/basics/chatroom#注册聊天室监听 |注册聊天室监听]] **9.显示主播和观众的头像、昵称、等级和其他详细profile信息** 获取到聊天室成员的环信用户ID列表后,调用业务服务器的方法,获取并显示主播和观众的头像、昵称、等级和其他详细profile信息。注意,环信服务器只保存用户的环信ID,不保存用户的头像、昵称等业务信息。相关的文档请见: [[http://docs-im.easemob.com/im/server/ready/user |用户体系集成]]、 [[http://docs-im.easemob.com/im/other/integrationcases/nickname |昵称和头像的显示与更新]]。 **11.发消息。和消息有关的功能包括:** * 发送和接收消息 * 礼物和点赞消息的实现:环信SDK提供礼物和点赞的消息类型 * 弹幕的实现:弹幕是纯UI的展现方式,是由开发者在客户端自行实现 以Android端为例,收发消息API见[[im:android:basics:message|消息]]。 **12.获取聊天室公告:** 以Android端为例,可以通过注册聊天室监听来获取聊天室公告的推送消息: [[http://docs-im.easemob.com/im/android/basics/chatroom#注册聊天室监听 |注册聊天室监听]] ==== 客户端开发文档索引 ==== 完整的客户端的文档详见: * [[http://docs-im.easemob.com/im/android/basics/chatroom |Android端聊天室管理]] * [[http://docs-im.easemob.com/im/ios/basics/chatroom |iOS端聊天室管理]] * [[http://docs-im.easemob.com/im/web/basics/chatroom |web端聊天室管理]] * [[http://docs-im.easemob.com/im/pc/intro/chatroom |桌面端聊天室管理]] * [[http://docs-im.easemob.com/im/applet/chatroom |微信小程序聊天室管理]] ===== 计费说明 ===== 直播的CDN费用由CDN厂商收取。环信直播聊天室部分的费用按照环信IM产品的标准计价方式,既按日活收费: 详见: https://www.easemob.com/pricing/im#p02