- 文档首页
实时音视频
实时音视频
快速入门
实现音视频通话
微信小程序
微信小程序
本文介绍如何创建一个微信小程序 RTC 项目,实现音视频通话功能。
前提条件
开始前,请确保你的开发环境满足如下条件:
调试 RTC 微信小程序 Demo 过程中,需要使用小程序的 live-pusher 和 live-player 功能标签,用于支持音视频上行和下行(播放)能力,目前微信只向特定行业的认证企业账号开放这两个标签的使用。 - 微信 App iOS 最低版本要求:6.5.21
- 微信 App Android 最低版本要求:6.5.19
- 在开发阶段,你可以在控制台生成并使用临时 Token。正式上线后,Token 应由你的应用服务端生成,下发到你的应用客户端。应用客户端在加入 RTC 房间时,必须携带正确的 Token。你可以通过阅读密钥说明了解更多 Token 相关。
步骤 2:开通小程序组件权限
进入微信公众平台 -> 【</> 开发】 -> 【接口设置】,打开 实时播放音视频流 和 实时录制音视频流 的开关。
步骤 3:配置服务器域名
进入微信公众平台 -> 【</> 开发】 -> 【开发设置】,将如下域名配到服务器域名里: - request 合法域名 :以 https 开头的域名
https://common.rtc.volcvideo.com;
https://common-hl.rtc.volcvideo.com;
- socket 合法域名 :以 wss 开头的域名
wss://ws.rtc.volcvideo.com;
wss://ws-hl.rtc.volcvideo.com;
步骤 4:集成小程序 SDK
- 将解压后的 SDK 包复制到项目 ../lib 路径下。
为方便维护,建议重命名 SDK 包文件,例如(miniapp-rtc.min.js,不带版本号)。当未来升级 SDK时,你只需要替换这个文件即可,而不需要修改任何引用了该文件的代码(如 import 或 require 语句)。
│ ├── miniapp-rtc.min.js
- 使用 require 将小程序 SDK 集成到你的项目中。
const VolcMiniappSdk = require('../../lib/miniapp-rtc.min.js');
步骤 5:实现功能
参考如下流程,完成你的项目。
创建 client 对象
通过 new Client 创建 client 对象。client 接口中包含的成员函数提供了音视频通话的核心功能,例如进入房间、发布和订阅音视频流等。
将以下示例代码加入到 meeting.ts 中。
this.client = new VolcMiniappSdk.Client();
this.client.init(APPID) // APPID 的获取方式详见【步骤1】。
进入房间
将以下示例代码加入到 meeting.ts 中。
this.client.join(TOKEN, ROOMID, USERID) // Token 的获取方式详见【步骤1】
ROOMID 和 USERID 在同一 AppID 下唯一,你需要自行维护,参见赋值规范。 发布音视频流
- 在 meeting.json 中添加以下示例代码。
"v-pusher": "../../components/v-pusher/v-pusher"
this.client.publish().then(url => {
- 在 meeting.wxml 中添加以下示例代码。
enable-camera="{{true}}"
bind:pusherstatechange="pusherStateChange"
bind:pushernetstatuschange="pusherNetStatusChange"
const target = e.detail;
this.client.reportPusherStateChange(
pusherNetStatusChange(e) {
const info = e?.detail?.detail?.info;
this.client.reportPusherNetStatusChange(info);
订阅远端音视频流
订阅流要在加入房间成功之后。
- 在 meeting.json 中添加以下示例代码。
"v-pusher": "../../components/v-pusher/v-pusher",
"v-player": "../../components/v-player/v-player"
subscribe(uid, screen) {
this.client.subscribe(uid, { screen }).then(url => {
...this.data.remoteStreams,
id: `${uid}-${screen ? 1 : 0}`
this.client.removeAllListeners();
this.client.on(VolcEngineRTCMiniappSDK.EVENTS.STREAM_ADDED, (e) => {
const { uid, screen } = e;
this.subscribe(uid, screen)
- 在 meeting.wxml 中添加以下示例代码。
<view wx:for="{{remoteStreams}}" wx:key="id" class="player-container">
screen="{{item.screen ? 1 : 0}}"
bind:playerstatechange="playerStateChange"
bind:playernetstatuschange="playerNetStatusChange"
playerNetStatusChange(e) {
const uid = e?.detail?.uid;
const info = e?.detail?.e?.detail?.info;
this.client.reportPlayerNetStatusChange(uid, info);
const uid = e?.detail?.uid;
this.client.reportPlayerStateChange(
e?.detail?.e?.detail?.code,
e?.detail?.e?.detail?.message,
传入参数如下:
将以下示例代码加入到v-pusher.wxml中。
<view class="pusher-view">
background-mute: true 进入后台静音(兼容旧版本)
其他配置请参考小程序文档: https://developers.weixin.qq.com/miniprogram/dev/component/live-pusher.html
bindstatechange="bindstatechange"
bindnetstatus="bindnetstatus"
enable-camera="{{enableCamera}}"
enable-mic="{{enableMic}}"
{{state === 'init' ? '相机启动中' : state === 'error' ? '相机启动失败' : ''}}
将以下示例代码加入到v-pusher.js中。
// init: 启动中 ok: 正常推流 error: 推流失败
if (!this.livePusherContext) {
this.livePusherContext = wx.createLivePusherContext(this);
if (this.livePusherContext) {
this.livePusherContext.stop();
switchCamera: function () {
if (this.livePusherContext) {
this.livePusherContext.switchCamera();
bindstatechange: function (e) {
this.triggerEvent('pusherstatechange', e);
if (e.detail.code === -1307) {
if (e.detail.code === 1008) {
if (this.data.state === 'init') {
bindnetstatus: function (e) {
this.triggerEvent('pushernetstatuschange', e);
传入参数如下:
将以下示例代码加入到v-player.wxml中。
<view class="player-view">
background-mute: true 进入后台静音(兼容旧版本)
其他配置请参考小程序文档: https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html
id="v-player-{{uid}}-{{screen}}"
bindstatechange="bindstatechange"
bindnetstatus="bindnetstatuschange"
{{state === 'init' ? '播放器启动中' : state === 'error' ? '播放器启动失败' : ''}}
将以下示例代码加入到v-player.js中。
// '0' camera stream '1' screen stream
// init: 启动中 ok: 正常推流 error: 推流失败
if (!this.livePlayerContext) {
this.livePlayerContext = wx.createLivePlayerContext(
`v-player-${this.data.uid}-${this.data.screen}`,
if (this.livePlayerContext) {
this.livePlayerContext.stop();
bindstatechange: function (e) {
this.triggerEvent('playerstatechange', { uid: this.data.uid, e });
if (e.detail.code === 2004) {
if (this.data.state === 'init') {
} else if (e.detail.code === -2301) {
bindnetstatuschange: function (e) {
this.triggerEvent('playernetstatuschange', { uid: this.data.uid, e });
步骤 6:运行和验证
- 打开微信开发者工具,点击小程序界面的【 + 】。
- 在创建项目的界面中填入你的项目名称、目录、微信小程序的 App ID 等信息,点击【确定】。
-
- 完成开发后,微信开发者工具上会出现小程序项目的界面。选择【真机调试】。点击右上角的【真机调试】,工具界面会出现一个真机调试的二维码。
- 使用移动端微信 App 扫描二维码,进入调试界面。
相关文档
最近更新时间:2026.09.21 16:42:01