您可以 下载 安装我们的 App 体验实时音视频通话的效果。
主动呼叫 | 被叫接听 |
---|---|
![]() |
![]() |
注意:为方便您快速实现音视频通话功能,我们对 TUICalling 组件进行了改造,通话UI在TUICalling 组件内部实现,您可以无需关注UI。
TestVideoCall
,单击 创建。注意:本功能同时使用了腾讯云 实时音视频 TRTC 和 即时通信 IM 两个基础 PaaS 服务,开通实时音视频后会同步开通即时通信 IM 服务。 即时通信 IM 属于增值服务,详细计费规则请参见 即时通信 IM 价格说明。
单击进入 TUICalling,Clone 或者下载源码。
进入修改配置页,根据您下载的源码包,选择相应的开发环境。
找到并打开 Android/Debug/src/main/java/com/tencent/liteav/debug/GenerateTestUserSig.java
文件。
设置 GenerateTestUserSig.java
文件中的相关参数:
粘贴完成后,单击 已复制粘贴,下一步 即创建成功。
编译完成后,单击 回到控制台概览 即可。
注意:
- 本文提到的生成 UserSig 的方案是在客户端代码中配置 SECRETKEY,该方法中 SECRETKEY 很容易被反编译逆向破解,一旦您的密钥泄露,攻击者就可以盗用您的腾讯云流量,因此该方法仅适合本地跑通 App 和功能调试。
- 正确的 UserSig 签发方式是将 UserSig 的计算代码集成到您的服务端,并提供面向 App 的接口,在需要 UserSig 时由您的 App 向业务服务器发起请求获取动态 UserSig。更多详情请参见 服务端生成 UserSig。
使用 Android Studio(3.5 以上的版本)打开源码工程 TUICalling
,单击 运行 即可开始调试本 App。
注意:体验应用至少需要两台设备。
源码 文件夹 Source
中包含两个子文件夹 ui 和 model,其中 model 文件夹中包含了我们对外暴露的开源组件 TUICallingManager,您可以在 TUICalling.java
文件中看到该组件提供的接口函数。
您直接使用开源组件 TUICalling 的 TUICallingManager 即可轻松实现音视频通话功能,而无需再自己实现复杂的通话 UI 界面和逻辑。
音视频通话组件 TUICalling 依赖 TRTC SDK 和 IM SDK,您可以按照如下步骤将两个 SDK 集成到项目中。
在 dependencies 中添加 TRTCSDK 和 IMSDK 的依赖。
dependencies {
compile "com.tencent.liteav:LiteAVSDK_TRTC:latest.release"
compile 'com.tencent.imsdk:imsdk:latest.release'
// 由于我们使用到了 gson 解析,所以还需要依赖 google 的 Gson
compile 'com.google.code.gson:gson:latest.release'
}
在 defaultConfig 中,指定 App 使用的 CPU 架构。
defaultConfig {
ndk {
abiFilters "armeabi-v7a"
}
}
单击 Sync Now 同步 SDK。
说明:若您的网络连接 mavenCentral 没有问题,SDK 会自动下载集成到工程里。
如果您的开发环境访问 mavenCentral 仓库较慢,可以直接下载 ZIP 包,并按照集成文档手动集成到您的工程中。
SDK | 下载页面 | 集成指引 |
---|---|---|
TRTC SDK | DOWNLOAD | 集成文档 |
IM SDK | DOWNLOAD | 集成文档 |
在 AndroidManifest.xml 中配置 App 的权限,SDK 需要以下权限(6.0以上的 Android 系统需要动态申请相机、读取存储权限):
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus" />
在 proguard-rules.pro 文件,将 SDK 相关类加入不混淆名单:
-keep class com.tencent.** { *; }
拷贝 Source 目录到您的工程中,并在 setting.gradle
中完成导入,参考如下:
include ':Source'
TUICallingManager.sharedInstance()
进行组件初始化。TUILogin.init(context, SDKAppID, config, listener)
进行登录初始化。TUILogin.login(userId, userSig, callback)
完成组件的登录,其中几个关键参数的填写请参考下表:参数名 | 作用 |
---|---|
SDKAppID | 您可以在 实时音视频控制台 中查看 SDKAppID。 |
userId | 当前用户的 ID,字符串类型,只允许包含英文字母(a-z 和 A-Z)、数字(0-9)、连词符(-)和下划线(_)。建议结合业务实际账号体系自行设置。 |
userSig | 腾讯云设计的一种安全保护签名,计算方式请参考 如何计算及使用 UserSig。 |
config | SDK配置。用于设置日志级别和日志回调(也可传null),详情可参考下方示例代码。 |
listener | IM监听器。用于接收一些必要的系统回调通知,比如:被踢下线、userSig过期等,详情可参考下方示例代码。 |
callback | 登录结果监听器。通知登录是否成功,详情可参考下方示例代码。 |
// 组件初始化
TUICallingManager manager = TUICallingManager.sharedInstance();
// 登录
V2TIMSDKConfig config = new V2TIMSDKConfig();
config.setLogLevel(V2TIMSDKConfig.V2TIM_LOG_DEBUG);
config.setLogListener(new V2TIMLogListener() {
@Override
public void onLog(int logLevel, String logContent) {
}
});
TUILogin.init(this, ${您的SDKAPPID}, config, new V2TIMSDKListener() {
@Override
public void onKickedOffline() { // 登录被踢下线通知
mIsKickedOffline = true;
checkUserStatus();
}
@Override
public void onUserSigExpired() { // suerSig过期通知
mIsUserSigExpired = true;
checkUserStatus();
}
});
TUILogin.login("${您的userId}", "${您的userSig}", new V2TIMCallback() {
@Override
public void onError(int code, String msg) {
Log.d(TAG, "code: " + code + " msg:" + msg);
}
@Override
public void onSuccess() {
Log.d(TAG, "onSuccess");
}
});
call();
方法发起通话的请求, 并传入用户 ID数组(userids)和通话类型(type),通话类型参数传入TUICalling.Type.AUDIO
(音频通话)或者TUICalling.Type.VIDEO
(视频通话)。如果用户 ID数组(userids)只有1个userId时视为单人通话,如果用户 ID数组(userids)有多个userId时(>=2)视为多人通话。// 1. 初始化组件
TUICallingManager manager = TUICallingManager.sharedInstance();
// 2. 注册监听器
manager.setCallingListener(new TUICalling.TUICallingListener() {
@Override
public boolean shouldShowOnCallView() {
return true;
}
@Override
public void onCallStart(String[] userIDs, TUICalling.Type type, TUICalling.Role role, final View tuiCallingView) {
if (!shouldShowOnCallView() || null == tuiCallingView) {
return;
}
runOnUiThread(new Runnable() {
@Override
public void run() {
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
mCallingView = tuiCallingView;
addContentView(tuiCallingView, params);
}
});
}
@Override
public void onCallEnd(String[] userIDs, TUICalling.Type type, TUICalling.Role role, long totalTime) {
removeView();
}
@Override
public void onCallEvent(TUICalling.Event event, TUICalling.Type type, TUICalling.Role role, String message) {
if (TUICalling.Event.CALL_FAILED == event) {
removeView();
}
}
});
// 3.拨打电话
manager.call(userIDs, TUICalling.Type.VIDEO);
说明:如果您的业务定位是在线客服等不需要离线接听功能的场景,那么完成上述 步骤1 - 步骤5 的对接即可。但如果您的业务定位是社交场景,建议实现离线接听。
IM SDK 支持离线推送,但是 Android 端各个手机厂商均有各自的离线推送服务,因此接入复杂度要高于 iOS 平台,您需要进行相应的设置才能达到可用标准。
TUICalling 组件的 API 接口列表如下:
接口函数 | 接口功能 |
---|---|
call | C2C 邀请通话 |
receiveAPNSCalled | 作为被邀请方接听来电 |
setCallingListener | 设置监听器 |
setCallingBell | 设置铃声(建议在30s以内) |
enableMuteMode | 开启静音模式 |
enableCustomViewRoute | 开启自定义视图, 开启后,会在呼叫/被叫开始回调中,接收到 CallingView 的实例,由开发者自行决定展示方式。注意:必须全屏或者与屏幕等比例展示,否则会有展示异常 |
本页内容是否解决了您的问题?