简单快速搭建,全新语聊方案
作者:互联网
导读: 年初的时候因为马斯克的一场直播带货,让 ClubHouse 迅速出圈变成现在炙手可热的社交产品。开个玩笑。现在要是没有用过ClubHouse你都不好意思说自己是互联网行业的。(不过目前中国市场已下架) 是的,这个圈子就是这么的追逐潮流。语音社交平台并不是什么新鲜产品,那么为什么ClubHouse能够爆火呢?我们简单梳理一下。
分析ClubHouse 爆火的原因
-
首先 ClubHouse 一直没用开放注册,用户需要通过官方发送的邀请码才能进入,一个用户只能邀请两个新用户,且目前只有 iOS 版本,而邀请码一般都在一些媒体人,产品经理,技术大拿手上,所以初期保证了 ClubHouse 头部用户的优良性。
-
当用户进入ClubHouse 后可以选择几个自己喜欢的话题,然后这些话题的聊天室会出现在你的首页。ClubHouse 的聊天房间只能语音沟通,不能发送文字、图片、视频等其他形式的内容。听众在语音房内只能听主持人和嘉宾聊天,或者举手上麦发言,不能打赏礼物,弹幕互动等等。用户在房间内就是聊天、分享、倾听,遇到感兴趣的人可以关注。
-
其实语聊场景的社交软件在国内已经拓展了多种玩法,只是针对的场景都是主打“娱乐社交”,主播+打赏机制,这些玩法以及运营方式跟ClubHouse 背道而驰,ClubHouse 是一个语音聊天室。所有人只能通过语音交流,不能打字,也不能发图、发视频。就如同它的名字:一个办 club(俱乐部)的 house,一个社群空间。
ClubHouse 有着大量优质的用户,并且目前产品涌入了大量的创投圈的大佬,不时开设房间分享创业经验及投资观念,并且整体素质较高,用户之间都极为注重礼仪,就算是做打发闲暇时间的背景音也都是一个不错选择。由此可见软件的定位吸金方式也不在单靠娱乐的方式切入,商业的模式正向多元化多样化发展。
从技术角度,做一个 ClubHouse 难吗?
其实非常简单,我们已经推出了仿 ClubHouse 语音模块的 demo - anyHouse,得益于 anyRTC 音视频 SDK 和anyRTC 实时信令 SDK 的良好封装。实现 ClubHouse 的核心语聊模块,包括举手,邀请上台等,其实很简单。
下面再为大家介绍一下5步快速搭建 anyHouse。
- 房主创建并加入房间
rtcEngine = RtcEngine.create(context, BuildConfig.APPID,RtcEvent()) //初始化 SDK
rtcEngine.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING) //设置房间类型为主持人模式
rtcEngine.setClientRole(Constants.CLIENT_ROLE_BROADCASTER) //设置角色为主持人
rtcEngine.joinChannel(channelToken,channelId,"",userId) //加入频道
房主加入频道后,将会自动发布音频,房间内的其他听众将可以听到房主的语音。
- 听众加入房间
rtcEngine = RtcEngine.create(context, BuildConfig.APPID,RtcEvent()) //初始化 SDK
rtcEngine.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING) //设置房间类型为主持人模式
rtcEngine.setClientRole(Constants.CLIENT_ROLE_BROADCASTER) //设置角色为游客
rtcEngine.joinChannel(channelToken,channelId,"",userId) //加入频道
听众将身份设置成游客进入房间后,将会自动订阅房主的音频。这样最基本的语音直播场景就完成了。那怎么完成主持人和听众之间的互动呢?接下来看。
- 听众举手/取消举手/房主邀请上台
val json = JSONObject().apply {put("action", BroadcastCMD.RAISE_HANDS)} //举手消息
val json = JSONObject().apply {put("action", BroadcastCMD.CANCLE_RAISE_HANDS)} //取消举手消息
val json = JSONObject().apply {put("action", BroadcastCMD.INVITE_SPEAK)} //邀请听众上台
RtmManager.instance.sendPeerMessage(hostId/userId, json.toString())//发送消息给主持人/观众
想要实现语音直播场景下主持人和游客的互动,通过 RTM SDK 很快就可以实现。只需约定好每个操作发送什么消息。对方收到什么消息界面上作处理就行。比如游客收到邀请,怎么才能上台发言呢?其实只需要改变游客的身份即可。
rtcEngine.setClientRole(Constants.CLIENT_ROLE_BROADCASTER) //将身份变成主播 则会自动发布音频
- 房主控制上台发言者麦克风
val json = JSONObject().apply {put("action", BroadcastCMD.CLOSER_MIC)} //关闭麦克风
RtmManager.instance.sendPeerMessage(userId, json.toString())//发送消息给观众
同样的,发送实时信令通知对方关闭麦克风。对方收到后,将自己麦克风关闭即可
override fun onMessageReceived(var1: RtmMessage?, var2: String?) {//收到消息
val action = json.getInt("action")
when (action) {
BroadcastCMD.CLOSER_MIC -> {
rtcEngine.muteLocalAudioStream(true) //关闭麦克风
}
}
}
通过实时信令,还可以做很多场景。
- 离开房间
val json = JSONObject().apply {put("action", BroadcastCMD.HOSTER_LEAVE)} //通知其他观众离开
RtmManager.instance.sendChannelMessage(json.toString())//主播发送消息给房间所有人
RtmManager.release()//释放 rtm 引擎
RtcManager.release()//释放 rtc 引擎
离开房间的话,如果是主播,则发送一条频道消息通知所有人。观众的话,默默离开就行,不需要通知其他人。
以上简单5步,其实就已经实现了 ClubHouse 语音模块主要功能。上面都是示例代码,完整代码可以在文章结尾找到。
更好的体验
只是快速的做出一个语音连麦产品是远远不够的,质量方面我们也是要做到极致的。针对语音互动连麦场景我们进行了优化。
1、优秀的音质
语音连麦最重要的就是声音。声音是否清楚,声音还原度高不高,说话的时候会不会出现卡顿、不清晰、有噪声的情况,这些问题都是判断一个语音连麦软件是否优秀的重要因素。
针对以上问题,anyRTC通过领先的 3A 算法,智能适应各类环境,全面消除回声,并提供超一流的双讲表现;可在不损伤语音音质的情况下,有效消除各类噪音;可实现音频的自动增益,即使在嘈杂环境下用户也能体验优异。
2、多人通讯流控
语音连麦很多情况下都是多人同时在线聊天的场景,如果出现多人同时开闭麦、上下麦的情况,可能会出现影响他人观感的问题。
anyHouse可以在多人通讯环境,既保证重要通话的清晰度,又要兼顾他人的体验。我们使用了两套策略:在决策空间有限的情况下使用人工智能进行流控;在更复杂的场景下提供基于主观体验调整策略。
3、弱网支持
网络环境问题一直是影响语音通话质量的一个重要因素。所在地区的网络情况是否良好,如果从一个网络良好的地点去到一个弱网环境下,软件能否正常运行,就像进入地铁,电梯等场景。此外如果用户在国外,是否也能像在国内一样正常使用软件,也是非常重要的一点。
anyRTC通过就近接入、动态路由、丢包重传,实现弱网高质量通信,70%丢包仍可正常通信。全球多点覆盖,保障美洲、欧洲、亚洲等海外用户实时高清通话,特别针对东南亚、中东、北美和国内中小城市做网络优化。保证在世界各地都能正常的使用软件。
anyHouse下载体验
anyHouse源码下载地址:https://github.com/anyRTC-UseCase/anyHouse
标签:ClubHouse,用户,全新,json,语聊,rtcEngine,语音,action,搭建 来源: https://blog.51cto.com/u_15232255/2825530