DingRTC的基本功能包含初始化SDK、加入频道、本地发布、订阅远端和离开频道等。通过阅读本文,您可以了解DingRTC的基本功能。
前提条件
您已下载并集成最新版本的SDK。具体操作,请参见如何在Android端集成音视频通信SDK。
您已获取加入频道必需的频道鉴权令牌(Token)。具体操作,请参见使用Token鉴权。
操作步骤
初始化SDK。
您需要创建RtcEngine实例,并注册回调。具体回调接口请参见回调及监听。
mRtcEngine = DingRtcEngine.create(getApplicationContext(), ""); mRtcEngine.setRtcEngineEventListener(new DingRtcEngineEventListener() { // 重写您需要监听的回调方法。 });
本地预览。在创建完RtcEngine实例后,您可以创建canvas布局进行本地预览视频。
DingRtcEngine.DingRtcVideoCanvas canvas = new DingRtcEngine.DingRtcVideoCanvas(); SurfaceView localView = mRtcEngine.createRenderSurfaceView(this); canvas.view = localView; canvas.renderMode = DingRtcEngine.DingRtcRenderMode.DingRtcRenderModeCrop; mRtcEngine.setLocalViewConfig(canvas, DingRtcVideoTrackCamera); mRtcEngine.startPreview();
可选:取消本地预览。
mRtcEngine.stopPreview();
设置发布与订阅。
SDK在入会时不会自动推流。想要入会即推流的话,在app里实现
new DingRtcEngineEventListener() { @Override public void onJoinChannelResult(int result, String channel, String userId, int elapsed) { runOnUiThread(() -> { if(result == 0) { mRtcEngine.publishLocalAudioStream(true); mRtcEngine.publishLocalVideoStream(true); } }); } }
SDK默认入会后自动订阅远端的音频流与视频流,如果您不希望自动订阅音频与视频,可以在入会前通过以下接口设置:
// 设置自动拉流,以及视频清晰度 // 这些值根据需要配置 boolean autoSubAudio = true; boolean autoSubVideo = true; DingRtcEngine.DingRtcVideoStreamType preferVideoQuality = DingRtcEngine.DingRtcVideoStreamType.DingRtcVideoStreamTypeFHD; mRtcEngine.setDefaultSubscribeAllRemoteAudioStreams(autoSubAudio); mRtcEngine.setDefaultSubscribeAllRemoteVideoStreams(autoSubVideo); mRtcEngine.setRemoteDefaultVideoStreamType(preferVideoQuality);
加入频道。
DingRtcAuthInfo auth = new DingRtcAuthInfo(); auth.channelId = /* 频道ID */; auth.appId = /* 应用ID */; auth.token = /* 频道鉴权令牌Token */; auth.userId = /* 用户ID */; auth.gslbServer = /* GSLB地址 */; mRtcEngine.joinChannel(auth, nick /* 显示名称 */);
参数
描述
appId
应用ID,在控制台应用管理页面创建和查看。
channelId
频道ID。1~64位,由大小写字母、数字、下划线(_)、短划线(-)组成。
userId
用户ID。1~64位,由大小写字母、数字、下划线(_)、短划线(-)组成。
说明同一个用户ID在其他端登录,先入会的端会被后入会的端踢出频道。
token
频道鉴权令牌。
gslbServer
服务地址,可为空,默认值为:
"https://gslb.dingrtc.com"
,请您通过业务服务器下发到客户端SDK,不建议您将该地址固化在客户端代码。发布或取消发布本地流。
入会之后,也可以改变推流状态。
发布本地音频流和视频流
如果此时没有推流,可以调用以下接口进行发布音频或者视频:
mRtcEngine.publishLocalVideoStream(true); mRtcEngine.publishLocalAudioStream(true);
或者取消推流
mRtcEngine.publishLocalVideoStream(false); mRtcEngine.publishLocalAudioStream(false);
音频和视频可以独立控制。
订阅或取消订阅远程流。
订阅远端音频流和视频流
如果您在入会前没有设置订阅音频流和视频流,则入会后会自动订阅远端的音频流和视频流;如果您在入会前设置取消自动订阅音频流和视频流,则入会后需要调用以下接口进行手动订阅:
// // 对整体操作:全部订阅或者全部不订阅 // // 音频 mRtcEngine.subscribeAllRemoteAudioStreams(true); // false表示不订阅 // 视频 mRtcEngine.subscribeAllRemoteVideoStreams(true); mRtcEngine.setRemoteDefaultVideoStreamType(preferVideoQuality); // 设置拉流最高质量 // // 对个体操作 // // 音频 // SDK目前不支持对个体音频订阅操作 // 视频 mRtcEngine.subscribeRemoteVideoStream(remoteUid, DingRtcEngine.DingRtcVideoTrack.DingRtcVideoTrackCamera, true); // false 表示不订阅 mRtcEngine.SetRemoteVideoStreamType(remoteUid, type); // type: DingRtcVideoStreamTypeFHD, DingRtcVideoStreamTypeHD, // DingRtcVideoStreamTypeSD, DingRtcVideoStreamTypeLD // 表示期望最高订阅规格。实际码流还要受限于拉流侧的网络质量
订阅视频还需要设置窗口以便能够看到视频内容。比较推荐的时机是在onRemoteTrackAvailableNotify消息收到时,也可以提前设置,或者晚些时候设置。
SurfaceView remoteView = mRtcEngine.createRenderSurfaceView(this); DingRtcEngine.DingRtcVideoCanvas canvas = new DingRtcEngine.DingRtcVideoCanvas(); canvas.view = remoteView; canvas.renderMode = DingRtcEngine.DingRtcRenderMode.DingRtcRenderModeCrop; mRtcEngine.setRemoteViewConfig(canvas, remoteUid, DingRtcEngine.DingRtcVideoTrack.DingRtcVideoTrackCamera);
离开频道。
mRtcEngine.leaveChannel();
销毁引擎。
if(mRtcEngine != null) {
mRtcEngine.destroy();
mRtcEngine = null;
}
后续步骤
您可以下载示例代码,快速运行Demo,实现频道内和其他人进行实时音视频通话,详情请参见运行 Android Demo。