实时语音通话

本文介绍如何快速集成 音视频SDK Android版本到项目中的方法。

1 前提条件

2 准备开发环境

本节介绍如何创建项目,添加相应的设备权限后,将 音视频SDK 集成至项目中。

2.1 创建项目

  1. 打开 Android Studio,点击 Start a new Android Studio project

  2. Choose your project 界面,选择 Phone and Tablet > Empty Activity,然后点击 Next

  3. Configure your project 界面,依次填入以下内容:

    • Name:你的 Android 项目名称,如 xxx
    • Package name:你的项目包的名称,如 xxx
    • Project location:项目的存储路径
    • Language:项目的编程语言,如 Java
    • Minimum API level:项目的最低 API 等级
  4. 然后点击 Finish。根据屏幕提示,安装可能需要的插件。

2.2 引入库文件

  1. 修改项目外层build.gradle 文件,添加仓库路径(两处)
buildscript {
    repositories {
        ......
        maven { url "http://nexus.jocloud.com:8081/nexus/content/groups/public/" }
        ......
    }
}

allprojects {
    repositories {
        ......
        maven { url "http://nexus.jocloud.com:8081/nexus/content/groups/public/" }
        ......
    }
}
  1. 修改 app 下的 build.gradle 文件,添加指定的SDK版本。
dependencies{  
	implementation "com.rtc.thunder:thunder:X.Y.X" //X.Y.X对应的是SDK版本号   
}    
  1. 如果应用编译时开启混淆,需要防止混淆,在规则文件proguard-rules.pro中添加以下内容,这样可以防止混淆库中的公共类名称:
-keep class com.rtc.thunder.** { *; } 

2.3 添加项目权限

为保证 SDK 正常运行,引用库后需在 AndroidManisfest.xml 文件中加入以下权限:

    //添加权限
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

    //添加软件特征
    <uses-feature android:name="android.hardware.audio.low_latency" />
    <uses-feature android:name="android.hardware.audio.pro" />
    <uses-feature android:name="android.hardware.microphone" android:required="true" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-feature android:name="android.hardware.camera" android:required="true" />
    <uses-feature android:name="android.hardware.camera.front" android:required="true" />

3 实时语音通话

本节介绍如何实现语音通话。语音通话的 API 调用时序见下图:

3.1 创建SDK实例

在调用 音视频SDK API 前,需要创建并初始化 ThunderEngine 对象。调用 createEngine 方法,传入获取到的 App ID 和 场景ID ,即可初始化 ThunderEngine。

// appId 为应用程序开发者签发的appID
// sceneId 开发者自定义场景Id,用以戏份业务场景;如果不需要,可以填0
// thunderEventHandler 回调对象
thunderEngine = ThunderEngine.createEngine(context, appId, sceneId, thunderEventHandler);

3.2 设置媒体模式和房间场景模式

SDK 的媒体模式分为:纯音频和音视频两种媒体模式,需要在进房间前调用 setMediaMode 方法,进房间后调用无效,不调用默认为音视频模式。

// THUNDER_PROFILE_DEFAULT(0)	    默认为音视频模式
// THUNDER_PROFILE_NORMAL(1)	    音视频模式(同时使用音频和视频)
// THUNDER_PROFILE_ONLY_AUDIO(2)	纯语音模式(无视频场景建议使用,获取更佳音频性能)
thunderEngine.setMediaMode(THUNDER_PROFILE_ONLY_AUDIO);

SDK 需知道应用程序的使用场景(例如通信模式或直播模式),从而使用不同的优化手段,使用 setRoomMode 方法,设置房间模式。

// THUNDER_ROOMCONFIG_LIVE(0)	直播模式,质量优先,时延较大,适合观众或者听众场景;
//                              观众开播音视频变为主播时自动切换为通信模式
// THUNDER_ROOMCONFIG_COMMUNICATION(1)	通信模式,追求低延时和通话流畅,适用于1v1通话和多人聊天
// THUNDER_ROOMCONFIG_MULTIAUDIOROOM(4)	语音房模式,追求低延时和低带宽占用,适用于多人语音房间
thunderEngine.setRoomMode(THUNDER_ROOMCONFIG_MULTIAUDIOROOM);

3.3 加入房间

在完成初始化后,可以调用 joinRoom 方法加入房间。需要在该方法中传入如下参数:

  • token:传入能标识用户角色和权限的Token
  • roomName:房间名称(需保证一个AppId内唯一),只支持[A,Z],[a,z],[0,9],-,_等字符的排列组合,且长度不能超过64个字节
  • uid:用户ID,只支持[A,Z],[a,z],[0,9],-,_等字符的排列组合,且长度不能超过64个字节
thunderEngine.joinRoom(token, roomName, uid);

3.4 音频开播

加入房间后,可以通过 stopLocalAudioStream 进行音频开播,发送本地音频流。需要在该方法中传入如下参数:

  • stop:开/关本地音频发送,需要接收到onJoinRoomSuccess回调后才能正常开启发送(默认为关闭状态)
// 打开本地音频发送(false)
thunderEngine.stopLocalAudioStream(false);

注意:
加入房间成功后,会自动订阅音视频流,当频道内有其他用户开播/关播后,会收到 onRemoteAudioStopped 的回调通知。

3.5 音频停播

加入房间后,可以通过 stopLocalAudioStream 进行音频开播,发送本地音频流。需要在该方法中传入如下参数:

  • stop:开/关本地音频发送,需要接收到onJoinRoomSuccess回调后才能正常开启发送(默认为关闭状态)
// 关闭本地音频发送(true)
thunderEngine.stopLocalAudioStream(true);

3.6 离开房间

可以通过 leaveRoom 方法离开当前房间。不管当前是否在通话中,都可以调用,且没有副作用。该方法会把会话相关的所有资源释放掉。

// 离开房间
thunderEngine.leaveRoom();

3.7 销毁实例

可以通过 destroyEngine 释放 SDK 使用的所有资源,调用后用户将无法再使用和回调该 SDK 内的其它方法。

// 销毁SDK实例
thunderEngine.destroyEngine();

4 API参考

5 注意事项

  • 接口返回值:方法调用成功返回 0,失败返回 < 0。

文档是否有解决您的问题?

有帮助 没帮助
提交成功,非常感谢您的反馈!

反馈

TOP
<