Tutorial: 插件系统总览

插件系统总览

功能简介

TRTC Web SDK v5 提供了插件系统,支持按需加载各种音视频增强能力。插件系统的优势:

  • 模块化设计:按需引入,减少主包体积
  • 独立升级:插件版本独立管理,便于迭代
  • 统一接口:所有插件使用相同的启动、更新、停止 API
  • 灵活组合:可同时使用多个插件,满足复杂业务场景

插件列表

视频增强类

插件名称 功能说明 版本要求 套餐要求 静态资源 文档链接
Beauty 专业美颜,支持磨皮、美白、瘦脸等 6 种参数 + 10 种 2D 特效贴纸 ≥ 5.5.0 专业版 - 开启美颜
BasicBeauty 基础美颜,支持美颜、明亮、红润 3 种参数 ≥ 5.7.0 - 开启基础美颜
VirtualBackground 虚拟背景,支持背景虚化、图片背景、人脸居中 ≥ 5.2.0 旗舰版 需要 开启虚拟背景
Watermark 视频水印,支持添加图片水印 ≥ 5.3.2 - 开启水印
VideoMixer 视频合流,将摄像头、屏幕、文字、图片、视频合成一路 ≥ 5.12.0 - 开启视频合流插件
FaceDetection 人脸检测,实时检测摄像头中的人脸状态变化 ≥ 5.15.0 需要 42-advanced-face-detection

音频增强类

插件名称 功能说明 版本要求 套餐要求 静态资源 文档链接
AudioMixer 背景音乐,支持同时播放多个音乐,可控制音量、循环、跳转等 ≥ 5.1.0 - 背景音乐实现方案
AIDenoiser AI 降噪,智能降低环境噪声,支持远场消除模式 - 尊享版 需要 开启 AI 降噪
VoiceChanger 美声变声,支持 11 种变声效果(熊孩子、萝莉、大叔等) ≥ 5.10.0 旗舰版 - 开启美声效果
Chorus 合唱,支持 KTV 合唱场景,包含主唱/伴唱角色、歌词同步、打分 - 联系我们开通 - -

推流与混流类

插件名称 功能说明 版本要求 套餐要求 静态资源 文档链接
CDNStreaming CDN 转推,支持云端混流、转推 CDN、回推混流到 TRTC 房间 ≥ 5.1.0 - 云端混流与转推CDN
CrossRoom 跨房连麦,支持不同房间主播间的音视频通话 ≥ 5.8.0 - 实现跨房连麦

功能扩展类

插件名称 功能说明 版本要求 套餐要求 静态资源 文档链接
DeviceDetector 设备检测,检测摄像头、麦克风、扬声器及网络,提供默认 UI ≥ 5.8.0 - 通话前环境与设备检测
Debug 调试模式,支持全量日志上传/导出、音视频转储 ≥ 5.8.0 - 调试模式
TRTCVideoDecoder 视频解码器降级,解码失败时自动降级到软解码 ≥ 5.9.0 联系我们开通 需要 开启视频解码插件
SmallStreamAutoSwitcher 大小流自动切换,弱网时自动切换小流保证流畅度 ≥ 5.11.0 - 开启大小流自动切换插件

说明:

  • 版本要求:使用该插件所需的 TRTC SDK 最低版本
  • 套餐要求:使用该插件需开通的 TRTC 包月套餐版本,详见 包月套餐计费说明
  • 静态资源:插件是否需要部署 node_modules/trtc-sdk-v5/assets 目录到 CDN

统一使用流程

1. 引入并注册插件

在创建 TRTC 实例时通过 plugins 数组注册需要使用的插件:

import TRTC from 'trtc-sdk-v5';
import { VirtualBackground } from 'trtc-sdk-v5/plugins/video-effect/virtual-background';
import { AIDenoiser } from 'trtc-sdk-v5/plugins/ai-denoiser';
const trtc = TRTC.create({ 
  plugins: [VirtualBackground, AIDenoiser],
  assetsPath: 'https://your-cdn/assets' // 如果插件需要静态资源
});

2. 开启插件

使用 trtc.startPlugin(pluginName, options) 开启插件:

// 不需要用户认证的插件
await trtc.startPlugin('BasicBeauty', {
  beauty: 0.5,
  brightness: 0.5,
  ruddy: 0.5
});
// 需要用户认证的插件
await trtc.startPlugin('VirtualBackground', {
  sdkAppId: 123456,
  userId: 'user_123',
  userSig: 'XXXXXXXX',
  type: 'blur',
  blurLevel: 3
});

3. 更新参数(可选)

使用 trtc.updatePlugin(pluginName, options) 动态更新插件参数:

