概述
当需要在采集到发布之间对音视频做额外处理(如 AI 降噪、美颜、变声)时,SDK 提供统一的处理器(Processor)机制。 第一性原理:一个处理器的本质就是「输入一条MediaStreamTrack,输出一条处理后的 MediaStreamTrack」。SDK 只需在本地轨道上提供挂载点,处理逻辑由插件实现,二者通过 TrackProcessor 接口解耦。
处理器以独立 npm 包形式分发,例如 RNN 降噪插件 @seastart/srtc-plugin-rnnoise。
挂载与卸载
本地音频/视频轨道(LocalMicTrack、LocalCameraTrack、自定义轨道等)都提供两个方法:
replaceTrack 免重协商地切换,远端无感知。
多处理器串联
setProcessor 接受数组,按顺序串联多个处理器(源 → P1 → P2 → … → 发布)。常见组合:先降噪再变声。
ProcessorPipeline 把多个处理器收敛成一个;音频链会共享同一个 AudioContext,减少多级处理的开销。也可直接使用 ProcessorPipeline:
编写自定义处理器
实现TrackProcessor 接口即可接入:
ProcessorOptions 字段:
| 字段 | 类型 | 说明 |
|---|---|---|
track | MediaStreamTrack | 源轨道(采集得到的原始轨道) |
kind | TrackKind | 轨道类型(audio / video) |
audioContext | AudioContext? | 串联场景下由 ProcessorPipeline 传入的共享上下文,应优先复用 |
编写音频处理器时,若options.audioContext存在应复用它(不要自行close);仅在自建上下文时才在destroy中关闭。
生命周期与注意事项
- 必须先
startCapture采集到轨道,再setProcessor,否则抛错。 setProcessor幂等:重复调用会先卸载已有处理器再挂载新的。- 自动重挂:切换设备(
changeDeviceId)或重新startCapture后,SDK 会自动用新源轨道重建处理器,无需重新调用setProcessor。 - 处理器多依赖
AudioContext/WASM,需在 HTTPS(或 localhost)环境,且可能需用户手势后才能运行。