会议场景 3.X 升级到 5.X
本文描述 RTCLib SDK 会议场景的升级步骤。
升级概述
RTCLib SDK 5.X 是基于 AndroidX 开发的新版 SDK,功能更丰富,更稳定,并在之前版本上修复了大量问题,建议尽早升级至新版 RTCLib SDK。
前置条件
- RTCLib SDK 依赖 IMLib 请您确保已将 IMLib 升级至 5.X
- 已遵照 IMLib 升级要求将您的工程升级至 AndroidX。
修改依赖方式
以下仅介绍通过 maven 集成的依赖升级方式。RTCLib 还支持本地依赖方式,请参考导入 RTCLib SDK。
修改 Maven 仓库地址
maven {url "https://dl.bintray.com/rongcloud/maven"} // 3.X
maven {url "https://maven.rongcloud.cn/repository/maven-releases/"} // 5.X
修改依赖命名
dependencies {
// x.y.z,请填写具体的 SDK 版本号,新集成用户建议使用最新版。
implementation 'cn.rongcloud.sdk:rtc_lib:x.y.z'
implementation 'cn.rongcloud.sdk:im_lib:x.y.z'
}
- 各个 SDK 的最新版本号可能不相同,还可能是 x.y.z.h,可前往 融云官网 SDK 下载页面 或 融云的 Maven 代码库 查询。
- RTCLib 必须与其依赖的 IMKit/IMLib SDK 保持版本一致。从 5.2.0 开始至 5.4.4(不含),要求前三位一致。从 5.4.4 开始,要求前两位保持一致。注意,RTCLib 5.4.4 不可匹配小于 5.4.4 的 IM SDK。
类路径调整
3.X | 5.X |
---|---|
cn.rongcloud.rtc.RongRTCEngine | cn.rongcloud.rtc.api.RCRTCEngine |
cn.rongcloud.rtc.RongRTCAudioMixer | cn.rongcloud.rtc.api.RCRTCAudioMixer |
cn.rongcloud.rtc.room.RongRTCRoomConfig | cn.rongcloud.rtc.api.RCRTCRoomConfig |
cn.rongcloud.rtc.engine.view.RongRTCVideoView | cn.rongcloud.rtc.api.stream.RCRTCVideoView |
cn.rongcloud.rtc.RongRTCConfig | cn.rongcloud.rtc.api.RCRTCConfig |
cn.rongcloud.rtc.stream.local.RongRTCCapture | 无法直接替换,请参考5.X文档 |
cn.rongcloud.rtc.room.RongRTCMixConfig | cn.rongcloud.rtc.api.RCRTCMixConfig |
cn.rongcloud.rtc.stream.local.RongRTCAVOutputStream | cn.rongcloud.rtc.api.stream.RCRTCOutputStream |
cn.rongcloud.rtc.user.RongRTCLocalUser | cn.rongcloud.rtc.api.RCRTCLocalUser |
参照上表,在 AndroidStudio 中全局搜索旧的类路径,替换为新路径和新类名。
接口变化
初始化音视频引擎
RCRTCConfig
可以设置音视 频采集参数。
// 5.X需要在加入房间之前初始化引擎,如下方式:
RCRTCEngine.getInstance().init(Context application, RCRTCConfig config)
加入房间
将 RongRTCEngine
替换为 RCRTCEngine
,将参数 RongRTCRoomConfig
替换为 RCRTCRoomConfig
// 5.X
RCRTCEngine.getInstance().joinRoom(String roomId,RCRTCRoomConfig roomConfig,IRCRTCResultDataCallback<RCRTCRoom> callBack)
获取房间实例
3.X 只能在加入房间成功回调里面获取到房间对象。
5.X 获取房间对象有两种方式,如下:
- 通过
joinRoom
回调拿到。 - 加入房间之后可以通过
RCRTCEngine.getInstance().getRoom()
获取。
视频大小流设置
发送方设置,将原有方法直接替换为下面方法
// 5.X
RCRTCEngine.getInstance().getDefaultVideoStream().enableTinyStream(enable);
房间事件回调
- 将
registerEventsListener
替换为registerRoomListener
, - 将监听
RongRTCEventsListener
替换为IRCRTCRoomEventsListener
具体可以参考5.X房间事件回调文档
// 5.X
RCRTCEngine.getInstance().getRoom().registerRoomListener(IRCRTCRoomEventsListener eventsListener)
创建渲染本地视频流
RongRTCVideoView
替换为 RCRTCVideoView
直接new出来。
// 5.X
RCRTCVideoView rcrtcVideoView = new RCRTCVideoView(context);
//设置本地预览视图
RCRTCEngine.getInstance().getDefaultVideoStream().setVideoView(rcrtcVideoView);
//将本地视图添加至FrameLayout布局
mFrameLayout_local.addView(rongRTCVideoView);
音视频相关参数设置
3.X 音视频参数设置都是通过 RongRTCConfig
设置,5.X做了区分,视频使用 RCRTCVideoStreamConfig
,音频模式设置调用 setAudioQuality
等。
具体可以参考5.X的文档
// 5.X 设置视频属性
RCRTCVideoStreamConfig config = RCRTCVideoStreamConfig.Builder.create()
.setMaxRate(200)
.setMaxRate(900)
.setVideoFps(RCRTCParamsType.RCRTCVideoFps.Fps_15)
.setVideoResolution(RCRTCParamsType.RCRTCVideoResolution.RESOLUTION_480_640)
.build();
RCRTCEngine.getInstance().getDefaultVideoStream().setVideoConfig(config);
// 5.X 音频模式设置
RCRTCEngine.getInstance().getDefaultAudioStream().setAudioQuality(RCRTCParamsType.AudioQuality.MUSIC, RCRTCParamsType.AudioScenario.MUSIC_CHATROOM);
// 5.X 音视频硬件属性设置
RCRTCConfig rcrtcConfig = RCRTCConfig.Builder.create()
.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION)
.build();
RCRTCEngine.getInstance().init(this,rcrtcConfig);
发布资源
publishDefaultAVStream
替换为 publishDefaultStreams
//5.X
RCRTCEngine.getInstance().getRoom().getLocalUser().publishDefaultStreams(new IRCRTCResultCallback() {
@Override
public void onSuccess() {
// 发布成功
}
@Override
public void onFailed(RTCErrorCode errorCode) {
// 发布失败
}
});
取消发布资源
unpublishDefaultAVStream
替换为 unpublishDefaultStreams
//5.X
RCRTCEngine.getInstance().getRoom().getLocalUser().unpublishDefaultStreams(new IRCRTCResultCallback() {
@Override
public void onSuccess() {
// 取消发布成功
}
@Override
public void onFailed(RTCErrorCode errorCode) {
// 取消发布失败
}
});
订阅资源
subscribeAVStream
替换为 subscribeStreams
//5.X
List<RCRTCInputStream> inputStreams = new ArrayList<>();
RCRTCEngine.getInstance().getRoom().getLocalUser().subscribeStreams(inputStreams, new IRCRTCResultDataCallback<List<RCRTCInputStream>>() {
@Override
public void onSuccess(List<RCRTCInputStream> data) {
// 订阅成功
}
@Override
public void onFailed(RTCErrorCode errorCode) {
// 订阅失败
}
});
取消订阅资源
unsubscribeAVStream
替换为 unsubscribeStreams
//5.X
RCRTCEngine.getInstance().getRoom().getLocalUser().unsubscribeStreams(inputStreams, new IRCRTCResultCallback() {
@Override
public void onSuccess() {
// 取消订阅成功
}
@Override
public void onFailed(RTCErrorCode errorCode) {
// 取消订阅失败
}
});
离开房间方法名有变化
将 quitRoom
替换为 leaveRoom
// 5.X 不需要传roomid
RCRTCEngine.getInstance().leaveRoom(IRCRTCResultCallback callBack)
硬件资源操作
在 3.X 操作摄像头,麦克风等都是使用 RongRTCCapture
这个类进行设置,在 5.X 中操作摄像头使用 RCRTCEngine.getInstance().getDefaultVideoStream()
进行设置
操作麦克风使用 RCRTCEngine.getInstance().getDefaultAudioStream()
进行设置
摄像头处理
RongRTCCapture
替换为 RCRTCEngine.getInstance().getDefaultVideoStream()
//打开摄像头
RCRTCEngine.getInstance().getDefaultVideoStream().startCamera();
//切换摄像头
RCRTCEngine.getInstance().getDefaultVideoStream().switchCamera();
//关闭摄像头
RCRTCEngine.getInstance().getDefaultVideoStream().stopCamera();
RCRTCEngine.getInstance().getDefaultVideoStream().isFrontCamera();
麦克风控制
// 5.X true 关闭麦克风 false 打开麦克风
RCRTCEngine.getInstance().getDefaultAudioStream().setMicrophoneDisable(true);
扬声器控制
// 5.X true 使用扬声器;false 使用听筒
RCRTCEngine.getInstance().enableSpeaker(true);
视频流处理
将原有方法直接替换成如下方法
// 5.X
RCRTCEngine.getInstance().getDefaultVideoStream().setVideoFrameListener(new IRCRTCVideoOutputFrameListener() {
@Override
public RCRTCVideoFrame processVideoFrame(RCRTCVideoFrame rtcVideoFrame) {
//使用数据进行美颜/录像等处理后,需要把数据再返回给SDK做发送
return rtcVideoFrame;
}
});
音频流处理
将原有方法直接替换成如下方法
// 5.X
RCRTCEngine.getInstance().getDefaultAudioStream().setRecordAudioDataListener(new IRCRTCAudioDataListener() {
@Override
public byte[] onAudioFrame(RCRTCAudioFrame rcrtcAudioFrame) {
//回调线程:AudioRecordJavaThread
return rcrtcAudioFrame.getBytes();
}
});
远端音频流处理
将原有方法直接替换成 如下方法
// 5.X
room.setRemoteAudioDataListener(new IRCRTCAudioDataListener() {
@Override
public byte[] onAudioFrame(RCRTCAudioFrame rcrtcAudioFrame) {
return rcrtcAudioFrame.getBytes();
}
});