await trtc.updatePlugin('BasicBeauty', {
  beauty: 0.8,
  brightness: 0.6
});

4. 停止插件

使用 trtc.stopPlugin(pluginName) 停止插件:

await trtc.stopPlugin('BasicBeauty');

特殊用法说明

AudioMixer(背景音乐)- 按 ID 分组

AudioMixer 通过唯一的 id 标识每个背景音乐,每个 id 都有独立的生命周期:

// 开启第一个背景音乐
await trtc.startPlugin('AudioMixer', {
  id: 'bgm1',
  url: './music1.mp3',
  loop: true,
  volume: 0.5
});
// 同时开启第二个背景音乐(不同 id)
await trtc.startPlugin('AudioMixer', {
  id: 'bgm2',
  url: './music2.mp3',
  volume: 0.3
});
// 更新第一个背景音乐
await trtc.updatePlugin('AudioMixer', {
  id: 'bgm1',
  volume: 0.8,
  operation: 'pause' // pause | resume
});
// 停止第一个背景音乐
await trtc.stopPlugin('AudioMixer', {
  id: 'bgm1'
});

特点:

  • 按 id 分组,每个 id 独立管理一个背景音乐
  • 支持同时开启多个背景音乐(不同 id)
  • 同一个 id 不能连续 start 两次,需先 stop
  • 支持暂停、恢复、跳转等操作

CDNStreaming(CDN 转推)- 按 Mode 分组

CDNStreaming 按 publishMode 分组,每个模式都有独立的生命周期。支持四种推流模式:

import { PublishMode } from 'trtc-sdk-v5/plugins/cdn-streaming';
// 模式 1:转推摄像头流
await trtc.startPlugin('CDNStreaming', {
  target: {
    publishMode: PublishMode.PublishMainStreamToCDN,
    streamId: 'stream001'
  }
});
// 模式 2:转推屏幕分享流(可与模式 1 同时进行)
await trtc.startPlugin('CDNStreaming', {
  target: {
    publishMode: PublishMode.PublishSubStreamToCDN,
    streamId: 'stream002'
  }
});
// 模式 3:转推混流
await trtc.startPlugin('CDNStreaming', {
  target: {
    publishMode: PublishMode.PublishMixStreamToCDN,
    streamId: 'mix-stream'
  },
  encoding: { videoWidth: 1280, videoHeight: 720 },
  mix: {
    audioMixUserList: [{ userId: 'user_123' }],
    videoLayoutList: [/* 布局参数 */]
  }
});
// 模式 4:回推混流到 TRTC 房间
await trtc.startPlugin('CDNStreaming', {
  target: {
    publishMode: PublishMode.PublishMixStreamToRoom,
    robotUser: { userId: 'robot_001', roomId: 1234 }
  },
  encoding: { videoWidth: 1280, videoHeight: 720 },
  mix: { /* 混流参数 */ }
});
// 更新模式 1 的参数
await trtc.updatePlugin('CDNStreaming', {
  target: {
    publishMode: PublishMode.PublishMainStreamToCDN,
    streamId: 'stream001_new'
  }
});
// 停止模式 1(只需传 publishMode)
await trtc.stopPlugin('CDNStreaming', {
  target: {
    publishMode: PublishMode.PublishMainStreamToCDN
  }
});

特点:

  • 按 publishMode 分组,每个模式独立管理
  • 四种模式可以同时运行(不同 publishMode)
  • 同一个 publishMode 遵循 start-update-stop 生命周期
  • 停止时只需传入 publishMode 参数

VideoMixer(视频合流)- 多输入源管理

VideoMixer 插件支持动态管理多个输入源,通过 id 标识每个输入源:

// 开启合流,返回合流后的 track
const { track } = await trtc.startPlugin('VideoMixer', {
  canvasInfo: { width: 1920, height: 1080 },
  camera: [{ id: 'camera1', layout: { x: 0, y: 0, width: 640, height: 480, zIndex: 1 } }]
});
// 动态添加屏幕共享
await trtc.updatePlugin('VideoMixer', {
  screen: [{ id: 'screen1', layout: { x: 640, y: 0, width: 1280, height: 1080, zIndex: 0 } }]
});
// 移除摄像头(传空数组)
await trtc.updatePlugin('VideoMixer', {
  camera: []
});
// 使用合流后的 track 推流
await trtc.startLocalVideo({ 
  option: { 
    videoTrack: track,
    profile: { width: 1920, height: 1080, bitrate: 2000 }
  }
});

特点:

  • 支持多次 start/update
  • 返回 track 用于自定义推流
  • 通过数组管理多个输入源(camera、screen、text、image、video)
  • 注意:仅支持 PC 端浏览器

