Skip to content

视频编码调优

屏幕共享、远程桌面等场景可通过 WetRTCConfig.videoEncoding 或独立工具函数,对发送端视频轨道与 RTP 编码参数进行低延迟调优。

导入

ts
import {
  type VideoEncodingOptions,
  applyVideoTrackContentHint,
  applyVideoSenderEncoding,
  applyVideoEncodingToConnection,
  applyReceiverPlayoutDelay,
} from '@wetspace/wetrtc'

VideoEncodingOptions

字段类型说明
contentHint'motion' | 'detail' | 'text'媒体轨道内容提示;屏幕操作、鼠标拖动等动态画面建议 'motion'
maxFrameRatenumber发送端最大帧率,映射到 RTCRtpEncodingParameters.maxFramerate
maxBitratenumber发送端最大码率 (bps),映射到 RTCRtpEncodingParameters.maxBitrate
degradationPreferenceRTCDegradationPreference带宽不足时的降级策略;低延迟场景建议 'maintain-framerate'

通过 WetRTC 配置(推荐)

ts
const rtc = new WetRTC({
  signal,
  direction: 'sendonly',
  videoEncoding: {
    contentHint: 'motion',
    maxFrameRate: 30,
    maxBitrate: 4_000_000,
    degradationPreference: 'maintain-framerate',
  },
})

WetRTC 会在以下时机自动应用:

  1. addTrack() — 添加视频 track 后立即设置 contentHint 并调用 setParameters
  2. connectionstatechangeconnected — 协商完成后对所有视频 sender 再次应用,避免协商前调用失败

独立工具函数

applyVideoTrackContentHint()

ts
applyVideoTrackContentHint(track: MediaStreamTrack, contentHint?: 'motion' | 'detail' | 'text'): void

为单个视频 track 设置 contentHint。浏览器不支持时静默忽略。

applyVideoSenderEncoding()

ts
applyVideoSenderEncoding(sender: RTCRtpSender, options: VideoEncodingOptions): Promise<boolean>

对指定 RTCRtpSender 应用编码参数。成功返回 true;协商尚未完成导致 setParameters 失败时返回 false(可在 connected 后重试);其他异常仍会抛出。

applyVideoEncodingToConnection()

ts
applyVideoEncodingToConnection(pc: RTCPeerConnection, options: VideoEncodingOptions): Promise<boolean>

RTCPeerConnection 上所有视频 sender 批量应用 VideoEncodingOptions。任一 sender 成功则返回 true

applyReceiverPlayoutDelay()

ts
applyReceiverPlayoutDelay(pc: RTCPeerConnection, delaySeconds?: number): void

为所有支持该特性的 音频与视频 RTCRtpReceiver 设置 playoutDelayHint,降低播放缓冲。默认 delaySeconds = 0(尽量低延迟)。部分浏览器不支持时静默忽略。

接收端用法

track 事件或 statechangeconnected 时调用:

ts
rtc.on('statechange', (state) => {
  if (state === 'connected') {
    applyReceiverPlayoutDelay(rtc.peerConnection!, 0)
  }
})

与监控配合

通过 stats 事件的 codecframeRateroundTripTime 字段验证调优效果,详见 监控诊断

Released under the MIT License.