实现语聊房(基于底层能力)
更新时间: 2024/11/26 15:44:05
本文档为您展示通过 SDK 实现语音聊天室场景的相关步骤,帮助您在业务中实现麦位管理、低延时语音互动、文字聊天等 IM 和音视频通话 2.0 在语音聊天场景下的相关能力。
前提条件
-
已在控制台创建应用,并获取了应用对应的 App Key。
-
已成功开通 IM 即时通讯产品的聊天室功能、音视频通话 2.0 产品。
聊天室功能需单独开通,若有需要,请联系您的对应销售或技术支持人员。
示例项目源码
操作步骤
集成 SDK
请参考下表,将相应的 SDK 或服务集成到您的项目中。
产品 | SDK 下载 | 集成文档 |
---|---|---|
IM 即时通讯 | IM SDK | 集成 SDK |
音视频通话 2.0 | NERTC SDK | 集成 SDK |
创建聊天室
-
调用创建聊天室服务端 API 接口,创建聊天室。
-
调用初始化队列服务端 API 接口,初始化队列。
-
调用创建房间服务端 API 接口,创建并维护多人音频房间。
您也可以通过客户端接口创建多人音频房间。
初始化 SDK
-
初始化并登录 IM。
您可以参考快速开始,完成 IM SDK 初始化,并配置登录方式,登录 IM。
-
调用进入聊天室接口加入聊天室。
-
通过 setAudioProfile 方法设置音频参数和属性。
您可以根据对音质、声道、场景等的不同需求,选择不同的音频属性,获得最佳实时互动效果。
// 在初始化之前设置 [[NERtcEngine sharedEngine] setAudioProfile:profile scenario:scenario]
-
初始化音视频通话 2.0 SDK。
您可以参考快速入门初始化音视频通话 2.0 SDK。
@interface Myapp ()<NERtcEngineDelegateEx> ...NERtcEngine *coreEngine = [NERtcEngine sharedEngine]; NERtcEngineContext *context = [[NERtcEngineContext alloc] init]; context.engineDelegate = self; context.appKey = AppKey; [coreEngine setupEngineWithContext:context]; ...
-
在指定的通话界面中实现监听。
注册
NERtcEngineDelegate
,并实现监听方法。
房间内操作
-
调用 joinChannelWithToken 接口加入房间。
- (int)joinChannelWithToken:(NSString *)token channelName:(nullable NSString *)channelName myUid:(uint64_t)uId completion:(NERtcJoinChannelCompletion)completion; @end
注意:
- 如果您已调用服务端 API 创建了房间,客户端可以直接加入房间,若没有已存在的房间,SDK会自动创建。
- uid 是您自行生成的一个 long 类型的数据,作为用户唯一标识,这个 uid 需要在音频房间内唯一。后续的房间内用户相关的回调均会绑定这个 uid,但是它与聊天室的 accid 是两套体系。您需要在业务层维护业务绑定关系。
-
在语音聊天室中开始多人语音。
观众加入房间之后,需要先主动关闭自己的音频采集,然后在上麦成功之后打开即可。
- (int)enableLocalAudio:(BOOL)enabled
-
通过 NERtcEngineDelegateEx 监听回调。
-
麦序管理。
- 连麦者通过发送点对点自定义系统通知,主播端同意(或者代码直接同意实现鉴权),然后将连麦者添加到队列元素中;或者主播拒绝连麦申请,并将这个结果通过自定义系统通知发送回连麦申请方。
- 申请方收到同意的自定义系统通知之后,本地调用
enableLocalAudio
即可参与互动。业务层需要处理 UI 展示的逻辑。 - 当聊天室队列发生更新时,会向聊天室内所有成员下发一条聊天室通知消息,客户端监听后做相应的 UI 处理。
退出房间
-
下麦。
根据上麦的方式,对应的取出聊天室队列中自己的元素。这个操作也会触发队列变更通知。
-
调用接口 leaveChannel 离开房间。
//UI 挂断按钮事件- (IBAction)onHungupAction:(UIButton *)sender { [NERtcEngine.sharedEngine leaveChannel]; [self dismiss]; }
-
调用接口 destroyEngine 销毁音视频实例。
在收到
onNERtcEngineDidLeaveChannelWithResult
之后执行:- (void)dealloc { [NERtcEngine destroyEngine]; //销毁实例 }
进阶功能
混音及音效
加入房间后,调用 startAudioMixingWithOption 方法,可以播放音乐文件,实现播放背景音乐的功能,也可以播放音效文件,实现鼓掌、欢呼、尖叫等氛围音效果。离开房间前调用 stopAudioMixing 方法,结束播放。
耳返
调用 enableEarback 方法开启主播的耳返功能。
通话质量监测
使用 NERtcEngineMediaStatsObserver 回调,将关键的音视频状况、网络状况、设备状态的相关指标实时回调给APP应用层,监测通话的整体体验。