集成SDK之前请首先在DevEco创建您的项目,如果您已有DevEco项目,可直接集成SDK。
entry/oh-package.json5
{
"name": "entry",
"version": "1.0.0",
"description": "Please describe the basic information.",
"main": "",
"author": "",
"license": "",
"dependencies": {
"@xylink/xyhmsdk": "file:../XYHMLibs/xyhmsdk.har",
"@xylink/uikit": "file:../XYHMLibs/uikit.har",
"@xylink/base": "file:../XYHMLibs/base.har",
"@xylink/layout": "file:../XYHMLibs/layout.har",
"@xylink/meetingkit": "file:../XYHMLibs/meetingkit.har",
}
}
oh-package.json5
{
"modelVersion": "5.0.0",
"license": "",
"devDependencies": {
"@ohos/hypium": "1.0.6"
},
"overrides": {
"@xylink/xyhmsdk": "file:./XYHMLibs/xyhmsdk.har",
"@xylink/uikit": "file:./XYHMLibs/uikit.har",
"@xylink/base": "file:./XYHMLibs/base.har",
"@xylink/layout": "file:./XYHMLibs/layout.har",
"@xylink/meetingkit": "file:./XYHMLibs/meetingkit.har",
},
"author": "",
"name": "xyhmsdkdemo",
"description": "Please describe the basic information.",
"main": "",
"version": "1.0.0",
"dependencies": {}
}
权限申请,使用SDK需申请以下权限
entry/src/module.json5
"requestPermissions": [
{
"name": "ohos.permission.INTERNET",
},
{
"name": "ohos.permission.KEEP_BACKGROUND_RUNNING",
},
{
"name" : "ohos.permission.MICROPHONE",
"reason": "$string:app_name",
"usedScene":
{
"when":"always"
}
},
{
"name": "ohos.permission.CAMERA",
"reason": "$string:app_name",
"usedScene":
{
"when":"always"
}
}
]
后台运行权限需要单独配置
entry/src/module.json5
"abilities": [
{
...
"backgroundModes": [
"audioRecording",
"audioPlayback"
],
...
}
]
音视频通话的API调用时序图如下:
在调用API之前需要进行初始化,您需要在该步骤中填入项目的enterpriseId,如果您已经完成准备工作中的内容,则可以从管理平台获取到enterpriseId。 在调用init方法即可初始化xylinkSDK:
XYSDKConfigInfo 需自行继承 XYSDKConfig协议, 可参考demo实现
async initSDK(): Promise<XYSDKError> {
return new Promise((resolve, reject)=> {
let xySdkConfig: XYSDKConfig = new XYSDKConfigInfo();
xySdkConfig.cloudServer = this.host;
xySdkConfig.useNativeCamera = false;
xySdkConfig.forceApiGateway = true;
xySdkConfig.clientId = this.clientId;
xySdkConfig.clientSecret = this.clientSecret;
xySdkConfig.eid = this.extId;
xySdkConfig.logFolder = getContext(this).filesDir;
xySdkConfig.appDataDir = getContext(this).filesDir;
const error = XYRTCEngine.getInstance().init(xySdkConfig)
resolve(error);
});
}
第三方账号登录方法定义:XYRTCEngineIF
/**
* 使用第三方账户登录
* @param extUserId 三方用户ID,同一企业不能相同
* @param displayName 显示名称,不能包含以下字符 ';' ':' ',' '=' '-' '(' ')' '[' ']' '{' '}' '@' '#' '*' '\\' '\r' '\n' '\t'
*/
loginExternalAccount(extUserId: string, displayName: string): void;
第三方账号登录的示例代码如下:XYLoginViewModel
/**
* 三方用户ID 登录
*/
loginExternalAccount(): void {
XYRTCEngine.getInstance().loginExternalAccount(this.userId, this.userName);
}
/**
* 登录状态回调
* @param loginState
* @param accountInfo
* @param error
*/
onLoginStateChanged(loginState: XYSDKLoginState, accountInfo: XYSDKAccountInfo, error: XYSDKError): void {
Logger.info(TAG, "onLoginStateChanged loginState: " + loginState + ",error: " + error);
if (loginState === XYSDKLoginState.LoggedIn) {
// 登录成功
} else if (loginState === XYSDKLoginState.LoggingError) {
XYToast.showToast(`登录失败! 错误码 ${error}`);
}
}
登录成功之后, (建议在ws链接成功之后发起呼叫),可以调用makecall方法发起呼叫,方法定义:
/**
* ws链接状态
* @param state
*/
onNetworkStateChanged(state: XYSDKNetworkState): void {
this.wsConnected = state.connected;
}
/**
* 呼叫
* @param callConfig
*/
makeCall(callConfig: XYSDKCallConfig): void;
呼叫成功之后,需要通过 XYRTCEngine.getInstance().addDelegate(this); 方法监听会议事件,根据事件回调信息进行相应的业务处理:
joinMeetingClick() {
const callConfig: XYSDKCallConfig = {
number: this.number,
meetingPwd: this.passWorld,
displayName: "",
liveId: "",
callModel: XYSDKCallMode.AudioVideo,
scheduleEventId: "",
videoMute: this.videoMute,
audioMute: this.audioMute
}
XYRTCEngine.getInstance().addDelegate(this);
XYRTCEngine.getInstance().makeCall(callConfig);
}
onCallStateChanged(callStateInfo: XYSDKCallStateInfo): void {
}
会议连接之后,需要进行请流、布局、渲染等操作,具体流程可以参考基础功能章节。
您可以根据业务场景选择挂断呼叫的时机,挂断的方法定义:
/**
* 挂断
*/
hangup(): void;
如果用户已完全退出您的应用,需要对SDK进行销毁。
/**
* 关闭SDK
*/
shutdown(): void;