本文介绍如何创建一个 Web RTC 项目,实现音视频通话功能。
参考示例项目。
满足以下条件的计算机
查看 Web SDK 的浏览器兼容性。
下载 RTC Web SDK 包。
将 SDK 解压到项目文件目录下。
.
├── index.html
├── package.json
├── index.js
├── lib
└── index.min.js
import VERTC from '@volcengine/rtc'; 引入。<script src="${文件路径}/index.min.js"></script> 引入。例如,<script src="./lib/index.min.js" type="text/javascript"></script>。<script src="https://lf-unpkg.volccdn.com/obj/vcloudfe/sdk/@volcengine/rtc/4.47.6/1672999438774/VolcEngineRTC_Web_4.47.6.js" /> 引入。最新版本 SDK 的 CDN 地址参见资源获取。一次简单的音视频通话的流程图如下:

实现一次简单的音视频通话主要包含以下步骤:
调用 createEngine 创建一个本地 Engine 引擎对象
import VERTC,{IRTCEngine} from '@volcengine/rtc';
// 创建RTC引擎
const engine:IRTCEngine = VERTC.createEngine(appId);
typescript调用 engine.joinRoom 加入房间,配置音视频流是否自动发布、订阅
进房后,你可以调用 subscribeUserStream 修改订阅设置。
import { RoomProfileType } from '@volcengine/rtc';
const config = {
appId: '填写项目的appID',
roomId: '填写roomId',
token: '填写token',
};
const join = () => {
try {
await engine
.joinRoom(
config.token,
config.roomId,
{
userId: config.uid,
},
{
isAutoPublish: true, // 采集音视频时自动发布到房间
isAutoSubscribeAudio: true, // 自动订阅音频
isAutoSubscribeVideo: true, // 自动订阅视频
roomProfileType:RoomProfileType.communication // 普通音视频通话模式,例如,语音聊天室
}
)
} catch(e) {
console.error('进房错误:', e.message);
}
};
typescript调用 startAudioCapture 、startVideoCapture 采集本地音视频后设置本地播放器,并发布。
import { StreamIndex,MediaType } from '@volcengine/rtc';
async createLocalStream(){
await engine.startAudioCapture();
await engine.startVideoCapture();
engine.setLocalVideoPlayer(StreamIndex.STREAM_INDEX_MAIN, {
renderDom: 'local-player'
});
// 如果调用 joinRoom 时在 config 中设置了自动发布,这里就不需要发布了
await engine.publishStream(MediaType.AUDIO_AND_VIDEO)
}
createLocalStream()
typescript监听 onUserPublishStream 事件。以下两种情况你都会收到该事件:
上述事件触发后,远端音视频流对象信息将传入handleUserPublishStream。
调用 setRemoteVideoPlayer 设置远端音视频流播放器。
engine.on(VERTC.events.onUserPublishStream, handleUserPublishStream);// 收到 `VERTC.events.onUserPublishStream` 事件后进行相应处理
async handleUserPublishStream({ userId }){
const player = $(`
<div id="player-wrapper-${userId}" class="player-wrapper re-player">
<p class="player-name">${userId}</p>
</div>
`);
$('#player-list').append(player);
await engine.setRemoteVideoPlayer(VERTC.StreamIndex.STREAM_INDEX_MAIN, {
userId: remoteUserId,
renderDom: player[0],
});
}
typescript成功离开房间后,将不会收到房间内任何消息通知,音视频流的发布和接收也将停止。
engine.leaveRoom();
typescript至此,我们实现了基础的音视频通话。
Web RTC API 概述
Web RTC API 详情
Web RTC API 事件
Web RTC API 错误码
Web RTC API 类型详情