写点什么

简单快速搭建,全新语聊方案

发布于: 2021 年 03 月 24 日
简单快速搭建,全新语聊方案

导读: 年初的时候因为马斯克的一场直播带货,让 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。

  1. 房主创建并加入房间

rtcEngine = RtcEngine.create(context, BuildConfig.APPID,RtcEvent()) //初始化 SDKrtcEngine.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING) //设置房间类型为主持人模式rtcEngine.setClientRole(Constants.CLIENT_ROLE_BROADCASTER) //设置角色为主持人rtcEngine.joinChannel(channelToken,channelId,"",userId) //加入频道
复制代码

房主加入频道后,将会自动发布音频,房间内的其他听众将可以听到房主的语音。



  1. 听众加入房间

rtcEngine = RtcEngine.create(context, BuildConfig.APPID,RtcEvent()) //初始化 SDKrtcEngine.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING) //设置房间类型为主持人模式rtcEngine.setClientRole(Constants.CLIENT_ROLE_BROADCASTER) //设置角色为游客rtcEngine.joinChannel(channelToken,channelId,"",userId) //加入频道
复制代码

听众将身份设置成游客进入房间后,将会自动订阅房主的音频。这样最基本的语音直播场景就完成了。那怎么完成主持人和听众之间的互动呢?接下来看。



  1. 听众举手/取消举手/房主邀请上台

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) //将身份变成主播 则会自动发布音频
复制代码



  1. 房主控制上台发言者麦克风

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) //关闭麦克风            }      }}
复制代码

通过实时信令,还可以做很多场景。



  1. 离开房间

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


用户头像

实时交互,万物互联! 2020.08.10 加入

实时交互,万物互联,全球实时互动云服务商领跑者!

评论 (1 条评论)

发布
用户头像
博主写的很棒,收藏了!
2021 年 03 月 24 日 14:24
回复
没有更多了
简单快速搭建,全新语聊方案