====== 抢麦模式 ====== 前言:本文将简要分享语音聊天室中抢麦玩法的的应用场景,并讲述基于环信语聊解决方案,实现抢麦玩法的步骤。 **注:**环信语聊解决方案是基于环信 **SDK 3.6.0** 及以上实现,开发者如需实现,需将 SDK 更新到支持版本。 前段时间一款名为“音遇”的 APP 突然火了,以黑马之姿频繁登上各大榜单。据七麦数据统计,上线不到三个月,音遇总下载量达650万,这一增速仍在保持。从数据来看,音遇似乎将社交 APP 带到了一个风口。 音遇的确好玩,因为它的本质是游戏。音遇的核心玩法是劲歌抢唱和热歌接唱,形式是6人抢唱和6人接唱+抢唱,该核心功能基于用户更好地参与互动和享受竞技游戏来打造体验,而不是基于如何更好地唱歌来打造。 整场游戏下来,用户体验到的,是手速不够快、抢不到歌的遗憾,是听到各种或惊艳或车祸的现场的赞叹或调侃,是跟用户的互动,是胜利后的意犹未尽等等,反倒很容易忘了唱歌本身的好坏。我们体验到的,是这款游戏带给我们的乐趣,而不是唱歌本身。所以,用户在音遇上的游戏体验大于享受音乐的体验。 音遇重点是通过竞技游戏打造用户体验,让用户在游戏的过程中更“嗨”,更“带感”。 {{ :im:other:integrationcases:音遇.png?nolink&200 |}} 总结来说,音遇的火热和“劲歌抢唱”这种模式密切相关。“劲歌抢唱”其实就是在语音聊天室的基础上的一种“抢麦”玩法。环信语聊解决方案,针对“抢麦”玩法的实现已经为开发者给出了方案。 在抢麦模式下,只有抢到麦的主播可以发言,由 AppServer 来决定是否抢到麦,当房主发起抢麦时,首先请求 AppServer , AppServer 确定主播可以抢麦,返回成功的同时,AppServer 开始计时,在计时结束前或者抢到麦的主播主动释放麦之前,其他主播请求 AppServer 抢麦返回失败。主播抢到麦后,修改会议属性,告知所有人自己抢到了,同时开始倒计时,倒计时结束后,主动重新设置会议属性,告诉所有人自己释放麦。其他人收到抢麦的会议属性变化回调后更新 UI,并开始倒计时,在倒计时结束或者收到释放麦的会议属性变化前,所有人不可以发起抢麦操作。 我们可以通过一张图,来了解抢麦模式中接口的调用逻辑: {{:im:other:integrationcases:抢麦模式1.png?nolink|}} 上图中每步涉及到的 iOS/Android 接口如下,其中部分调用到了 AppServer 的接口,开发者需要自己实现 AppServer 功能 ^步骤^%%iOS API%%^%%Android API%%^ |1.设置抢麦会议属性|[[http://www.easemob.com/apidoc/ios/chat3.0/protocol_i_e_m_conference_manager-p.html#a7e29cc54c08e9cab13a3b58df89eea80|EMClient.sharedClient.conferenceManager setConferenceAttribute: value: completion: ]]|[[http://www.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1chat_1_1EMConferenceManager.html#a785be01c2f30dbe661fb91c9c8cac7a9|EMClient.getInstance().conferenceManager().setConferenceAttribute(key, value, callback);]]| |2.广播抢麦会议属性|[[http://www.easemob.com/apidoc/ios/chat3.0/protocol_e_m_conference_manager_delegate-p.html|EMConferenceManagerDelegate#-conferenceAttributeUpdated:attributes:]] |[[http://www.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1chat_1_1EMConferenceAttribute.html|EMConferenceListener#onAttributesUpdated(attributes);]]| |3.主播向AppServer发起抢麦请求|%%AppServer API%%|| |4.返回抢麦成功结果|%%AppServer API%%|| |5.主播改变会议属性|[[http://www.easemob.com/apidoc/ios/chat3.0/protocol_i_e_m_conference_manager-p.html#a7e29cc54c08e9cab13a3b58df89eea80|EMClient.sharedClient.conferenceManager setConferenceAttribute: value: completion: ]]|[[http://www.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1chat_1_1EMConferenceManager.html#a785be01c2f30dbe661fb91c9c8cac7a9|EMClient.getInstance().conferenceManager().setConferenceAttribute(key, value, callback);]]| |6.广播会议属性|[[http://www.easemob.com/apidoc/ios/chat3.0/protocol_e_m_conference_manager_delegate-p.html|EMConferenceManagerDelegate#-conferenceAttributeUpdated:attributes:]] |[[http://www.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1chat_1_1EMConferenceAttribute.html|EMConferenceListener#onAttributesUpdated(attributes);]]| |7.抢麦者说话,其他人闭麦|[[http://www.easemob.com/apidoc/ios/chat3.0/protocol_i_e_m_conference_manager-p.html#abc3d1658875a99bdd1f5f1158a74e789|EMClient.sharedClient.conferenceManager updateConference: isMute:]]|[[http://www.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1chat_1_1EMConferenceManager.html#a7b4bd022d9daf8fe127d89494897bf99|EMClient.getInstance().conferenceManager().openVoiceTransfer();EMClient.getInstance().conferenceManager().closeVoiceTransfer();]]| |8.释放麦,改变会议属性|[[http://www.easemob.com/apidoc/ios/chat3.0/protocol_i_e_m_conference_manager-p.html#a7e29cc54c08e9cab13a3b58df89eea80|EMClient.sharedClient.conferenceManager setConferenceAttribute: value: completion: ]]|[[http://www.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1chat_1_1EMConferenceManager.html#a785be01c2f30dbe661fb91c9c8cac7a9|EMClient.getInstance().conferenceManager().setConferenceAttribute(key, value, callback);]]| |9.广播会议属性|[[http://www.easemob.com/apidoc/ios/chat3.0/protocol_e_m_conference_manager_delegate-p.html|EMConferenceManagerDelegate#-conferenceAttributeUpdated:attributes:]] |[[http://www.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1chat_1_1EMConferenceAttribute.html|EMConferenceListener#onAttributesUpdated(attributes);]]| 基于语音聊天室的抢麦玩法,不止音遇这一种玩法,还有更多想象的空间,开发者可基于环信解决方案衍生出更多玩法。 ----