视频编码调优
屏幕共享、远程桌面等场景可通过 WetRTCConfig.videoEncoding 或独立工具函数,对发送端视频轨道与 RTP 编码参数进行低延迟调优。
导入
ts
import {
type VideoEncodingOptions,
applyVideoTrackContentHint,
applyVideoSenderEncoding,
applyVideoEncodingToConnection,
applyReceiverPlayoutDelay,
} from '@wetspace/wetrtc'VideoEncodingOptions
| 字段 | 类型 | 说明 |
|---|---|---|
contentHint | 'motion' | 'detail' | 'text' | 媒体轨道内容提示;屏幕操作、鼠标拖动等动态画面建议 'motion' |
maxFrameRate | number | 发送端最大帧率,映射到 RTCRtpEncodingParameters.maxFramerate |
maxBitrate | number | 发送端最大码率 (bps),映射到 RTCRtpEncodingParameters.maxBitrate |
degradationPreference | RTCDegradationPreference | 带宽不足时的降级策略;低延迟场景建议 'maintain-framerate' |
通过 WetRTC 配置(推荐)
ts
const rtc = new WetRTC({
signal,
direction: 'sendonly',
videoEncoding: {
contentHint: 'motion',
maxFrameRate: 30,
maxBitrate: 4_000_000,
degradationPreference: 'maintain-framerate',
},
})WetRTC 会在以下时机自动应用:
addTrack()— 添加视频 track 后立即设置contentHint并调用setParametersconnectionstatechange→connected— 协商完成后对所有视频 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 事件或 statechange → connected 时调用:
ts
rtc.on('statechange', (state) => {
if (state === 'connected') {
applyReceiverPlayoutDelay(rtc.peerConnection!, 0)
}
})与监控配合
通过 stats 事件的 codec、frameRate、roundTripTime 字段验证调优效果,详见 监控诊断。