迁移指南
从旧版 WetRTC 迁移到 v4.0。
主要变更
v4.0 是一次彻底重写,核心变化:
| 方面 | v3.x | v4.0 |
|---|---|---|
| 架构 | 单体类 | 门面 + 子系统(Signal/Media/Data/Stats) |
| 信令 | 内置 WebSocket | SignalChannel 接口(任意传输) |
| 状态管理 | 字符串状态 | 有限状态机(防非法调用) |
| 事件系统 | EventEmitter | 强类型 TypedEmitter |
| 资源管理 | 手动清理 | DisposableStack 自动逆序释放 |
| 重连 | 无 | 指数退避自动重连 |
| 统计 | 无 | StatsMonitor 实时采集 + 诊断 |
| 文件传输 | 无 | DataManager 内置分片传输 |
| 类型安全 | 部分 | 完整 TypeScript 类型定义 |
迁移步骤
1. 信令通道
v3.x:内置 WebSocket
ts
const rtc = new WetRTC({ url: 'wss://signal.example.com' })v4.0:实现 SignalChannel 接口
ts
const signal: SignalChannel = {
async send(data) { ws.send(JSON.stringify(data)) },
onMessage(handler) {
const listener = (e) => handler(JSON.parse(e.data))
ws.addEventListener('message', listener)
return () => ws.removeEventListener('message', listener)
}
}
const rtc = new WetRTC({ signal })2. 事件监听
v3.x:
ts
rtc.on('connected', () => {})
rtc.on('disconnected', () => {})v4.0:统一为 statechange
ts
rtc.on('statechange', (state, prev) => {
if (state === 'connected') { /* ... */ }
})3. 媒体操作
v3.x:
ts
rtc.startCamera()
rtc.startScreenShare()v4.0:通过 rtc.media 子系统
ts
const stream = await rtc.media.getUserMedia({ video: true, audio: true })
const screen = await rtc.media.getDisplayMedia()
for (const track of stream.getTracks()) {
rtc.addTrack(track, stream)
}4. 销毁
v3.x:
ts
rtc.close()v4.0:
ts
// 断开但可重连
await rtc.disconnect()
// 彻底销毁
rtc.dispose()完整迁移示例
ts
// ── v3.x ──
const rtc = new WetRTC({ url: 'wss://signal.example.com' })
rtc.on('connected', () => console.log('connected'))
rtc.startCamera()
await rtc.connect()
// ── v4.0 ──
const signal: SignalChannel = {
async send(data) { ws.send(JSON.stringify(data)) },
onMessage(handler) {
const listener = (e) => handler(JSON.parse(e.data))
ws.addEventListener('message', listener)
return () => ws.removeEventListener('message', listener)
}
}
const rtc = new WetRTC({ signal })
rtc.on('statechange', (state) => {
if (state === 'connected') console.log('connected')
})
const stream = await rtc.media.getUserMedia({ video: true, audio: true })
for (const track of stream.getTracks()) {
rtc.addTrack(track, stream)
}
await rtc.connect()低延迟屏幕共享(v4.0+ 新增)
v4.0 起支持屏幕共享场景的发送端编码调优与 H.264 / Opus 编解码器偏好:
ts
const rtc = new WetRTC({
signal,
direction: 'sendonly',
preferredVideoCodec: 'h264',
preferredAudioCodec: 'opus',
videoEncoding: {
contentHint: 'motion',
maxFrameRate: 30,
maxBitrate: 4_000_000,
degradationPreference: 'maintain-framerate',
},
audioEncoding: {
maxBitrate: 64_000,
},
})也可单独使用工具函数 applyVideoSenderEncoding、applyAudioSenderEncoding、applyH264CodecPreference、applyOpusCodecPreference、applyReceiverPlayoutDelay 等,详见 低延迟屏幕共享 与 音频编码调优。