手把手带你快速实现直播聊天室

废话不多说,直接开干!
工具要求:
(1) Android Studio 3.2或更高版本。
(2) SDK targetVersion至少为26。
本文聊天室是集成环信IM SDK实现聊天功能,及实现发送礼物、点赞和弹幕等功能。视频直播采用的是七牛相关的推拉流SDK。app server实现了创建聊天室,记录聊天室信息等功能,采用的是环信配套直播聊天室的开源项目。
因而文章分为三块进行介绍:
1、集成聊天室SDK,实现发送消息功能,实现发送礼物、点赞及弹幕等自定义消息。
2、集成视频直播SDK。
3、与app server的交互。
文末最后附有环信提供的直播聊天室的demo地址,本文章就基于此demo进行集成说明。

集成聊天室SDK,实现消息、发送礼物、点赞及弹幕等功能

1、注册环信账号
如果还没有环信账号的话,就赶紧注册一个吧,注册地址在这里:环信即时通讯云注册。
在这里插入图片描述
注册账号后,就可以添加应用了。
在这里插入图片描述
在这里需要注意的是注册模式,分为两种:开发注册或授权注册。如果是自己测试用的话,默认开发注册就好,这样在移动端也可以注册环信id。如果是项目中,建议使用授权注册,防止环信id被误注册,有可能会导致将来服务器注册环信id时会失败。
添加完应用后,就可以获得环信的Appkey了。

2、添加build.gradle依赖

implementation 'com.hyphenate:hyphenate-sdk-lite:3.6.7'

最新版本的sdk请从这里查看:环信Android SDK更新日志。
3、SDK初始化
建议在自己的application中进行初始化

EMClient.getInstance().init(context, options);

context就是application,options是对环信提供的对聊天的配置类,举例如下:

	EMOptions options = new EMOptions();//设置rest server地址,如果需要设置的话,一般用环信默认的就好options.setRestServer("xxx.com");//设置im server地址,如果需要设置的话,一般用环信默认的就好options.setIMServer("xxx.xxx.xxx.xxx");//设置im server 端口号options.setImPort(xxx);

当然一般而言是不需要进行配置的,用环信默认的就好,如果需要配置的话,就在EMOptions这个类里进行配置就好。
当然EMOptions还有其他的配置,需要进行配置的话,就看这个类提供的方法吧,说明写的也很详细。
如果需要配置的话,配置好以后,就把设置好的options添加到EMClient.getInstance().init(context, options)中就好。
至此,添加依赖和初始化已经完成了。
同时为了方便大家查看环信SDK的日志,建议大家在调试的时候添加如下设置:

EMClient.getInstance().setDebugMode(BuildConfig.DEBUG);

这段代码就加在SDK初始化后面就好。
4、添加环信Appkey到AndroidManifest.xml中

	<application......><!-- 设置环信应用的AppKey,就在这里填写刚等到的AppKey --><meta-data android:name="EASEMOB_APPKEY"  android:value="Your AppKey" /><!-- 声明SDK所需的service SDK核心功能--><service android:name="com.hyphenate.chat.EMChatService" android:exported="true"/><service android:name="com.hyphenate.chat.EMJobService"android:permission="android.permission.BIND_JOB_SERVICE"android:exported="true"/><!-- 声明SDK所需的receiver --><receiver android:name="com.hyphenate.chat.EMMonitorReceiver"><intent-filter><action android:name="android.intent.action.PACKAGE_REMOVED"/><data android:scheme="package"/></intent-filter><!-- 可选filter --><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/><action android:name="android.intent.action.USER_PRESENT" /></intent-filter></receiver></application>

详细的集成配置,参考环信官方文档:Android SDK 导入
5、注册及登录环信id
(1)注册环信id
在实际开发的项目中,一般而言注册环信账号都是app server完成的,如果在第一步注册环信账号的时候,选择的开发注册,就可以在移动端调用如下接口注册环信id了:

EMClient.getInstance().createAccount(username, password);

这里的username就是注册成功后的环信id,username只能是字母和数字。
(2)登录环信id
登录环信id,调用如下接口:

