输入关键词搜索,支持 AI 答疑

实现语聊房(基于底层能力)

更新时间: 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

创建聊天室

  1. 调用创建聊天室服务端 API 接口,创建聊天室。

  2. 调用初始化队列服务端 API 接口,初始化队列。

  3. 调用创建房间服务端 API 接口,创建并维护多人音频房间。

    您也可以通过客户端接口创建多人音频房间。

初始化 SDK

  1. 初始化并登录 IM。

    您可以参考快速开始,完成 IM SDK 初始化,并配置登录方式,登录 IM。

  2. 调用进入聊天室接口加入聊天室。

  3. 通过 setAudioProfile 方法设置音频参数和属性。

    您可以根据对音质、声道、场景等的不同需求,选择不同的音频属性,获得最佳实时互动效果。

    // 在初始化之前设置
    [[NERtcEngine sharedEngine] setAudioProfile:profile scenario:scenario]
    
  4. 初始化音视频通话 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];
    ...
    
  5. 在指定的通话界面中实现监听。

    注册 NERtcEngineDelegate,并实现监听方法。

房间内操作

  1. 调用 joinChannelWithToken 接口加入房间。

    - (int)joinChannelWithToken:(NSString *)token                
            channelName:(nullable NSString *)channelName                     
            myUid:(uint64_t)uId                 
            completion:(NERtcJoinChannelCompletion)completion;
    @end
    

    注意

    • 如果您已调用服务端 API 创建了房间,客户端可以直接加入房间,若没有已存在的房间,SDK会自动创建。
    • uid 是您自行生成的一个 long 类型的数据,作为用户唯一标识,这个 uid 需要在音频房间内唯一。后续的房间内用户相关的回调均会绑定这个 uid,但是它与聊天室的 accid 是两套体系。您需要在业务层维护业务绑定关系。
  2. 在语音聊天室中开始多人语音。

    观众加入房间之后,需要先主动关闭自己的音频采集,然后在上麦成功之后打开即可。

    - (int)enableLocalAudio:(BOOL)enabled
    
  3. 通过 NERtcEngineDelegateEx 监听回调。

  4. 麦序管理。

    • 连麦者通过发送点对点自定义系统通知,主播端同意(或者代码直接同意实现鉴权),然后将连麦者添加到队列元素中;或者主播拒绝连麦申请,并将这个结果通过自定义系统通知发送回连麦申请方。
    • 申请方收到同意的自定义系统通知之后,本地调用 enableLocalAudio 即可参与互动。业务层需要处理 UI 展示的逻辑。
    • 当聊天室队列发生更新时,会向聊天室内所有成员下发一条聊天室通知消息,客户端监听后做相应的 UI 处理。

退出房间

  1. 下麦。

    根据上麦的方式,对应的取出聊天室队列中自己的元素。这个操作也会触发队列变更通知

  2. 调用接口 leaveChannel 离开房间。

    //UI 挂断按钮事件- (IBAction)onHungupAction:(UIButton *)sender {
    [NERtcEngine.sharedEngine leaveChannel];
    [self dismiss];
    }
    
  3. 调用接口 destroyEngine 销毁音视频实例。

    在收到 onNERtcEngineDidLeaveChannelWithResult 之后执行:

    - (void)dealloc {
        [NERtcEngine destroyEngine]; //销毁实例
    }
    

进阶功能

混音及音效

加入房间后,调用 startAudioMixingWithOption 方法,可以播放音乐文件,实现播放背景音乐的功能,也可以播放音效文件,实现鼓掌、欢呼、尖叫等氛围音效果。离开房间前调用 stopAudioMixing 方法,结束播放。

耳返

调用 enableEarback 方法开启主播的耳返功能。

通话质量监测

使用 NERtcEngineMediaStatsObserver 回调,将关键的音视频状况、网络状况、设备状态的相关指标实时回调给APP应用层,监测通话的整体体验。

此文档是否对你有帮助?
有帮助
去反馈
  • 前提条件
  • 示例项目源码
  • 操作步骤
  • 集成 SDK
  • 创建聊天室
  • 初始化 SDK
  • 房间内操作
  • 退出房间
  • 进阶功能
  • 混音及音效
  • 耳返
  • 通话质量监测