TRTC Android端开发接入学习之实现语音通话(六)
时间:2022-07-24
本文章向大家介绍TRTC Android端开发接入学习之实现语音通话(六),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言:
在上一篇《视频通话》中,我们实现了双方的视频通话,总所周知没有声音再好的戏也出不来,本期我们来学习如何使用TRTC完成语音通话的功能。
实现步骤
第一步:集成SDK
音视频通话组件 TRTCCalling 依赖 TRTC SDK 和 IM SDK,可以参考官方提供的集成指引,完成集成 TRTC集成文档 和 IM集成文档
DEMO中主要文件
文件或文件夹 |
功能描述 |
---|---|
TRTCAudioCallActivity.java |
展示语音通话的主界面,通话的接听和拒绝就是在这个界面中完成的。 |
TRTCCallingEntranceActivity.java |
用于展示选择联系人的界面,可以通过此界面搜索已注册用户,发起通话。 |
audiolayout |
用于通话过程中用户画面的渲染和排布逻辑。 |
第二步:配置对应权限和混淆规则
<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.** { *; }
第三步:在GenerateTestUserSig.java中配置SDKID和SECRETKEY
SDKAPPID:在音视频控制台中对应创建的应用的ID
SECRETKEY:音视频控制台对应的计算密钥,点击查看密钥获得
第四步:初始化SDK和登录
- 调用 TRTCCallingImpl.sharedInstance(context)获取组件实例。
- IM 登录
V2TIMManager.getInstance().login(userId, userSig,callback)
3. Calling组件登录
/**
*SDKAppId:腾讯云音视频控制台新建的APP的应用ID
*userid:当前用户的ID,字符串类型 a-z A-Z 0-9 -和_
*userSig:生成腾讯云安全保护签名(测试demo从简 本地生成,
*如果是正式发布需要放到后台接口放置被盗取)
**/
login(SDKAppID, userId, userSig, callback)
第五步:实现通话功能
- 1V1通话实现
- 发起方:调用 TRTCCalling 的 call() 方法发起通话的请求, 并传入用户 ID(userid)和通话类型(type),通话类型参数传入TYPE_AUDIO_CALL。
- 接收方:当接收方处于已登录状态时,会收到名为 onInvited() 的事件通知。
- 接收方:如果希望接听通话,接收方可以调用 accept()函数,或者调用 reject() 拒绝此次通话。
- 当双方的音视频通道建立完成后,通话的双方都会接收到名为 onUserEnter() 的事件通知,此时说明双方已经进入通话。
// 注册监听器
sCall.addDelegate(new TRTCCallingDelegate() {
//...省略一些监听代码
public void onInvited(String sponsor, final List<String> userIdList, boolean isFromGroup, int callType) {
// 收到来自 sponsor 发过来的通话请求,此处代码选择接听,您也可以调用 reject() 拒绝之。
scall.accept();
}
public void onUserEnter(final String userId) {
//用户接收了通话请求。此处编写接收后UI变化
}
});
sCall.login(sdkappid, "aaa", usersig, new ActionCallback() {
public void onSuccess() {
sCall.call("aaa",TRTCCalling.TYPE_AUDIO_CALL);
}
});
- 多人通话
- 发起方:多人视频通话需要调用 TRTCCalling 中的 groupCall() 函数,并传入用户列表(userIdList)、通话类型(type)、 IM 群组 ID(groupId),其中 userIdList 为必填参数,通话类型为必填参数传入TYPE_AUDIO_CALL, groupId 为选填参数。
- 接收端:通过 onInvited() 事件通知能够接收到此次请求。
- 接收端:收到事件通知后可以调用 accept() 方法接听此次通话,也可以选择用 reject() 方法拒绝通话。
- 如果超过一定时间(默认30s)没有回复,接收方会收到 onCallingTimeOut() 的事件通知,发起方会收到 onNoResp(String userId) 事件通知。通话发起方在多个接收均未应答时 hangup() , 每个接收方均会收到 onCallingCancel() 事件通知。
- 如果需要离开当前多人通话可以调用 hangup() 方法。
- 如果通话中有用户中途加入或离开,那么其他用户均会接收到 onUserEnter() 或 onUserLeave() 事件通知。
// 前面省略...
// 拼凑需要拨打的用户列表
List<String> callList = new ArrayList();
callList.add("bbb");
callList.add("ccc");
callList.add("ddd");
// 如果您不是在一个 IM 群里发起的, groupId 可以传一个空串;
sCall.groupCall(callList, TRTCCalling.TYPE_AUDIO_CALL, "");
//结束通话 挂断
mTRTCCalling.hangup();
- composer安装其实可以很简单 两行命令就解决了
- 章神的私房菜之数据预处理
- 如何调用finecms指定栏目的描述关键词
- finecms栏目文章页seo设置
- Logistic回归实战篇之预测病马死亡率(一)
- DedeCMS后台500错误一种原因是不支持PHP5.3、5.4及以上版本
- finecms指定从第几篇文章开始调用5条记录,并调用文章所在栏目
- finecms如何调用多个栏目的子栏目
- 从傅立叶变换到Gabor滤波器
- 三个小时学会wordpress模板制作
- The each() function is deprecated报错的解决方法
- 书接上文:薛定谔的猫是如何诞生的?
- docker源码分析(3)---镜像(1)
- k8s源码分析-----kubelet(8)pod管理
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释