客户端实现(CDN)

更新时间: 2023/09/21 08:10:26

本文档为您展示通过 SDK 实现语音聊天室场景的相关步骤,帮助您在业务中实现麦位管理、低延时语音互动、文字聊天等 IM 和音视频通话 2.0、互动直播 2.0 在语音聊天场景下的相关能力。

前提条件

  • 已在控制台创建应用,并获取了应用对应的 App Key。

  • 已成功开通 IM 即时通讯产品的聊天室功能、音视频通话 2.0 产品、互动直播 2.0 产品。

    聊天室功能需单独开通,若有需要,请联系您的对应销售或技术支持人员。

方案架构

CDN方案架构1.png

主播和连麦者加入同一个RTC房间,观众通过拉流观看

操作步骤

集成 SDK

请参考下表,将相应的 SDK 或服务集成到您的项目中。

产品 SDK 下载 集成文档
IM 即时通讯 IM SDK 集成 SDK
音视频通话 2.0 和互动直播 2.0 NERTC SDK 集成 SDK
播放器
您也可以使用其他第三方播放器 SDK。
播放器 SDK 集成 SDK

创建聊天室

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

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

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

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

初始化 SDK

  1. 初始化并登录 IM。

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

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

    • 加入聊天室之后,主播和连麦者继续执行后续操作。
    • 观众可以通过聊天室信息的 broadcasturl 字段获取到拉流地址,通过播放器实现拉流收听。观众端逻辑到此即可。您可以参考开发准备,通过网易云信播放器 SDK 实现相关逻辑。
  3. 通过 setAudioProfile 方法设置音频参数和属性。

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

    NERtcEx.getInstance().setParameters(mRtcParameters); //先设置参数,后初始化NERtcEx.getInstance().setAudioProfile(mAudioProfile,mAudioScenario);//初始化前设置音频场景
    
  4. 初始化互动直播 2.0 SDK。

    您可以参考快速入门接口初始化互动直播 2.0 SDK。

    NERtcEx.getInstance().init(getApplicationContext(),Config.APP_KEY,this,null);
    
  5. 在指定的通话 Activity 中实现监听。

    public class MeetingActivity extends AppCompatActivity implements NERtcCallbackEx....
    
  6. 调用setChannelProfile设置直播模式。

    建议在加入房间前,设置房间模式为直播模式。当前默认为通信模式。

    // 0 - COMMUNICATION,  1 -LIVE_BROADCASTING
    NERtcEx.getInstance().setChannelProfile(1); 
    
  7. 调用setParameters设置推流开关。

    打开这个开关,加入房间的人就有参与互动直播推流的能力。但是需要主播或者管理员更新推流任务才能实现推流。

    mRtcParameters.set(NERtcParameters.KEY_PUBLISH_SELF_STREAM, true);
    NERtcEx.getInstance().setParameters(mRtcParameters); 
    

房间内操作

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

    public abstract int joinChannel(java.lang.String token,
                                    java.lang.String channelName,
                                                long uid);
    

    注意

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

    public void onLiveStreamState(String taskId, String pushUrl, int liveState);
    
  3. 调用接口addLiveStreamTask新增推流任务。

    • 语音聊天室场景中,liveMode 参数应设置为 audio。
    • 您也可以通过服务端 API 创建推流任务新增推流任务。
  4. 维护推流任务。

    • 语音聊天室场景中,一个房间内只需要一个推流任务,由主播端或服务器来维护。
    • 观众调用 setClientRole 方法上麦后,即连麦者加入房间后,在收到连麦者的 onNERtcEngineUserDidJoinWithUserID 之后,或者连麦者自己收到 NERtcJoinChannelCompletion 之后,主播客户端或者服务器 API 需要更新推流任务。
      • 服务端方式:主动上报APP业务服务器,调用更新推流任务实现。服务端维护推流任务,不受客户端异常情况的限制,如客户端异常退出,不影响房间的推流任务逻辑。
      • 客户端方式:直接使用 SDK 接口 updateLiveStreamTask 完成推流任务的更新,逻辑简单。
    • 当收到成员的 onUserJoined 之后,或者自己 onLeaveChannel 等,也做相应的更新推流任务的处理,将自己从推流任务的用户列表中移除。
  5. 在语音聊天室中开始多人语音。

    • 加入房间后默认发送音频流,无需手动开启。

      NERtc.getInstance().enableLocalAudio(Bool);
      
    • 音频设备管理。

      // 判断当前音频路由器。
      boolean isSpeakerphoneOn = NERtcEx.getInstance().isSpeakerphoneOn();
      // 设置音频路由。
      NERtcEx.getInstance().setSpeakerphoneOn(isSpeakerphoneOn);
      
  6. 连麦者上麦。

    1. 连麦者调用setClientRole方法将角色从观众切换到主播,通过发送点对点自定义系统通知,主播端同意、或者代码直接同意实现鉴权,即可将连麦者添加到队列元素中。若主播拒绝连麦申请,将这个结果通过自定义系统通知发送回连麦申请方。
    2. 申请连麦的人收到同意的自定义系统通知之后,需要先销毁音视频实例,并参考上文初始化 SDK 环节中的步骤 3~步骤 7,最后重新加入房间即可。
    3. 当聊天室队列发生更新时,会向聊天室内所有成员下发一条聊天室通知消息,客户端监听后做相应的UI处理。
  7. 通过 NERtcCallback 监听其他回调。

退出房间

  1. 下麦。

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

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

    NERtcEx.getInstance().leaveChannel();
    
  3. 调用接口 release 销毁音视频实例。

    NERtcEx.getInstance().release();
    

进阶功能

混音及音效

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

耳返

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

通话质量监测

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

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