简介
实时音视频TRTCSDK适用的业务场景是视频会议、坐席视频、在线教育等,如果您希望实现类似微信的语音通话、语音会议功能,TRTCSDK也是支持的,只需要微调几个参数就可以实现,将采集音视频的api,换成只采集音频。
官网开发文档已经给出了音视频会议场景的调用时序,参考官网开发文档,做如下修改即可。
1.初始化 SDK
使用 TRTC SDK 的第一步,是先创建一个 TRTCCloud 的实例对象,并注册监听 SDK 事件的回调。
- 先继承TRTCCloudListener抽象类并重写您需要监听的事件(用户加入房间、用户退出房间、警告信息、错误信息等)。
- 创建TRTCCloud实例对象,调用 setListener 方法设置TRTCCloudListener回调。
public class TRTCMainActivity extends Activity{
private TRTCCloud trtcCloud; /// TRTC SDK 实例对象
private TRTCCloudListener trtcListener; /// TRTC SDK 回调监听
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
....
trtcListener = new TRTCCloudListenerImpl(this);
trtcCloud = TRTCCloud.sharedInstance(this);
trtcCloud.setListener(trtcListener);
}
//静态内部类,重写监听事件
static class TRTCCloudListenerImpl extends TRTCCloudListener {
private WeakReference<TRTCMainActivity> mContext;
public TRTCCloudListenerImpl(TRTCMainActivity activity) {
super();
mContext = new WeakReference<>(activity);
}
@Override
public void onEnterRoom(long elapsed) {
//TODO
}
@Override
public void onExitRoom(int reason) {
//TODO
}
@Override
public void onError(int errCode, String errMsg, Bundle extraInfo) {
//TODO
}
@Override
public void onWarning(int warningCode, String warningMsg, Bundle extraInfo) {
//TODO
}
@Override
public void onUserEnter(String userId) {
//TODO
}
}
// 销毁 trtcCloud 实例
@Override
protected void onDestroy() {
super.onDestroy();
//销毁 trtc 实例
if (trtcCloud != null) {
trtcCloud.setListener(null);
trtcCloud.destroy();
}
trtcCloud = null;
}
}
2.组装 TRTCParams
TRTCParams 是 SDK 最关键的一个参数,它包含如下四个必填的字段 SDKAppid,userId,userSig 和 roomId。
- SDKAppid
进入腾讯云实时音视频控制台,如果您还没有应用,请创建一个,即可看到 SDKAppid。
- userId
您可以随意指定,由于是字符串类型,可以直接跟您现有的账号体系保持一致,但请注意,同一个音视频房间里不应该有两个同名的 userId
- userSig
基于 sdkAppId 和 userId 可以计算出 userSig,计算方法请参考如何计算UserSig。
- roomId
房间号是数字类型,您可以随意指定,但请注意,同一个应用里的两个音视频房间不能分配同一个 roomId。
3.进入音频通话房间
调用 enterRoom 函数进入房间时,需要上文的 TRTCParams 参数
代码语言:javascript复制void enterRoom() {
// 预览前配置默认参数
setTRTCCloudParam();
//TRTCParams 定义参考头文件TRTCCloudDef.java
trtcParams = new TRTCCloudDef.TRTCParams();
trtcParams.sdkAppId = sdkappid;
trtcParams.userId = userid;
trtcParams.userSig = usersig;
trtcParams.roomId = 908; //输入你想进入的房间
trtcCloud.enterRoom(trtcParams, TRTC_APP_SCENE_VIDEOCALL);
}
4.开启本地声音采集,不打开本地视频采集。
TRTC SDK 并不会默认打开本地的麦克风采集,startLocalAudio可以开启本地的声音采集并将音视频数据广播出去,stopLocalAudio则会关闭之。 startLocalAudio 会检查麦克风使用权限,如果没有麦克风权限,SDK 会向用户申请开启。
TRTC SDK 并不会默认打开本地的摄像头采集,startLocalPreview 可以开启本地的摄像头并显示预览画面,stopLocalPreview 则会关闭之。
做音视频通话需要调用startLocalPreview,对于纯音频通话,则不需要调用startLocalPreview,您可以直接注释掉我们官方demo的相关代码。
代码语言:javascript复制void setTRTCCloudParam() {
// 大画面的编码器参数设置
// 设置视频编码参数,包括分辨率、帧率、码率等等,这些编码参数来自于 TRTCSettingDialog 的设置
// 注意(1):不要在码率很低的情况下设置很高的分辨率,会出现较大的马赛克
// 注意(2):不要设置超过25FPS以上的帧率,因为电影才使用24FPS,我们一般推荐15FPS,这样能将更多的码率分配给画质
/* TRTCCloudDef.TRTCVideoEncParam encParam = new TRTCCloudDef.TRTCVideoEncParam();
encParam.videoResolution = settingDlg.getResolution();
encParam.videoFps = settingDlg.getVideoFps();
encParam.videoBitrate = settingDlg.getVideoBitrate();
encParam.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;
trtcCloud.setVideoEncoderParam(encParam);*/
// 不开启视频采集预览
/* TXCloudVideoView localVideoView = mVideoViewLayout.getCloudVideoViewByIndex(0);
localVideoView.setUserId(trtcParams.userId);
localVideoView.setVisibility(View.VISIBLE);
trtcCloud.setLocalViewFillMode(TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL);
trtcCloud.startLocalPreview(true, localVideoView);*/
//只开启音频采集
trtcCloud.startLocalAudio();
trtcCloud.setGSensorMode(TRTCCloudDef.TRTC_GSENSOR_MODE_UIFIXLAYOUT);
}
5.退出房间
调用exitRoom方法退出房间。不论当前是否还在通话中,调用该方法会把音频通话相关的所有资源释放掉。
在您调用exitRoom之后,SDK 会进入一个复杂的退房握手流程,当 SDK 回调 onExitRoom 方法时才算真正完成资源的释放。
代码语言:javascript复制private void exitRoom() {
if (trtcCloud != null) {
trtcCloud.exitRoom();
}
}
...
@Override
public void onExitRoom(int reason) {
TRTCMainActivity activity = mContext.get();
if (activity != null) {
activity.finishActivity();
}
}