Skip to content

迁移指南

从旧版 WetRTC 迁移到 v4.0。

主要变更

v4.0 是一次彻底重写,核心变化:

方面v3.xv4.0
架构单体类门面 + 子系统(Signal/Media/Data/Stats)
信令内置 WebSocketSignalChannel 接口(任意传输)
状态管理字符串状态有限状态机(防非法调用)
事件系统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,
  },
})

也可单独使用工具函数 applyVideoSenderEncodingapplyAudioSenderEncodingapplyH264CodecPreferenceapplyOpusCodecPreferenceapplyReceiverPlayoutDelay 等,详见 低延迟屏幕共享音频编码调优

Released under the MIT License.