TRTCVideoDecoder(视频解码)- 自动启动

TRTCVideoDecoder 插件注册后会自动在解码失败时启动降级逻辑,无需手动调用 startPlugin

import TRTCVideoDecoder from 'trtc-sdk-v5/plugins/video-decoder';
const trtc = TRTC.create({ 
  plugins: [TRTCVideoDecoder],
  assetsPath: 'https://your-cdn/assets'
});
// 无需手动 startPlugin,插件会在解码失败时自动启动

SmallStreamAutoSwitcher(大小流切换)- 无参数更新

SmallStreamAutoSwitcher 启动后自动运行,不支持 updatePlugin

// 使用默认策略
trtc.startPlugin('SmallStreamAutoSwitcher');
// 自定义策略(仅在 start 时设置)
trtc.startPlugin('SmallStreamAutoSwitcher', {
  maxAutoSwitchToSmallCount: 1, // 只允许切换 1 次
  poorDuration: 5000,            // 网络差持续 5 秒才切换
  goodDuration: 30000            // 网络好持续 30 秒才切回
});

特点:

  • 不支持 updatePlugin
  • 自动根据网络状况切换大小流
  • 注意:需配合大小流功能使用

FaceDetection(人脸检测)- 回调驱动

FaceDetection 通过回调函数获取检测结果,采用智能防抖逻辑:

await trtc.startPlugin('FaceDetection', {
  onFaceDetectionStateChanged: (hasFace) => {
    if (hasFace) {
      console.log('检测到人脸出现');
    } else {
      console.log('检测到人脸消失'); // 延迟触发,避免误报
    }
  },
  detectionInterval: 300,    // 检测间隔(ms)
  minConfidence: 0.8,        // 最小置信度
  missingTimeout: 1000       // 人脸消失确认时间(ms)
});

特点:

  • 智能防抖:人脸出现立即触发,消失延迟确认
  • 自动同步视频流状态(Mute/Unmute)
  • 注意:需先开启摄像头

DeviceDetector(设备检测)- 返回检测结果

DeviceDetector 提供默认 UI,检测完成后返回设备和网络检测结果:

import { DeviceDetector } from 'trtc-sdk-v5/plugins/device-detector';
const trtc = TRTC.create({ plugins: [DeviceDetector] });
// 仅检测设备
const result = await trtc.startPlugin('DeviceDetector');
// 检测设备 + 网络
const resultWithNetwork = await trtc.startPlugin('DeviceDetector', {
  networkDetect: { sdkAppId, userId, userSig }
});
// 返回结果示例
// result.camera: { isSuccess: boolean, device: {...} }
// result.microphone: { isSuccess: boolean, device: {...} }
// result.speaker: { isSuccess: boolean, device: {...} }
// result.network: { isSuccess: boolean, result: { quality, rtt } }

特点:

  • 提供默认的检测 UI,支持中英文
  • 返回检测结果,可用于后续逻辑判断
  • 支持仅检测设备或同时检测网络

Debug(调试模式)- 自动启动

Debug 插件用于日志上传/导出和音视频转储,v5.8.4 起已内置 SDK:

// v5.8.4+:无需引入插件,URL 添加 ?trtcDebug=1 自动开启弹窗
// v5.8.3 及以下:需引入插件
import { Debug } from 'trtc-sdk-v5/plugins/debug';
const trtc = TRTC.create({ plugins: [Debug] });
// 开发环境自动开启,部署环境需 URL 添加 ?trtcDebug=1
// 关闭调试模式
trtc.stopPlugin('Debug');

特点:

  • v5.8.4+ 内置 SDK,无需外部引入
  • 开发环境自动开启弹窗
  • 支持日志上传/导出、音视频转储

静态资源部署

部分插件需要部署静态资源文件(WebAssembly、模型文件等),操作步骤:

1. 发布资源文件

node_modules/trtc-sdk-v5/assets 目录发布到 CDN 或静态资源服务器:

# 示例:复制到 public 目录
cp -r node_modules/trtc-sdk-v5/assets ./public/assets
# 或上传到 CDN
# https://your-cdn.com/assets/

2. 配置 assetsPath

创建 TRTC 实例时传入资源路径:

const trtc = TRTC.create({ 
  plugins: [VirtualBackground, AIDenoiser],
  assetsPath: 'https://your-cdn.com/assets'
});

3. 注意事项

  • 如果资源文件域名与应用域名不一致,需开启 CORS 策略
  • 资源文件必须部署在 HTTPS 服务下(HTTP 会被浏览器安全策略禁止)
  • SDK 版本低于 v5.10.0 可能需要额外部署特定文件(参考各插件文档)

相关链接