前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TRTC Android端开发接入学习之实现语音通话(六)

TRTC Android端开发接入学习之实现语音通话(六)

原创
作者头像
腾讯云-hongyang
修改2020-09-10 13:10:27
1.4K0
修改2020-09-10 13:10:27
举报
文章被收录于专栏:音视频学习

前言:

在上一篇《视频通话》中,我们实现了双方的视频通话,总所周知没有声音再好的戏也出不来,本期我们来学习如何使用TRTC完成语音通话的功能。

实现步骤

第一步:集成SDK

音视频通话组件 TRTCCalling 依赖 TRTC SDK 和 IM SDK,可以参考官方提供的集成指引,完成集成 TRTC集成文档IM集成文档

DEMO中主要文件

文件或文件夹

功能描述

TRTCAudioCallActivity.java

展示语音通话的主界面,通话的接听和拒绝就是在这个界面中完成的。

TRTCCallingEntranceActivity.java

用于展示选择联系人的界面,可以通过此界面搜索已注册用户,发起通话。

audiolayout

用于通话过程中用户画面的渲染和排布逻辑。

第二步:配置对应权限和混淆规则

代码语言:javascript
复制
<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 相关类加入不混淆名单:

代码语言:javascript
复制
-keep class com.tencent.** { *; } 

第三步:在GenerateTestUserSig.java中配置SDKID和SECRETKEY

SDKAPPID:在音视频控制台中对应创建的应用的ID

SECRETKEY:音视频控制台对应的计算密钥,点击查看密钥获得

第四步:初始化SDK和登录

  1. 调用 TRTCCallingImpl.sharedInstance(context)获取组件实例。
  2. IM 登录
代码语言:javascript
复制
 V2TIMManager.getInstance().login(userId, userSig,callback) 

3. Calling组件登录

代码语言:javascript
复制
/** 
*SDKAppId:腾讯云音视频控制台新建的APP的应用ID 
*userid:当前用户的ID,字符串类型 a-z A-Z 0-9 -和_ 
*userSig:生成腾讯云安全保护签名(测试demo从简 本地生成,     
*如果是正式发布需要放到后台接口放置被盗取) 
**/ 
login(SDKAppID, userId, userSig, callback)  

第五步:实现通话功能

  • 1V1通话实现
  1. 发起方:调用 TRTCCalling 的 call() 方法发起通话的请求, 并传入用户 ID(userid)和通话类型(type),通话类型参数传入TYPE_AUDIO_CALL。
  2. 接收方:当接收方处于已登录状态时,会收到名为 onInvited() 的事件通知。
  3. 接收方:如果希望接听通话,接收方可以调用 accept()函数,或者调用 reject() 拒绝此次通话。
  4. 当双方的音视频通道建立完成后,通话的双方都会接收到名为 onUserEnter() 的事件通知,此时说明双方已经进入通话。
代码语言:javascript
复制
// 注册监听器
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);
    }
});
  • 多人通话
  1. 发起方:多人视频通话需要调用 TRTCCalling 中的 groupCall() 函数,并传入用户列表(userIdList)、通话类型(type)、 IM 群组 ID(groupId),其中 userIdList 为必填参数,通话类型为必填参数传入TYPE_AUDIO_CALL, groupId 为选填参数。
  2. 接收端:通过 onInvited() 事件通知能够接收到此次请求。
  3. 接收端:收到事件通知后可以调用 accept() 方法接听此次通话,也可以选择用 reject() 方法拒绝通话。
  4. 如果超过一定时间(默认30s)没有回复,接收方会收到 onCallingTimeOut() 的事件通知,发起方会收到 onNoResp(String userId) 事件通知。通话发起方在多个接收均未应答时 hangup() , 每个接收方均会收到 onCallingCancel() 事件通知。
  5. 如果需要离开当前多人通话可以调用 hangup() 方法。
  6. 如果通话中有用户中途加入或离开,那么其他用户均会接收到 onUserEnter() 或 onUserLeave() 事件通知。
代码语言:javascript
复制
// 前面省略...
// 拼凑需要拨打的用户列表
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();

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 实现步骤
    • 第一步:集成SDK
      • 第二步:配置对应权限和混淆规则
        • 第三步:在GenerateTestUserSig.java中配置SDKID和SECRETKEY
          • 第四步:初始化SDK和登录
            • 第五步:实现通话功能
            相关产品与服务
            实时音视频
            实时音视频(Tencent RTC)基于腾讯21年来在网络与音视频技术上的深度积累,以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,致力于帮助开发者快速搭建低成本、低延时、高品质的音视频互动解决方案。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档