有两种方式:
1)下载并保存 SDK 中 index.js 的文件到项目目录,使用 script 标签引入
<script type="text/javascript" src="index.js"></script>
2)使用全局对象 URTC 创建 client
const client = URTC.createClient(appId);
npm install --save @urtc/sdk-web
或
yarn add @urtc/sdk-web
2)项目中引入并创建 client
import { createClient, createStream } from '@urtc/sdk-web';
const client = createClient(appId);
注:创建 client 时传的 token 需要使用 AppId 和 AppKey 等数据生成,测试阶段,可临时使用 sdk 提供的 generateToken 方法生成,但为保证 AppKey 不暴露于公网,在生产环境中强烈建议自建服务,由服务器按规则生成 token 供 sdk 使用。
client.on('stream-published', (evt) => {
console.log(`流发布完成`, evt.data);
}); // 监听本地流发布成功事件,在当前用户执行 publish 后,与服务器经多次协商,成功后会触发此事件
client.on('stream-subscribed', (evt) => {
console.log(`流订阅完成`, evt.data);
evt.data.play(container).catch((err) => {
console.log(`流播放失败 ${err}`);
});
// 此处 container 代表播放发布流的外层容器元素,也可以是这个外层容器元素的 ID,而外层容器一般是一个设置了宽高的 div 元素,请根据实际情况进行传值
}); // 监听远端流订阅成功事件,在当前用户执行 subscribe 后,与服务器经多次协商,成功后会触发此事件
client.on('stream-added', (evt) => {
console.log(`有远端流加入`, evt.data);
client.subscribe(evt.data).catch((err) => {
console.log(`远端流订阅失败 ${err}`);
});
}); // 监听新增远端流事件,在远端用户新发布流后,服务器会推送此事件的消息。注:当刚进入房间时,若房间已有的正在发布的流,也会通过此事件通知业务侧
client.on('stream-removed', (evt.data) => {
console.log(`有远端流移除`, evt.data);
// 请自行删除在页面中删除播放该流的外层容器元素 - container
}); // 监听移除的远端流事件,在远端用户取消推流或流已关闭时,服务器会推送此事件的消息。
const localStream = createStream({audio: true, video: true, screen: false});
localStream.init().then(() => {
localStream.play(container).catch((err) => { // container 如上面所说
console.log(`播放失败 ${err}`)
});
})
.catch((err) => {
console.log(`本地流初始化 ${err}`); // 可能存在的错误有:无音视频设备、未授权访问音视频设备、设备被其他应用占用等等
});
client.join('roomId', 'userId', 'token').then(() => { // 默认为会议模式(小班课 - conference),若为直播模式(大班课 - live)时,需要传入第四个参数 { type: 'live' },更多配置见 sdk API 说明
client.publish(localStream).catch((err) => {
console.log(`发布失败 ${err}`);
});
}).catch((err) => {
console.log(`加入房间失败 ${err}`);
});
client.unpublish(localStream).then(() => {
console.log(`取消发布成功`);
// 可根据需求是否对该流进行销毁,若需销毁,可调用 localStream.destroy();
}).catch((err) => {
console.log(`取消发布失败 ${err}`);
});
client.unsubscribe(remoteStream).catch((err) => { // 此方法仅处理本端主动取消订阅远端流的操作,对于被远端取消发布的远端流将通过 stream-removed 事件通知到本端,本端不需要额外的 unsubscribe 操作
console.log(`取消订阅失败 ${err}`);
});
client.leave().then(() => {
console.log('离开房间成功');
}).catch((err) => {
console.log(`离开房间失败 ${err}`);
});