nimeet 文档中心
English

小程序(微信) 快速开始与功能指南

小程序(微信):前置条件、安装、Token、加入频道、发布订阅、事件、错误处理与排障;接口名与签名在构建时取自公开 SDK 接口定义。

接口小节由公开 SDK 接口定义生成

版本 v1.1.0 · 更新于 2026-10-26 · 修订 1

小程序端(微信)提供 TypeScript SDK,公开接口与声网小程序 API 对齐:4 个接口、32 个方法、45 个重载、14 个事件、4 个枚举与 43 条错误码。媒体采集与推拉流由小程序原生组件通过注入的端口提供,SDK 不内置媒体栈。

前置条件

  • 微信开发者工具 + 小程序基础库(live-pusher / live-player 组件可用)。SDK 自身只是 TypeScript,无原生依赖。
  • 一个 App ID 与 Token 服务(见 控制台开通服务与获取凭证)。
  • 平台能力由注入提供:MiniProgramSessionService(频道/Token)、MiniProgramMediaPort(推拉流组件桥)、

可选的 MiniProgramEventSource(组件/长连接事件)与日志上传端点。SDK 不内置媒体栈,也不假装能采集。

安装

将 SDK 的构建产物作为本地依赖引入小程序工程(miniprogram_npm 或直接拷贝到 utils/)。当前以源码方式提供。

获取 Token

Token 由你的后端 POST /v1/tokens 签发,客户端只拿 { appId, rtcToken, rtcUid }。 小程序端的 Client.join(channelKey, channel, uid, isAudioOnly, …) 的第一个参数就是 Token 字符串, 与其它端一致:接口定义层语义见 AccessToken2 语义。

加入频道

javascript
import { Client } from '@nimeet/rtc-miniprogram';

// 平台桥由宿主注入:微信组件、你的后端、以及一个可选的日志上传端点。
const client = new Client({ runtime: { session, media, events } });

await client.init(appId);
await client.join(token, 'channel-a', 1234, /* isAudioOnly */ false);
const pushUrl = await client.publish();      // live-pusher 推流地址
await client.setRole('audience');            // 切观众会作废推流地址(文档语义)
await client.leave();
  • init(appId, onSuccess?, onFailure?):App ID 为空 → 抛 -101(无效 App ID)。
  • join(...):未 init → -7;频道名为空 → -102;uid 非法 → -121;重复加入 → -17。
  • 通道/Token 请求全部走注入的 session,SDK 不直连任何网络。

发布与订阅

javascript
await client.publish();                        // Promise<string>:推流地址,同时把角色设为主播
await client.subscribe(5678, { video: true }); // Promise<{ url, rotation }>:拉流地址与旋转角
await client.unsubscribe(5678);
await client.muteLocal('all');                 // 'audio' | 'video' | 'all'
await client.mute(5678, 'audio');

setRemoteVideoStreamType(uid, 0 | 1) 选择大小流;setAudioCodec(AudioCodec.PCMU | PCMA | G722) 设置 IoT 编码。 未加入频道调用以上方法统一返回 -3(SDK 尚未就绪)。

事件

on(event, callback?) / off(event):14 个事件与兼容版本逐名一致,未知事件名抛 -2。

事件触发来源载荷
stream-added / stream-removed组件/长连接事件源{ uid }
update-url同上{ uid, url }
video-rotation同上{ uid, rotation }
mute-audio / mute-video / unmute-audio / unmute-video同上{ uid }
client-banned服务端踢人事件载荷;同时把客户端状态退回 initialized(并作废推流地址)
token-privilege-will-expire / token-privilege-did-expireToken 状态无载荷(按文档调用 renewToken)
channel-media-relay-event / channel-media-relay-state跨频道转发(本端显式不支持,见下){ code } / { code, state }
error任何异步失败{ code, reason }

on 返回的监听器集合由 off(event) 整体清空;单个监听器抛错不会影响其它监听器。

错误处理

错误对象是 MiniProgramError,code 是负数(与声网文档一致,正数错误码取负):

