导读: 年初的时候因为马斯克的一场直播带货,让 ClubHouse 迅速出圈变成现在炙手可热的社交产品。开个玩笑。现在要是没有用过ClubHouse你都不好意思说自己是互联网行业的。(不过目前中国市场已下架) 是的,这个圈子就是这么的追逐潮流。语音社交平台并不是什么新鲜产品,那么为什么ClubHouse能够爆火呢?我们简单梳理一下。

分析ClubHouse 爆火的原因

  1. 首先 ClubHouse 一直没用开放注册,用户需要通过官方发送的邀请码才能进入,一个用户只能邀请两个新用户,且目前只有 iOS 版本,而邀请码一般都在一些媒体人,产品经理,技术大拿手上,所以初期保证了 ClubHouse 头部用户的优良性。

  2. 当用户进入ClubHouse 后可以选择几个自己喜欢的话题,然后这些话题的聊天室会出现在你的首页。ClubHouse 的聊天房间只能语音沟通,不能发送文字、图片、视频等其他形式的内容。听众在语音房内只能听主持人和嘉宾聊天,或者举手上麦发言,不能打赏礼物,弹幕互动等等。用户在房间内就是聊天、分享、倾听,遇到感兴趣的人可以关注。

  3. 其实语聊场景的社交软件在国内已经拓展了多种玩法,只是针对的场景都是主打“娱乐社交”,主播+打赏机制,这些玩法以及运营方式跟ClubHouse 背道而驰,ClubHouse 是一个语音聊天室。所有人只能通过语音交流,不能打字,也不能发图、发视频。就如同它的名字:一个办 club(俱乐部)的 house,一个社群空间。
    ClubHouse 有着大量优质的用户,并且目前产品涌入了大量的创投圈的大佬,不时开设房间分享创业经验及投资观念,并且整体素质较高,用户之间都极为注重礼仪,就算是做打发闲暇时间的背景音也都是一个不错选择。由此可见软件的定位吸金方式也不在单靠娱乐的方式切入,商业的模式正向多元化多样化发展。

从技术角度,做一个 ClubHouse 难吗?

其实非常简单,我们已经推出了仿 ClubHouse 语音模块的 demo - anyHouse,得益于 anyRTC 音视频 SDK 和anyRTC 实时信令 SDK 的良好封装。实现 ClubHouse 的核心语聊模块,包括举手,邀请上台等,其实很简单。

下面再为大家介绍一下5步快速搭建 anyHouse。

  1. 房主创建并加入房间
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) //加入频道

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

  1. 听众加入房间
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) //加入频道

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

  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

简单快速搭建,全新语聊方案相关推荐

  1. 程序员是怎么快速搭建专属语聊房的

    1 语聊房应用场景说明 七夕礼物准备好了吗?程序猿七夕礼物标配,给女友搭建专属语聊房,既浪漫又硬核! 语聊房在社交场景中使用比较广泛,社交APP中的语聊房场景的实现,主要由业务系统和移动/Web 客户 ...

  2. 程序猿七夕礼物-如何30分钟给女友快速搭建专属语聊房

    1 语聊房应用场景说明 七夕礼物准备好了吗?程序猿七夕礼物标配,给女友搭建专属语聊房,既浪漫又硬核! 语聊房在社交场景中使用比较广泛,社交APP中的语聊房场景的实现,主要由业务系统和移动/Web 客户 ...

  3. test.php创建,基于phpstudy简单快速搭建一个php程序

    原标题:基于phpstudy简单快速搭建一个php程序 人人都是程序员,希望在零碎的阅读时间里,给您一些技术提升. 1 安装phpstudy 通过以下链接download.csdn.net/downl ...

  4. python服务器搭建nginx_Nginx简单快速搭建文件服务器

    前言 在之前的一篇博文中介绍了Nginx负载均衡的实现,本篇文章就简单介绍下如何用Nginx搭建一个文件服务器. Nginx安装 Nginx配置 Nginx的配置这块和普通的一样就可以了,只要在ngi ...

  5. 如何简单快速搭建自己的云对象存储服务(OSS)

    简单来说,其实我们只需要有一台服务器,利用服务器的各种资源,搭配其它厂商开发的软件,就能很轻易拥有自己的云对象存储服务.不需要在阿里云上花钱买什么服务,甚至还能自己给别人提供服务,真的是太爽了. 云对 ...

  6. Win7下快速搭建hadoopEclipse运行环境--方案

    apache提供了 Linux下开发hadoop教程,不多说 网上有很多参考资料,说法不一 自己总结下思路,希望能对喜欢hadoop的兄弟姐妹有所帮助: 硬件:win7 step 1. 安装1.6以上 ...

  7. 利用Vue-cli3简单快速搭建前端项目架构

    安装 如果在电脑上已经安装了vue-cli2.0如果想要把其替换成vue-cli3.0的话需要先卸载原有vue-cli2.0的版本. npm uninstall vue-cli -g 卸载完成之后就直 ...

  8. 使用SpringBoot一小时快速搭建一个简单后台管理(增删改查)(超详细教程)

    最近也是临近期末了,各种的期末大作业,后台管理也是很多地方需要用到的,为了方便大家能快速上手,快速搭建一个简单的后台管理,我花了两天时间整理了一下 我会从0开始介绍,从数据库的设计到前端页面的引入最后 ...

  9. 程序员的硬核浪漫 — 女友专属语聊房(内附源码)

    人人都说找个程序猿做男朋友就是好,钱多话少 over 早. 额...估计小编把文章发布出去后就要被公司的程序猿同胞们疯狂逮捕挨打了. 虽然日常生活中大家对程序猿的标签大多是呆板.木讷.不懂浪漫,格子衫 ...

最新文章

  1. php10-e 豪华版,华为畅享 10e 规格参数
  2. python学习--for循环详解
  3. 直播预告丨爆款独立站如何利用数据提升经营效率?
  4. golang网络编程
  5. 代码质量检测平台架构设计
  6. 关于树的父子节点的图形化展示
  7. 调用servlet java_请问调用servlet并从JavaScript调用Java代码以及参数
  8. 孙鑫VC学习笔记:第十二讲 (五) 往win.ini的文件中写入数据
  9. 《数字孪生体技术白皮书》重磅发布(附完整版下载)
  10. FlexSim软件PF模块标识详细解释
  11. C# 一些學習小筆記及技巧
  12. L2TP更改网络运营商后导致连接不了
  13. NMOS和PMOS管 电流方向和应用电路
  14. Windows操作系统查看电脑开关机记录
  15. Java Servlet3.0使用getPart/getParts实现单文件和多文件上传
  16. OSChina 周日乱弹 ——颜值和代码水平是正比
  17. 聚百川之源,欢迎28位AI开发者加入飞桨开发者技术专家计划!
  18. Scratch案例-冒泡排序
  19. java程序员具体是做什么的?我来分享一天的工作内容
  20. 项目管理领域关键知识点之横道图和网络图

热门文章

  1. php 图片 字母识别,PHP+百度AI OCR文字识别实现了图片的文字识别功能
  2. 大端小端模式及其判别方式
  3. 站长工具查询的百度权重值,就是忽悠站长
  4. 浪潮服务器NF5468M6硬件
  5. char 型变量中能不能存一个中文汉字?
  6. windows环境安装好了virtualenvwrapper,pycharm中workon命令用不了
  7. 在亚马逊开店的注意事项—跨海汇
  8. python中如何调用类的方法
  9. Windows CMD PowerShell ,Set-Location : 找不到接受实际参数“Hub\resources”的位置形式参数。
  10. 分享个热血三国手游辅助工具,可玩各种slg游戏,多开切号