小鱼易连Web SDK 4.x版本,此版本是基于v3.x版本架构升级版本,整个改动内容较大,若在项目中因特殊场景产生的集成问题,可以随时和小鱼易连进行沟通解决;
v4.0全新版本升级改动内容概括如下:
在开始升级改动之前,建议先整体浏览介绍文档、视频通话、API介绍、和文档,或者可以直接运行 v4 版本的Web SDK Demo查看运行效果;
因整体改动内容较多,在设计时也尽可能保证历史的兼容处理,但也存在一些流程变动无法兼容,因此请详细阅读此篇升级文档,完成项目版本升级操作;
npm install @xylink/xy-rtc-sdk -S
安装完成后,通过查看package.json文件查看版本是v4.0.0+版本即可;
【旧方式】
旧版本是通过创建 Client 模块执行后续操作,示例如下:
import xyRTC, { Client }from '@xylink/xy-rtc-sdk';
const client: Client = xyRTC.createClient({
clientId: 'xxx',
clientSecret: 'xxx',
extId: 'xxx',
muteAudio: true,
muteVideo: true,
container: {
elementId: 'xxx',
offset: [0, 0],
}
});
【新方式】
由 XYRTC.createClient 创建 XYRTCClient 模块执行后续操作,示例如下:
import XYRTC, { XYRTCClient }from '@xylink/xy-rtc-sdk';
const XYClient: XYRTCClient = XYRTC.createClient({
clientId: 'xxx',
clientSecret: 'xxx',
extId: 'xxx',
...
});
具体改动内容:
1、Client模块类型变更:Client -> XYRTCClient;
2、参数调整:
server
配置服务器地址(IP/域名 + 端口,举例:cloudapi.xylink.com:443),仅需配置一个服务器地址即可,或通过调用 XYRTCClient.setServerAddress 方法设置服务器地址;enableHideLocalView
参数设置初始是否隐藏本地画面;【旧方式】
所有登录方法的错误信息通过 return 返回。示例:
const result = await client.loginExternalAccount({
displayName: 'ThirdName',
extId: 'xxx',
extUserId: 'xxx',
});
if (result.code !== 'XYSDK:950120') {
message.info('登录失败');
return;
}
【新方式】
所有登录方法的错误信息通过 Promise.reject 上报,调用方法时可以通过 catch 处理错误信息,具体可参考API文档,示例:
try {
await XYClient.loginExternalAccount({
displayName: 'ThirdName',
extId: 'xxx',
extUserId: 'xxx',
});
} catch(error) {
message.info(error.msg || '登录失败');
}
【旧方式】
旧方式是通过调用 Client.makeCall 方法返回 callStatus 判断是否成功,如果 callStatus 的值为 true,则可继续后续流程,示例:
const callStatus = await client.current.makeCall({
token: 'xxx',
confNumber: 'xxx',
password: 'xxx',
displayName: 'xxx'
});
if (callStatus) {
...
}
【新方式】
新版本 XYRTCClient.makeCall 整体通过 Promise 函数处理结果,遇到错误时通过 catch 处理错误信息,否则正常执行后续操作,示例如下:
try {
await XYClient.makeCall({
confNumber: 'xxx',
password: 'xxx',
displayName: 'xxx',
muteAudio: false,
muteVideo: false
});
} catch (error) {
message.info(error.msg);
}
具体改动内容:
【旧方式】
示例:
const stream = xyRTC.createStream();
await stream.current.init({
devices: {
audioInputValue: '',
audioOutputValue: '',
videoInValue: '',
},
})
【新方式】
新版本通过 XYRTCClient.createVideoAudioTrack 创建 VideoAudioTrack 轨道方式管理音视频流,示例:
const videoAudioTrack = await XYClient.createVideoAudioTrack();
// 设备切换
videoAudioTrack.on('device', (e: IDeviceManagerChangeValue) => {});
// 设备权限
videoAudioTrack.current.on('permission', (e: ICurrentPermission) => {});
// Track错误事件
videoAudioTrack.current.on('track-error', (e: IReturnResult) => {});
await videoAudioTrack.capture({
audioInputId: 'xxx',
audioOutputId: 'xxx',
videoInputId: 'xx'
});
具体改动内容:
【旧方式】
基于上一步获取到Stream进行推流,示例:
client.publish(stream, { isSharePeople: true });
【新方式】
基于上一步获取到的videoAudioTrack,使用 XYRTCClient.publish 进行推流,示例:
XYClient.publish(videoAudioTrack);
具体改动:
【旧方式】
自定义布局数据通过监听 custom-layout 事件上报数据,示例如下:
// 自定义布局
client.on('custom-layout', (e:ILayout) => {});
// 自动布局
client.on('layout', (e:ILayout) => {});
【新方式】
统一通过 layout 事件上报,示例:
// 自动布局、自定义布局
XYClient.on('layout', (e: ILayout) => {});
具体改动内容:
1、v4.x+版本,统一使用 layout 事件上报布局结果,不再区分布局方式;
2、事件回调参数变动
【旧方式】
监听 layout 事件,使用Layout列表数据进行视频渲染,layout.roster.id 作为Video的 id,示例:
layout
.filter((item) => item.pollingState !== AutoState.NULL)
.map((item: ILayout) => {
const { id } = item.roster || {};
return (
<Video item={item} key={id} id={id} ... />
);
})
【新方式】
监听 layout 事件,使用Layout列表数据进行视频渲染,layout.id 作为Video的 id ,具体可参考文档, 示例:
layout
.filter((item) => item.pollingState !== AutoState.NULL)
.map((item: ILayout) => {
const { id } = item || {};
return (
<Video item={item} key={id} id={id} ... />
);
})
具体改动内容:
【旧方式】
旧方式通过创建 Stream 模块,调用 Stream.createContentStream 方法创建共享视频流,示例如下:
// 发起共享
const shareContent = async () => {
try {
if (stream && client) {
const result = await stream.createContentStream({ screenAudio: true });
if (result) {
setLocalShareContent(true);
stream.current.on('start-share-content', () => {
client.publish(stream, { isShareContent: true });
});
stream.on('stop-share-content', () => {
stopShareContent();
});
} else {
message.info('分享屏幕失败');
}
} else {
message.info('分享屏幕失败');
}
} catch (err: any) {
if (err && err.code !== 'XYSDK:950501') {
message.info(err.msg || '分享屏幕失败');
}
}
};
// 结束共享
const stopShareContent = () => {
client.stopShareContent();
setLocalShareContent(false);
};
【新方式】
新版本通过 XYRTCClient.createContentTrack 创建 ContentTrack 模块创建和管理共享音视频流,示例:
let contentTrack;
// 发起共享
const shareContent = async () => {
try {
// 创建Track
contentTrack = await XYClient.createContentTrack();
// 监听事件
contentTrack.on('start-share-content', () => {
XYClient.publish(contentTrack.current as ContentTrack);
});
// 监听事件
contentTrack.on('stop-share-content', () => {
stopShareContent();
});
contentTrack.on('track-error', (e: IReturnResult) => {
const { msg = '' } = e;
msg && message.info(msg);
});
// 采集共享视频流
await contentTrack.capture({ screenAudio: true });
setLocalShareContent(true);
} catch (err) {
stopShareContent();
}
};
// 结束共享
const stopShareContent = () => {
if (contentTrack) {
contentTrack.close();
contentTrack = null;
}
};
具体改动内容:
新版本SDK不再导出 DeviceManager 模块,使用 XYRTCCilent 模块创建会前设备管理、预览等功能;
具体改动内容:
具体改动内容:
具体改动:
详细变动和新增信息可查看更新日志;