通过阅读本文,您可以了解语音聊天室iOS端的集成操作。

环境要求

iOS端具体环境要求,更多信息,请参见使用限制

前提条件

  • 服务端已集成并开启。具体操作,请参见服务端集成
  • 环境中已安装Xcode 9.0或以上版本,更多信息,请参见Xcode
  • 您需要持有Apple开发证书或个人账号。

操作步骤

  1. 下载并解压Demo,更多信息,请参见Demo源码下载
    说明
    • Demo源码中没有集成iOS AliRTC SDK,需要手动进行集成。
    • 源码压缩文件内分为Server端、Android端、iOS端三个文件。
    • 如果GitHub代码库下载缓慢,可安装加速插件等方式加速下载。
  2. 下载并解压SDK
  3. 打开终端,定位到Podfile文件所在的目录,执行pod install命令。
    安装成功如下图所示。安装后生成的Pods文件夹已在iOS目录下。 Pod下载
  4. 替换SDK。
    步骤二解压的 AliRTCSdk.framework文件,替换掉 步骤三安装后生成的 Pods/AliRTCSdk/AliRTCSdk.framework文件。 替换AliRTCSdk
  5. 配置Demo工程。
    1. 打开iOS/RTCCommon/⁨AppConfig.h⁩文件。
    2. 修改文件中的kBaseUrl值。

      例如本地服务端IP地址为192.0.2.1,则kBaseUrl的值为http://192.0.2.1:8080/。本地服务端IP地址查询,请参见查询IP地址

      配置路径
      注意
      • 服务端IP地址禁止使用127.0.0.1。
      • 移动端和服务端处于同一局域网中。
      • 如果需要部署到正式环境,请绑定域名即kBaseUrl的值为http://<域名>/
    3. 验证移动端和服务端。

      分别在移动端和服务端浏览器中访问http://<服务器IP> :8080/chatroom地址,如果显示如下图所示,表示移动端访问服务端正常。

      验证
  6. 运行Demo。
    1. 使用Xcode打开iOS目录下的RTCSolution.xcworkspace工程文件。
    2. 选择运行的Target为RTCSolution,然后将iOS设备与电脑有线连接,并在Xcode中选择相对应的设备(暂不支持模拟器运行)。
      选择Target
    3. 单击General页签,修改Bundle Identifier,建议将Bundle Identifier改成com.<公司名>.<项目名>,避免由于Bundle已被注册从而运行失败。
      General修改Bundle
    4. 单击Signing & Capabilities页签,选中Automatically manage signing,然后单击Team下拉框,根据实际情况选择Team。
      选择Team
      说明 如果之前没有添加过账号,可以选择 Add an Account...,根据提示添加账号,然后在此处选择新添加的账号。
    5. 单击004,编译并运行。如果编译过程中出现问题或无法正常通话,请参见iOS端运行常见问题
      编译
  7. 加入语音聊天室。
    1. 将2台或2台以上移动端设备安装Demo App。
    2. 将设备连接到同一局域网下,保证可以连接到Server端。
    3. 在第一台设备上输入任意房间号和昵称,选择角色进入语聊房并等待他人加入。
    4. 在其余设备上输入相同房间号和任意昵称(可同名,不做限制),选择角色加入房间并进行聊天。

Demo目录结构说明

RTC把开发的业务代码封装到RTCAudioLiveRoom库中,因此只需在Podfile中指定RTCAudioLiveRoom库的路径,RTCAudioLiveRoom就可以以本地第三方库的形式移植到其他项目中。如下所示:

#基础组件 :path 的路径为podfile 和 RTCCommon.podspec 的相对路径
pod 'RTCCommon', :path => 'RTCCommon/'
 
#基础UI组件 :path 的路径为podfile 和 RTCCommonView.podspec 的相对路径 
pod 'RTCCommonView', :path => 'RTCCommonView/'
 
#语聊房 :path 的路径为podfile 和 RTCAudioLiveRoom.podspec 的相对路径
pod 'RTCAudioLiveRoom', :path => 'RTCAudioLiveRoom/'

RTCAudioLiveRoom组件库目录说明,如下所示:

路径

API说明