code含义触发点
-1一般错误平台/后端失败(onFailure 同时收到)
-2参数无效目标不是 audio/video/all、未知事件名、码率/位置等
-3尚未就绪未加入频道就 publish/subscribe/mute
-4当前状态/构建不支持三个跨频道转发方法、Log.uploadLogs(当前版本不支持)
-5请求被拒绝文档语义下的拒绝
-7未初始化未 init 就 join 等
-8状态无效destroy() 之后调用任何方法
-17 / -18加入被拒 / 离开被拒重复 join / 未 join 时 leave
-101 / -102 / -121App ID / 频道名 / uid 非法参数校验
-109 / -110 / -123Token 过期 / Token 无效 / 被服务端封禁平台返回

显式不支持(已在 公开 SDK 接口定义 的 不支持列表 登记,错误码 -4): Client.startChannelMediaRelay、Client.updateChannelMediaRelay、Client.stopChannelMediaRelay(需要 SD-RTN 转发服务,需工单开通)、 Log.uploadLogs(本端没有日志上传端点)。四个方法名都是真实成员,调用会抛 -4,不会静默成功。

排障

现象原因处理
-7没有先 init先 await client.init(appId)
publish() 返回的地址打不开宿主没有注入可用的 live-pusher 桥检查 MiniProgramMediaPort.publish 实现
-4 出现在跨频道转发该能力需要 SD-RTN 转发服务需要转发时联系服务端开通;客户端保持显式拒绝
事件没有回调没有注入 MiniProgramEventSource,或事件名不在 14 个文档事件内注入事件源;未知事件名会抛 -2
枚举没有显式数值StreamType / UidType 只列键实现按声明顺序赋值,业务代码不要依赖具体数值
类型为何只比名字对齐基准把回调写成 function、选项写成 object见本页顶部说明;compare.types = name-only

下一步

平台信息

项值
平台小程序(微信)
语言TypeScript
SDK 包@nimeet/rtc-miniprogram
接口版本2.6.5
兼容参考声网 mini-program 端 API

本端公开接口与声网 mini-program 端 API 对齐;安装与运行要求见上面前置条件。

可用性

该端 SDK:正式可用。本页代码片段使用公开 API;运行时的能力边界以实际发布的 SDK 包为准。

加入频道链路

下列方法名、参数类型与返回值与同端 API 参考一致。一个平台若有多个重载,这里展示最常用的那一个;完整重载见同端 API 参考页。

步骤接口方法重载数
加入频道Clientjoin1
离开频道Clientleave1
发布本地轨道Clientpublish1
续期 TokenClientrenewToken1
订阅远端媒体Clientsubscribe1
typescript
join(channelKey: string, channel: string, uid: number|string, isAudioOnly: boolean, UidType?: UidType, onSuccess?: function, onFailure?: function): Promise<void>
leave(onSuccess?: function, onFailure?: function): Promise<void>
publish(onSuccess?: function, onFailure?: function): Promise<string>
renewToken(token: string, onSuccess?: function, onFailure?: function): Promise<void>
subscribe(uid: number, options?: object, onSuccess?: function, onFailure?: function): Promise<object>

事件与回调

接口事件名监听器参数
Clientchannel-media-relay-eventFunction
Clientchannel-media-relay-stateFunction
Clientclient-bannedFunction
ClienterrorFunction
Clientmute-audioFunction
Clientmute-videoFunction
Clientstream-addedFunction
Clientstream-removedFunction
Clienttoken-privilege-did-expireFunction
Clienttoken-privilege-will-expireFunction
Clientunmute-audioFunction
Clientunmute-videoFunction
Clientupdate-urlFunction
Clientvideo-rotationFunction

错误码

该端 SDK 未提供错误码常量。平台侧错误见 错误码全表,跨端 SDK 错误标识见 各端 SDK 错误标识。

本页由文档构建流水线生成 · 2026-10-31 01:24:02 UTC · 文档中心 v1.1.0.

内容依据公开 API 定义.

ni-meet 是自建 RTC PaaS,媒体面基于 LiveKit(Apache-2.0),并与声网 API 兼容。