# 语音通话快速入门

此集成文档基于三体云 SDK 2.9.6 版本,方便您快速集成和使用 SDK 基本功能。

# Demo体验

Demo, 按照文档说明运行demo

# 开发环境

  • Android Studio 3.0 或以上版本
  • Android SDK API 等级 18 或以上
  • 支持 Android 4.3 或以上版本的移动设备
  • Java SDK 8.0 或以上版本

注册三体云账号,申请AppId

# 下载 SDK

  1. 前往 SDK 下载页面,获取最新版的三体云 SDK,然后解压。

  2. 将 SDK 压缩包解压缩获取 aar 文件,将 aar 引用到项目中:

# 添加项目权限

根据场景需要,在 /app/src/main/AndroidManifest.xml 文件中添加如下行,获取相应的设备权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.tttrtclive.live">
 
   <uses-permission android:name="android.permission.READ_PHONE_STATE" />   
   <uses-permission android:name="android.permission.INTERNET" />
   <uses-permission android:name="android.permission.RECORD_AUDIO" />
   <uses-permission android:name="android.permission.CAMERA" />
   <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
   <uses-permission android:name="android.permission.BLUETOOTH" />
   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
   // 如果你使用的是 Android 10.0 及以上设备,还需要添加如下权限:
   <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
 
...
</manifest>

# 防止代码混淆

app/proguard-rules.pro 文件中添加如下行,防止代码混淆:

-keep class ttt.ijk.media.**{*;}
-keep class project.android.imageprocessing.**{*;}
-keep class org.TTTRtc.voiceengine.**{*;}
-keep class com.wushuangtech.**{*;}
-dontwarn ttt.ijk.media.**

# 实现连麦直播

# API 调用时序图

# 1.初始化 TTTRtcEngine

在调用其他 API 前,需要创建并初始化 TTTRtcEngine 对象。

调用 create 方法,传入获取到的 App ID,即可初始化 TTTRtcEngine。

在设置 TTTRtcEngineEventHandler 注意:
1.SDK 暂不支持设置多个回调接收对象,后设置的会覆盖前面所设置的。
2.避免在回调线程中做耗时的操作,以防阻塞线程,影响后续回调信令的接收。

TTTRtcEngine mTTTEngine = TTTRtcEngine.create(getApplicationContext(), <APPID>, false, mMyTTTRtcEngineEventHandler);
if (mTTTEngine == null) {
    return ;
}

# 2. 设置频道模式

初始化结束后,调用 setChannelProfile 方法,将频道模式设为直播。

该 API 必须在 joinChannel(加入频道) 前设置。

全局性 API,退出频道并不会改变之前所设置的模式。如需切换模式,需要显式的再次调用。

mTTTEngine.setChannelProfile(Constants.CHANNEL_PROFILE_COMMUNICATION);

# 3. 设置用户角色

音频通话有两种用户角色:副播(CLIENT_ROLE_BROADCASTER)和观众(CLIENT_ROLE_AUDIENCE),其中默认的角色为副播。

副播可以发生/接收音频流,观众只接收音频流,不能发送。

全局性 API,退出频道并不会改变之前所设置的角色身份。如需切换角色,需要显式的再次调用。

mTTTEngine.setClientRole(Constants.CLIENT_ROLE_BROADCASTER); // 角色为副播

# 4. 加入频道

完成设置角色和本地视图后(视频直播场景),你就可以调用 joinChannel 方法加入频道。你需要在该方法中传入如下参数:

  • token:传入能标识用户角色和权限的 Token。可设为如下一个值:

    • NULL 不启用 Token 功能。
    • 在你的服务器端生成的 Token。在安全要求高的场景下,我们推荐你使用此种方式生成的 Token 。
  • channelName:传入能标识频道的频道 ID。App ID 相同、频道 ID 相同的用户会进入同一个频道。当前 SDK 仅支持数字类型的字符串,数值范围为1-9,不支持任何特殊符号,英文字母,空格等,长度续保证为 Long 类型的最大值以内。

  • optionalUid: 本地用户的 ID。数据类型为长整型,且频道内每个用户的 uid 必须是唯一的。

...
// 监听加入频道成功的回调
@Override
public void onJoinChannelSuccess(String channel, long uid, int elapsed) {}

// 监听加入频道失败的回调
@Override
public void onError(int errorType) {}

// 监听已在频道内,收到异常退出的信令的回调。原因具体看 reason 参数
@Override
public void onUserKicked(long uid, int reason) {
	// 退出当前频道
	mTTTEngine.leaveChannel();
}
...

private void joinChannel() {
 
    // 不使用 Token 加入频道。
    private String mRoomName = "123";
    private long mUid = 1234;
    mTTTEngine.joinChannel("", mRoomName, mUid);
}
...

# 5. 离开频道

结束直播或离开当前直播频道。

mTTTEngine.leaveChannel();