表 1. 功能实现接口
API 描述
sharedInstance 获取单例对象。
destroySharedInstance 销毁实例对象。
login 加入频道。
logout 退出频道。
enterSeat 上麦。
leavelSeat 下麦。
renotifySeatsInfo 重新通过回调通知座位信息。
muteLocalMic 静音或取消静音。
muteAllRemoteAudioPlaying 关闭或开启远端声音。
startAudioAccompanyWithFile 播放背景音乐。
stopAudioAccompany 停止播放背景音乐。
setAudioAccompanyVolume 设置伴奏音量。
playEffectSoundtWithSoundId 播放音效。
stopAudioEffectWithSoundId 停止播放音效。
setAudioEffectPlayoutVolumeWithSoundId 设置音效的音量。
enableEarBack 设置耳返。
setAudioEffectReverbMode 设置混响模式。
setAudioEffectVoiceChangerMode 设置音效混响模式。
表 2. 回调接口
API 描述
onEnterSeat 远端用户上麦通知。
onLeaveSeat 远端用户下线通知。
onRoomDestory 房间被销毁通知。
onSeatVolumeChanged 音量变化通知。
onSeatMutedChanged 静音或取消静音变化通知。

功能实现接口

  • 获取单例对象。
    // 单例模式 初始化RTCAudioliveRoom
    RTCAudioliveRoom *manager = [RTCAudioliveRoom sharedInstance];
    //设置代理对象
    manager.delegate = vc
  • 销毁实例对象。
    [self.manager destroySharedInstance];
  • 加入频道。
    /// 加入频道
    /// @param channelId   频道名称
    /// @param name    任意用于显示的用户名称。不是User ID
    /// @param role   角色
    /// @param handler   回调
    
     [self.manager login:@"频道名称"
                       name:@"用户昵称"
                       role:@"角色"
                   complete:^(AliRtcAuthInfo * _Nonnull authInfo, NSInteger errorCode) {
            if (authInfo)
            {
                //加入房间成功
                // ....
                return;
            }
            //加入房间失败
        }];
  • 退出频道。
    [self.manager logout];
  • 上麦。
    [self.manager enterSeat];
  • 下麦。
    [self.manager leavelSeat];
  • 重新通过回调通知座位信息。
    [self.manager renotifySeatsInfo];
  • 静音或取消静音。
    //静音
    [self.manager muteLocalMic:YES];
    
    //取消静音
    [self.manager muteLocalMic:NO];
  • 关闭或开启远端声音。
    //关闭远端声音
    [self.manager muteAllRemoteAudioPlaying:YES];
    
    //开启远端声音
    [self.manager muteAllRemoteAudioPlaying:NO];
  • 播放背景音乐。
    /// 播放背景音乐
    /// @param filePath 文件路径
    /// @param publish 是否推送远端
    
    [self.manager startAudioAccompanyWithFile:@"文件url" publish:YES];
  • 停止播放背景音乐。
    [self.manager stopAudioAccompany];
  • 设置伴奏音量。
    /// 设置背景音乐音量
    /// @param volume 音量 0~100
    
    [self.manager setAudioAccompanyVolume:100];
  • 播放音效。
    /// 播放音效
    /// @param soundId 音效id
    /// @param filePath 资源路径
    /// @param publish 是否推送远端
    
    [self.manager playEffectSoundtWithSoundId:111
                                  filePath:@"文件url"
                                  publish:YES];
  • 停止播放音效。
    [self.manager stopAudioEffectWithSoundId:111];
  • 设置音效的音量。
    [self.manager setAudioEffectPlayoutVolumeWithSoundId:111 volume:100];
  • 设置耳返。
    //开启耳返
    [self.manager enableEarBack:YES]; 
    //关闭耳返
    [self.manager enableEarBack:NO];
  • 设置混响模式。
    [self.manager setAudioEffectReverbMode:AliRtcAudioEffectReverb_Off];
  • 设置音效混响模式。
    [self.manager setAudioEffectVoiceChangerMode:AliRtcAudioEffectvVoiceChanger_OFF];

回调接口

  • 远端用户上麦通知。
    /// 远端用户上麦通知
    /// @param seat 麦序
    - (void)onEnterSeat:(SeatInfo *)seat;
  • 远端用户下线通知。
    /// 远端用户下线通知
    /// @param seat 麦序
    - (void)onLeaveSeat:(SeatInfo *)seat;
  • 房间被销毁通知。
    /// 房间被销毁通知
    - (void)onRoomDestory;
  • 音量变化通知。
    /// 音量变化通知
    /// @param seatIndex 麦序
    /// @param isSpeaking 是否在说话
    - (void)onSeatVolumeChanged:(NSInteger)seatIndex isSpeaking:(BOOL)isSpeaking;
  • 静音或取消静音变化通知。
    /// 静音/取消静音变化通知
    /// @param seatIndex 麦序
    /// @param mute 是否静音
    - (void)onSeatMutedChanged:(NSInteger)seatIndex mute:(BOOL)mute;