DingRTC的基本功能包含初始化SDK、加入频道、本地发布、订阅远端和离开频道等。通过阅读本文,您可以了解DingRTC的基本功能。
前提条件
您已下载并集成最新版本的SDK。具体操作,请参见如何在鸿蒙端集成音视频通信SDK。
您已获取加入频道必需的频道鉴权令牌(Token)。具体操作,请参见使用Token鉴权。
操作步骤
初始化SDK。
您需要创建DingRtcSDK实例,并注册回调。具体回调接口请参见回调及监听。
createRtc(context: Context,level?: number, dir?: string): void { if(!dingRtc) { if(level) DingRtcSDK.setLogLevel(level) if(dir) DingRtcSDK.setLogDir(dir) dingRtc = DingRtcSDK.create(context); dingRtc.setEventListener(new ChatRtcEventListener()); } }
本地预览。在创建完DingRtcSDK实例后,您可以创建canvas布局进行本地预览视频。
let canvas: DingRtcConstants.RtcEngineVideoCanvas = {xComponentId: user.uid + '_camera'} if(track == DingRtcConstants.RtcEngineVideoTrack.RtcEngineVideoTrackCamera) { canvas = {xComponentId: user.uid + '_camera', renderMode:this.renderMode} user.cameraCanvas = canvas; } else if(track == DingRtcConstants.RtcEngineVideoTrack.RtcEngineVideoTrackScreen) { canvas = {xComponentId: user.uid + '_screen', renderMode:this.renderMode} } dingRtc?.setLocalViewConfig(canvas,track); dingRtc?.startPreview();
可选:取消本地预览。
dingRtc?.stopPreview();
设置发布与订阅。
SDK在入会时不会自动推流。想要入会即推流的话,在app里实现
new DingRtcEventListener() { onJoinChannelResult(result: number, channel: string, userId: string, elapsed: number): void { console.info(TAG, `onJoinChannelResult: ${result}, elapsed: ${elapsed}`) if(result == DingRtcConstants.ErrorCode.NoError) { dingRtc?.publishLocalVideoStream(true); dingRtc?.publishLocalAudioStream(true); } } }
SDK默认入会后自动订阅远端的音频流与视频流,如果您不希望自动订阅音频与视频,可以在入会前通过以下接口设置:
// 设置自动拉流,以及视频清晰度 // 这些值根据需要配置 boolean autoSubAudio = true; boolean autoSubVideo = true; DingRtcConstants.RtcEngineVideoStreamType preferVideoQuality = DingRtcConstants.RtcEngineVideoStreamType.RtcEngineVideoStreamTypeFHD; dingRtc?.subscribeAllRemoteAudioStreams(autoSubAudio); dingRtc?.subscribeAllRemoteVideoStreams(autoSubVideo); dingRtc?.setRemoteDefaultVideoStreamType(preferVideoQuality);
加入频道。
let authInfo = new DingRtcConstants.AuthInfo(); authInfo.channelId = login.cname; /* 频道ID */; authInfo.userId = login.uid; /* 用户ID */; authInfo.appId = login.appId; /* 应用ID */; authInfo.token = login.token; /* 频道鉴权令牌Token */; authInfo.gslbServer = login.gslbServer; /* GSLB地址 */; ret = dingRtc?.joinChannel(authInfo, login.uname /* 显示名称 */)
参数
描述
appId
应用ID,在控制台应用管理页面创建和查看。
channelId
频道ID。1~64位,由大小写字母、数字、下划线(_)、短划线(-)组成。
userId
用户ID。1~64位,由大小写字母、数字、下划线(_)、短划线(-)组成。
说明同一个用户ID在其他端登录,先入会的端会被后入会的端踢出频道。
token
频道鉴权令牌。
gslbServer
服务地址,可为空,默认值为:
"https://gslb.dingrtc.com"
,请您通过业务服务器下发到客户端SDK,不建议您将该地址固化在客户端代码。发布或取消发布本地流。
入会之后,也可以改变推流状态。
发布本地音频流和视频流
如果此时没有推流,可以调用以下接口进行发布音频或者视频:
dingRtc?.publishLocalVideoStream(true); dingRtc?.publishLocalAudioStream(true);
或者取消推流
dingRtc?.publishLocalVideoStream(false); dingRtc?.publishLocalAudioStream(false);
音频和视频可以独立控制。
订阅或取消订阅远程流。
订阅远端音频流和视频流
如果您在入会前没有设置订阅音频流和视频流,则入会后会自动订阅远端的音频流和视频流;如果您在入会前设置取消自动订阅音频流和视频流,则入会后需要调用以下接口进行手动订阅:
// // 对整体操作:全部订阅或者全部不订阅 // // 音频 dingRtc?.subscribeAllRemoteAudioStreams(true); // false表示不订阅 // 视频 dingRtc?.subscribeAllRemoteVideoStreams(true); dingRtc?.setRemoteDefaultVideoStreamType(preferVideoQuality); // 设置拉流最高质量 // // 对个体操作 // // 音频 // SDK目前不支持对个体音频订阅操作 // 视频 dingRtc?.subscribeRemoteVideoStream(remoteUid, DingRtcConstants.RtcEngineVideoTrack.RtcEngineVideoTrackCamera, true); // false 表示不订阅 dingRtc?.SetRemoteVideoStreamType(remoteUid, type); // type: DingRtcVideoStreamTypeFHD, DingRtcVideoStreamTypeHD, // DingRtcVideoStreamTypeSD, DingRtcVideoStreamTypeLD // 表示期望最高订阅规格。实际码流还要受限于拉流侧的网络质量
订阅视频还需要设置窗口以便能够看到视频内容。比较推荐的时机是在onRemoteTrackAvailableNotify消息收到时,也可以提前设置,或者晚些时候设置。
let canvas: DingRtcConstants.RtcEngineVideoCanvas = {xComponentId: user.uid + '_camera'} if(track == DingRtcConstants.RtcEngineVideoTrack.RtcEngineVideoTrackCamera) { canvas = {xComponentId: user.uid + '_camera', renderMode:this.renderMode} user.cameraCanvas = canvas; } else if(track == DingRtcConstants.RtcEngineVideoTrack.RtcEngineVideoTrackScreen) { canvas = {xComponentId: user.uid + '_screen', renderMode:this.renderMode} } let isLocal = user.uid === this.login?.uid if(isLocal) { let ret = dingRtc?.setLocalViewConfig(canvas,track); console.info(TAG, `attachRender setLocalViewConfig ret:${ret}`) } else { let ret = dingRtc?.setRemoteViewConfig(canvas,user.uid,track); console.info(TAG, `attachRender setRemoteViewConfig ret:${ret}`) }
离开频道。
dingRtc?.leaveChannel();
销毁引擎。
release() {
dingRtc?.release()
dingRtc = null
console.info(TAG, 'Call release done.')
}
后续步骤
您可以下载示例代码,快速运行Demo,实现频道内和其他人进行实时音视频通话,详情请参见