直播中台WebRTC SDK。如需接入,联系兰龙刚(lanlonggang@tal.com)
Omni_WebRTC
引入SDK
- ES Module引入
import getRTCEngine from 'omnirtc-web';
加入RTC房间
/**
* 获取token,
* 获取方式参考 https://wiki.zhiyinlou.com/pages/viewpage.action?pageId=30835986
* 有问题联系周伟伟(zhouweiwei3@tal.com)老师
**/
const token = 'token';
// 获取引擎实例
// engine API详细 https://dev-webrtc.weclassroom.com/doc/classes/CoreRTC.CoreRTC-1.html
const engine = getRTCInstance(token);
// 加入RTC房间
// client API详细 https://dev-webrtc.weclassroom.com/doc/classes/Client.Client-1.html
const client = engine.createClient({
mode: 'live',
codec: 'h264'
});
// 监听会议相关事件
client.on('user-joined', (user) => {
console.log('有用户加入房间。', user.uid)
})
client.on('user-left', (user, reason) => {
console.log('用户离开房间了。', user.uid)
})
// 有其他用户开始推流了
client.on('user-published', async (user, mediaKind) => {
console.log('用户开始推流了。', user.uid, mediaKind)
// 在这里就可以拉取该用户的流了,也可以先保存user,延后再拉。
const track = await client.subscribe(user, mediaKind);
console.log('媒体流已就绪,可以播放。', user.uid, mediaKind);
if (mediaKind === 'audio') {
track.play();
}
if (mediaKind === 'video') {
track.play('video-dom');
}
})
client.on('user-unpublished', (user, mediaKind) => {
console.log('用户停止推流了。', user.uid, mediaKind)
})
client.join().then((uid) => {
console.log('您已经加入房间了。您的用户ID:', uid)
});
...
推送媒体流
- 推送媒体流必须在调用
client.join
之后// 打开摄像头和麦克风 const tracks = await engine.createMicrophoneAndCameraTracks(); // 推送音视频流 await client.publish(tracks);
拉取远端流
必须在收到远端用户
user-published
之后再调用client.subsribe
// 拉取远端用户音频流 const audioTrack = await client.subscribe(user, 'audio'); audioTrack.play(); // 拉取远端用户视频流 const videoTrack = await client.subscribe(user, 'video'); videoTrack.play('video-dom');
注意事项
- 建议开发者捕获播放失败的事件
engine.onAudioAutoplayFailed = () => { console.log('音频播放失败。') // 建议用户和页面交互后再调用track.play() // 参考https://www.jianshu.com/p/c3c6944eed5a }
火山封装层版本更新记录
v1.0.0 - 2024.2.22
首次交付版本
v1.0.1 - 2024.2.29
修复 VolcLocalAudioTrack.setPlaybackDeivce() 问题
v1.1.0 - 2024.3.13
新增屏幕共享能力
v1.1.1 - 2024.3.15
为 encoderConfig 添加检测
v1.1.2 - 2024.3.21
修复第二次共享屏幕报错
v1.1.3 - 2024.3.28
setDevice() 的同时检测发布状态