EMClient.getInstance().login(username, password, new EMCallBack() {@Overridepublic void onSuccess() {//注册成功的回调}@Overridepublic void onError(int code, String error) {//注册失败的回调}@Overridepublic void onProgress(int progress, String status) {}});

这里需要注意的是,环信id的字母均是小写的,登录的时候注意一下大小写的转换,否则可能就会造成,注册成功后,怎么老是登录不上去的尴尬事情了。
6、加入聊天室并注册消息监听
项目中创建聊天室是由app server负责完成的,移动端只需根据app server返回的聊天室id加入该聊天室,调用接口如下:

EMClient.getInstance().chatroomManager().joinChatRoom(chatroomId, new EMValueCallBack<EMChatRoom>() {@Override public void onSuccess(EMChatRoom emChatRoom) {//加入聊天室成功,处理其他逻辑}@Override public void onError(int i, String s) {//加入聊天室失败,添加失败的逻辑}});

注册及移除消息监听

    @Overridepublic void onResume() {super.onResume();// register the event listener when enter the foregroundEMClient.getInstance().chatManager().addMessageListener(messageListener);}@Overridepublic void onStop() {super.onStop();// unregister this event listener when this activity enters the// backgroundEMClient.getInstance().chatManager().removeMessageListener(messageListener);}@Overridepublic void onMessageReceived(List<EMMessage> messages) {for (EMMessage message : messages) {String username = null;// 群组消息if (message.getChatType() == EMMessage.ChatType.GroupChat|| message.getChatType() == EMMessage.ChatType.ChatRoom) {username = message.getTo();} else {// 单聊消息username = message.getFrom();}// 如果是当前会话的消息,刷新聊天页面if (username.equals(chatroomId)) {//处理新消息...}}}

根据消息监听,实现消息刷新,礼物,点赞及弹幕等功能。礼物,点赞及弹幕等功能后面再介绍。
注册聊天室监听

//加入聊天室成功后,注册聊天室监听
EMClient.getInstance().chatroomManager().addChatRoomChangeListener(roomChangeListener);

移除聊天室监听

 @Overridepublic void onDestroyView() {super.onDestroyView();EMClient.getInstance().chatroomManager().removeChatRoomListener(roomChangeListener);}

聊天室监听

@Overridepublic void onChatRoomDestroyed(String roomId, String roomName) {if (roomId.equals(chatroomId)) {//聊天室被销毁,则退出页面mContext.finish();}}@Overridepublic void onMemberJoined(String roomId, String participant) {//有成员加入}@Overridepublic void onMemberExited(String roomId, String roomName, String participant) {//有成员退出}@Overridepublic void onRemovedFromChatRoom(int reason, String roomId, String roomName, String participant) {//被移除聊天室}@Overridepublic void onMuteListAdded(String chatRoomId, List<String> mutes, long expireTime) {//被禁言}@Overridepublic void onMuteListRemoved(String chatRoomId, List<String> mutes) {//移出禁言列表}@Overridepublic void onWhiteListAdded(String chatRoomId, List<String> whitelist) {//被加入白名单}@Overridepublic void onWhiteListRemoved(String chatRoomId, List<String> whitelist) {//从白名单中移出}@Overridepublic void onAllMemberMuteStateChanged(String chatRoomId, boolean isMuted) {//一键禁言状态变化}@Overridepublic void onAdminAdded(String chatRoomId, String admin) {//添加管理员}@Overridepublic void onAdminRemoved(String chatRoomId, String admin) {//移出管理员}@Overridepublic void onOwnerChanged(String chatRoomId, String newOwner, String oldOwner) {//主播(房主)发生变化}@Overridepublic void onAnnouncementChanged(String chatRoomId, String announcement) {//公告发生改变}

7、礼物,点赞及弹幕等功能实现
礼物、点赞及弹幕的实现,依靠的是环信提供的自定义消息(CUSTOM)类型实现的。
发送自定义消息如下:

	/*** 发送自定义消息* @param to* @param chatType* @param event 礼物,点赞或者弹幕等定义可由event参数区分* @param params 需要传递的参数,礼物等相关参数就可放于这个参数中* @param callBack*/public void sendCustomMsg(String to, EMMessage.ChatType chatType, String event, Map<String, String> params, final OnMsgCallBack callBack) {final EMMessage sendMessage = EMMessage.createSendMessage(EMMessage.Type.CUSTOM);EMCustomMessageBody body = new EMCustomMessageBody(event);body.setParams(params);sendMessage.addBody(body);sendMessage.setTo(to);sendMessage.setChatType(chatType);EMClient.getInstance().chatManager().sendMessage(sendMessage);}

具体用法可参考环信自定义消息类型用法:发送自定义类型消息。
实际开发中,可以对自定义消息进行进一步的封装,比如最终封装为发送礼物,发送点赞和发送弹幕的方法,可参考如下:

	/*** 发送礼物消息* @param giftId 礼物id* @param num  礼物数量* @param callBack*/public void sendGiftMsg(String giftId, int num, OnMsgCallBack callBack) {Map<String, String> params = new HashMap<>();params.put(MsgConstant.CUSTOM_GIFT_KEY_ID, giftId);params.put(MsgConstant.CUSTOM_GIFT_KEY_NUM, String.valueOf(num));sendGiftMsg(params, callBack);}

8、聊天室页面的搭建及礼物等动画的实现
具体的根据项目产品经理的要求进行开发,最后附的环信直播聊天室中有搭建的页面以及一些基本动画的实现,可以借鉴一下。
至此,环信IM SDK集成及实现就完成了。下面看看如何集成七牛的SDK。

集成视频直播SDK,实现视频直播及播放

demo中是将视频直播的相关逻辑,抽取到library中,为了方便进行视频SDK的更换。
基于环信demo中提供的视频直播方案,就以集成七牛SDK进行说明。
1、注册七牛账号。
注册地址:七牛
注册完七牛账号以后,需要配置自己的域名,如果还没有域名的话,需要到有关部门去备案才可以。
在这里插入图片描述
2、添加推拉流依赖
因为七牛没有提供远程依赖,直接去下载jar包置于libs文件夹下,so文件置于jniLibs文件夹下即可。
推流jar包及so文件下载地址:推流端。
播放端jar包及so文件下载地址:播放端。
3、添加相关权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

以上权限包含推拉流两端。
4、推流端初始化

StreamingEnv.init(getApplicationContext());

建议在application中进行初始化。
5、搭建推拉流页面
具体页面搭建,参考环信demo。
6、设置推拉流地址
(1)设置推流地址
推流地址从app server请求得到,因为app server需要进行鉴权等操作,得到推流地址后设置如下:

StreamingProfile mProfile = new StreamingProfile();
mProfile..setPublishUrl(publishUrl);

具体设置可以参考环信直播聊天室中PushStreamHelper中的设置,或者参考七牛官网给的参数设置。
(2)播放地址设置
推流地址也是从app server请求得到的,设置如下:

//在调用播放器的控制接口之前,必须先设置好播放地址.传入播放地址,可以是 /path/to/local.mp4 本地文件绝对路径,或 HLS URL,或 RTMP URL
videoview.setVideoPath(url);
......
videoview.start();

videoview为七牛SDK提供的PLVideoTextureView类。
具体设置可以参考环信直播聊天室,或者参考七牛播放端SDK功能使用。
7、注意事项
(1)需注册七牛账号,并通过七牛官网申请并开通直播权限。
(2)推流SDK v3.0.0 及以后版本需要获取授权才可使用,即SDK会校验包名,需联系七牛客服获取授权。
(3)demo中推拉流地址需替换为自己的域名。

至此视频直播的推拉流SDK都集成完了,就可以进行简单的推拉流了,如果要设置美颜或者添加更加详细的设置,请查看七牛推流端设置和七牛播放端设置。
下面介绍移动端与app server间的交互。

与app server的交互

环信提供配套的app server demo在这里:AppServer.。
具体app server api介绍看这里:直播间API文档。
目前app server提供了如下接口:
1、创建直播间

    /*** 创建直播室* @param module 包括直播室名称,直播室描述,直播室房主,直播室封面,直播室最大人数* @return*/@POST("liverooms")LiveData<LiveRoom> createLiveRoom(@Body LiveRoom module);

2、获取直播间详情

	/*** 直播室详情* @param roomId 直播室id* @return*/@GET("liverooms/{id}")LiveData<LiveRoom> getLiveRoomDetail(@Path("id") String roomId);

该接口会返回直播间id,owner,mute,maxusers等信息。
3、分页获取直播间列表

	/*** 获取直播室列表* @param limit 一次取的条数* @param cursor 在这个游标基础上取数据,首次获取传null* @return*/@GET("liverooms")LiveData<ResponseModule<List<LiveRoom>>> getLiveRoomList(@Query("limit") int limit, @Query("cursor") String cursor);

4、分页获取正在直播的直播间列表

	/*** 获取正在直播的直播室列表* @param limit 一次取的条数* @param cursor 在这个游标基础上取数据,首次获取传null* @return*/@GET("liverooms/ongoing")LiveData<ResponseModule<List<LiveRoom>>> getLivingRoomList(@Query("limit") int limit, @Query("cursor") String cursor);

5、修改直播状态

	/*** 改变直播状态* @param roomId* @param username* @param status 可以为ongoing或offline两种状体* @return*/@POST("liverooms/{liveroomid}/users/{username}/{status}")LiveData<LiveRoom> changeLiveStatus(@Path("liveroomid") String roomId,@Path("username") String username,@Path("status") String status);

status可以为ongoing或offline两种状体,分别代表开始直播和结束直播。
6、获取推流地址

	/*** 获取推流地址* @param streamKey* @return*/@GET("streams/url/publish/")LiveData<LiveRoomUrlBean> getLiveRoomPublishUrl(@Query("streamKey")String streamKey);

参数domain(推流域名),hub(直播空间名)和expire(获取推流url过期时间)是可选参数。
7、获取播放地址

    /*** 获取播放地址* @param streamKey* @return*/@GET("streams/url/play/")LiveData<LiveRoomUrlBean> getLiveRoomPlayUrl(@Query("streamKey")String streamKey);

注意:
(1)需要注意的是文档中路径格式如下:Path: http://localhost:8080/appserver/liverooms,如果在本地调试时使用localhost有问题,请更换为本地的ip地址即可。

喜大乐奔,至此,可以实现基本的直播聊天室了。
最关键的来了,这是有源码的!!
赶紧拿走吧,下面就是源码地址:
环信直播聊天室
环信App Server。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/16405.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

地摊叫卖、超市播音工具-简洁的文字转语音播音软件

简介&#xff1a; 文件名称 : 播音员.exe 文件大小 : 0.5MB (568KB) 文件类型 : application/x-dosexec 运行平台 : Windows7 / Windows10 软件功能 : 自定义语录文字、图片&#xff0c;快捷发送聊天 软件特色 : 无需安装、永久免费、无自启、无广告 关于软件&#xff1a; 1、…

海威超市播音易源码+成品

介绍&#xff1a; 源码介绍&#xff1a; 目前一直在用的超市播音软件&#xff0c;送给不会编程的人&#xff0c;下载后打开直接可用&#xff01; 会编程的人&#xff0c;可以修改后使用&#xff01; 网盘下载地址&#xff1a; http://kekewangLuo.cc/VM4aIepRMTH 图片&#x…

养成这个好习惯,让播音主持成为你的加分项

我们都知道&#xff0c;习惯的力量是很大的&#xff0c;我们只有在日常生活中养成一个良好的习惯&#xff0c;才能为我们的学习“添砖加瓦”。 养成下面四个习惯&#xff0c;可以让学习播音主持的你在学习和考试中都会加分哦! 科学用声和护嗓 对于播音主持专业的学生来说&…

内容创业洗稿,知识付费拆书

作者&#xff1a; 深几度 来源&#xff1a; https://mp.weixin.qq.com/s/WXGURnbutf1BUV54ytuzjw 罗振宇又因为跨年演讲的问题成为众矢之的了&#xff0c;顺带着他的得到APP知识付费模式再一次被拖出来&#xff0c;被人批判了一番。 批判知识付费的理由已经屡见不鲜。此前公众号…

518超市播音软件如何放大音量到150的,传统播音软件声音太小(0-100)

518超市播音软件&#xff08;http://www.518boyin.com/&#xff09;最新版6.2 支持放大语音音量&#xff0c;最多可放大150%&#xff0c;而传统的播音软件声音太小。就是说播放音乐的时候音量挺大&#xff0c;到播放语音就感觉音量降低了很多。这可能是由于讲话天然没有歌曲喊的…

基于STM32的录音与播音

基于STM32的录音与播音 设计方案 本设计通过STM32的内置ADC加一个麦克风和放大电路&#xff08;可以在网上买模块&#xff09;实现音频的采集&#xff0c;然后存放在SD卡中&#xff08;这里可以参考我之前的博客FATFS文件系统&#xff09;&#xff0c;然后再读取SD卡里存放的…

海威超市播音源码+成品

源码介绍&#xff1a; 目前一直在用的超市播音软件&#xff0c;送给不会编程的人&#xff0c;下载后打开直接可用&#xff01;会编程的人&#xff0c;可以修改后使用&#xff01; 网盘下载地址&#xff1a; http://www.bytepan.com/8sfiNvAioAc 图片&#xff1a;

基于WASAPI的录音播音系统

最近写了一个小的系统&#xff0c;在VS2022平台上做的&#xff0c;主要是通过调用Windows的API接口实现录音&#xff08;PCM格式&#xff09;&#xff0c;播音&#xff08;PCM、WAV、Mp3格式&#xff09;&#xff0c;PCM格式转WAV格式、遍历指定文件夹下的所有音频文件并播放。…

播音计算机论文,广播中计算机的应用论文

广播中计算机的应用论文 引言 随着社会的发展&#xff0c;人们的物质生活水平也在提高。而在这种发展趋势下&#xff0c;人们对精神生活水平也提出了新的要求。面对这些要求&#xff0c;传统的广播电视技术的应用已经无法满足广播事业的发展需要。而计算机技术的应用&#xff0…

学校的校园广播是如何设置的

9月开学季&#xff0c;各个校园的广播也开始播音了&#xff0c;随着互联网的发展&#xff0c;现在很多校园使用的都是播音软件&#xff0c;通过软件来操作可以节省人力&#xff0c;可以设置一次性、每天、每周、每月定时播放&#xff0c;支持开机自动运行。学校可自动定时广播打…

chatgpt赋能python:Python抄股票的秘诀

Python 抄股票的秘诀 在股票市场中&#xff0c;抄股票是许多投资者都会尝试的一种方式。然而&#xff0c;随着市场变化和行情的波动&#xff0c;抄股票并不是一件容易的事情。但是&#xff0c;有了 Python&#xff0c;我们可以利用其强大的数据处理和可视化功能来进行股票分析…

chatgpt赋能python:学Python炒股:聪明投资策略

学Python炒股&#xff1a;聪明投资策略 在金融市场中&#xff0c;投资者要获取财务知识并实际操作从而创造财富。多年来&#xff0c;投资者一直在寻找有效的技术分析手段&#xff0c;并逐步将其用于各种产品。Python在这方面提供了先进的技术&#xff0c;其跨平台的特性和Pyth…

chatgpt赋能python:利用Python炒股:一篇详细的指南

利用Python炒股&#xff1a;一篇详细的指南 炒股是许多人致富的途径。随着技术的发展&#xff0c;现在在线炒股已经变得越来越普及。在这个数字时代&#xff0c;Python提供了一个强大的数据分析和编程工具&#xff0c;可以帮助投资者更好地研究股市行情和制定更好的交易策略。…

chatgpt赋能python:用Python炒股效益如何?

用Python炒股效益如何&#xff1f; 介绍 随着互联网的不断发展&#xff0c;越来越多的人开始尝试使用Python来炒股。Python作为一种强大的编程语言&#xff0c;其在数据分析和机器学习领域拥有广泛的应用。而在股票投资领域&#xff0c;Python的优势也逐渐显现。 Python在股…

chatgpt赋能python:Python对炒股有用吗?

Python对炒股有用吗&#xff1f; 随着互联网的快速发展&#xff0c;炒股已经成为越来越多人的投资选择。而Python作为一种流行的编程语言&#xff0c;也逐渐被越来越多的投资者应用在炒股分析中。那么&#xff0c;Python对炒股有用吗&#xff1f;这是本文要探讨的问题。 Pyth…

飞书发送消息

import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSON; import cn.hutool.json.JSONUtil;import java.util.HashMap; import java.util.Map;/*** 飞书工具* author: czy* date: 2022-9-14*/ p…

​华为回应出售手机业务传闻:假消息;微软将ChatGPT整合到更多工具中:不用写代码就能开发应用;苹果更新Mac产品线|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

狂飙!GPT-4最新20+个应用案例集锦,附视频

编者按&#xff1a;自OpenAI于3月15日重磅推出GPT-4,一石激起千层浪&#xff0c;全球开发者、创业者们迅速尝试了各种形形色色的场景应用&#xff0c;来体验它的极限&#xff0c;游戏、编程、客户关系、营销、财务、家庭生活、饮食、文学艺术创作等等不一而足。笔者从中筛选了2…

狂团KtAdmin框架正式免费开源发布,助力独立版SAAS系统快速开发

狂团&#xff08;kt8.cn&#xff09;旗下[ KtAdmin ]是为独立版SAAS系统而生的快速开发框架&#xff01; KtAdmin 基于当前流行的ThinkPHP6.xVue3ElementuiVite 开发 , 是一款免费开源的多用户&#xff0c;多应用的独立版SAAS系统开发框架。 【注】[KtAdmin]遵循较为宽松的Ap…

Visual ChatGPT原理解读——大模型论文阅读笔记四

论文&#xff1a;https://arxiv.org/abs/2303.04671 代码&#xff1a;https://github.com/microsoft/TaskMatrix 一. 整体框架 如图所示&#xff0c;用户上传一张黄花的图像并输入一个复杂的语言指令“请根据该图像的预测深度生成一朵红花&#xff0c;然后逐步使其像卡通一样”…