实现音视频通话
快速创建并进入房间,开始音视频通话;以下均为Java代码,详细代码请参考Examples目录下Demo源代码。
请先完成SDK集成准备,并确认测试设备工作正常。
基本步骤如下:
1. 初始化SDK
初始化是整个SDK的使用基础,通常在程序启动的时候进行初始化(init),退出的时候进行反初始化(uninit),整个程序的生命周期中只进行一次初始化和反初始化。
SDK内部的组件多为单例组件,整个程序中只能有一个实例,比如“基础组件”,“房间管理组件”,“视频房间组件”,具体请参见各个组件说明。
// 初始化SDK
// SDK初始化数据对象
SdkInitDat initDat = new SdkInitDat();
// 初始化SDK
CloudroomVideoSDK.getInstance().init(getApplicationContext(), initDat);
相关API请参考:
相关结构定义请参考:
2. 硬件加速视频渲染
通过设置视频控件相关的窗口进行硬件加速,利用手机硬件GPU来提升界面的渲染效果
AndroidManifest.xml配置文件:
<activity
android:name=".VideoMeetingActivity"
android:hardwareAccelerated = "true"
</activity>
注意:配置硬件加速可能导致某些机型上非视频控件显示不正常,需要关闭其他控件的硬件加速:
noUIVideoLayout.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
3. 登录连接视频服务器
设置视频服务器地址,使用云屋授权账号和自定义用户编号登录
- 调用接口:
// 设置服务器地址
CloudroomVideoSDK.getInstance().setServerAddr(server);
// 登录数据对象
LoginDat loginDat = new LoginDat();
// 昵称
loginDat.nickName = nickName;
// 用户ID
loginDat.privAcnt = privAcnt;
// appID,使用开通SDK的账号
loginDat.authAcnt = account;
// 登录密码必须做MD5处理
loginDat.authPswd = md5Pswd;
// 执行登录操作
CloudroomVideoMgr.getInstance().login(loginDat);
- 回调通知:
// 登陆失败
@Override
public void loginFail(CRVIDEOSDK_ERR_DEF sdkErr, String cookie) {
//TODO Auto-generated method stub
}
// 登陆成功
@Override
public void loginSuccess(String usrID, String cookie) {
//TODO Auto-generated method stub
}
//掉线
@Override
public void lineOff(CRVIDEOSDK_ERR_DEF sdkErr) {
//TODO Auto-generated method stub
}
相关API请参考:
4. 创建房间
输入房间标题,创建一个没有密码的房间
- 调用接口:
// 创建房间,不设置密码
CloudroomVideoMgr.getInstance().createMeeting(subject, false, TAG);
- 回调通知:
// 创建房间成功
@Override
public void createMeetingSuccess(MeetInfo meetInfo, String cookie) {
//TODO Auto-generated method stub
}
// 创建房间失败
public void createMeetingFail(CRVIDEOSDK_ERR_DEF sdkErr, String cookie) {
//TODO Auto-generated method stub
}
相关API请参考:
5. 进入房间
用创建成功的房间信息(房间ID和密码)进入房间,其他用户也是利用此房间信息进入该房间。
- 调用接口:
CloudroomVideoMeeting.getInstance().enterMeeting(meetInfo.ID, meetInfo.pswd, UserID, UserID)
- 回调通知:
@Override
public void enterMeetingRslt(CRVIDEOSDK_ERR_DEF code) {
// TODO Auto-generated method stub
if (code == CRVIDEOSDK_NOERR) {
//进入房间成功
} else if (code == CRVIDEOSDK_MEETROOMLOCKED) {
// 房间已加锁
} else {
//进入房间失败
}
}
相关API请参考:
6. 打开麦克风/摄像头
紧接第4步,进入房间成功后,打开自己的麦克风和摄像头,以便本地、远端显示自己的视频图像
// 默认使用前置摄像头
ArrayList<UsrVideoInfo> myVideos = CloudroomVideoMeeting.getInstance().getAllVideoInfo(myUserID);
// 获取终端的所有摄像头,并设置默认的摄像头为前置摄像头
for (UsrVideoInfo vInfo : myVideos) {
if (vInfo.videoName.contains("FRONT")) {
CloudroomVideoMeeting.getInstance().setDefaultVideo(myUserID, vInfo.videoID);
break;
}
}
// 打开摄像头
CloudroomVideoMeeting.getInstance().openVideo(myUserID);
// 打开麦克风
CloudroomVideoMeeting.getInstance().openMic(myUserID);
// 开启外放
CloudroomVideoMeeting.getInstance().setSpeakerOut(true);
// 获取摄像头的相关配置, 设置分辨率为128
VideoCfg cfg = CloudroomVideoMeeting.getInstance().getVideoCfg();
cfg.size = new Size(128, 80);
// 保存摄像头配置到SDK
CloudroomVideoMeeting.getInstance().setVideoCfg(cfg);
相关API请参考:
相关结构定义请参考:
7. 观看他人视频
成功进入房间后,根据他人登录用户id ,设置并观看他人视频图像
创建成员视频UI显示组件
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:tag="1v1" >
<com.cloudroom.cloudroomvideosdk.VideoUIView
android:id="@+id/video_self"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.cloudroom.cloudroomvideosdk.VideoUIView
android:id="@+id/video_peer"
android:layout_width="160dp"
android:layout_height="90dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true" />
</RelativeLayout>
获取成员视频UI显示组件
VideoUIView mOtherYuv = (VideoUIView)findViewById(R.id.yuv_other);
设置成员视频UI显示组件的相关摄像头Id
// 一对一视频情况下 观看他人的摄像头视频
VideoUIView selfView = (VideoUIView) findViewById(R.id.video_self);
//-1表示观看默认摄像头
selfView.setUsrVideoId(new UsrVideoId(myUserId, (short)-1);
//设置观看对方视频
VideoUIView peerView = (VideoUIView) findViewById(R.id.video_peer);
ArrayList<UsrVideoId> videos = CloudroomVideoMeeting.getInstance().getWatchableVideos();
for (UsrVideoId usrVideoId : videos) {
if (!usrVideoId.userId.equals(myUserId)) {
peerView.setUsrVideoId(usrVideoId);
}
}
相关API请参考:
相关结构定义请参考:
8. 退出房间
// 离开房间
CloudroomVideoMeeting.getInstance().exitMeeting();
相关API请参考:
9. 注销登录
//注销本次登录
CloudroomVideoMgr.getInstance().logout();
相关API请参考:
10. 反初始化,退出SDK
执行反初始化后SDK功能不再可用。
//反初始化
CloudroomVideoSDK.getInstance().unInit();
相关API请参考: