音频编码调优
语音通话、系统声共享等场景可通过 WetRTCConfig.audioEncoding 或独立工具函数,对发送端音频轨道与 RTP 编码参数进行调优。
导入
ts
import {
type AudioEncodingOptions,
applyAudioSenderEncoding,
applyAudioEncodingToConnection,
applyReceiverPlayoutDelay,
} from '@wetspace/wetrtc'AudioEncodingOptions
| 字段 | 类型 | 说明 |
|---|---|---|
maxBitrate | number | 发送端最大码率 (bps),映射到 RTCRtpEncodingParameters.maxBitrate |
priority | RTCPriorityType | RTP 流优先级('very-low' … 'high') |
networkPriority | RTCPriorityType | 网络层优先级 |
常用码率参考
| 场景 | 建议 maxBitrate |
|---|---|
| 语音 | 32_000 – 64_000 |
| 音乐 / 系统声 | 96_000 – 128_000 |
WebRTC 音频默认使用 Opus 编解码器,通常无需手动指定 codec(可通过 preferredAudioCodec: 'opus' 显式优先)。
通过 WetRTC 配置(推荐)
ts
const rtc = new WetRTC({
signal,
direction: 'sendrecv',
audioEncoding: {
maxBitrate: 64_000,
priority: 'high',
},
preferredAudioCodec: 'opus',
})WetRTC 会在以下时机自动应用:
addTrack()— 添加音频 track 后立即调用setParametersconnectionstatechange→connected— 协商完成后对所有音频 sender 再次应用
独立工具函数
applyAudioSenderEncoding()
ts
applyAudioSenderEncoding(sender: RTCRtpSender, options: AudioEncodingOptions): Promise<boolean>对指定 RTCRtpSender 应用编码参数。成功返回 true;协商尚未完成导致 setParameters 失败时返回 false;其他异常仍会抛出。
applyAudioEncodingToConnection()
ts
applyAudioEncodingToConnection(pc: RTCPeerConnection, options: AudioEncodingOptions): Promise<boolean>对 RTCPeerConnection 上所有音频 sender 批量应用 AudioEncodingOptions。任一 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)
}
})与视频调优组合
音视频通话或带系统声的屏幕共享可同时配置:
ts
const rtc = new WetRTC({
signal,
direction: 'sendrecv',
videoEncoding: {
contentHint: 'motion',
maxFrameRate: 30,
maxBitrate: 4_000_000,
degradationPreference: 'maintain-framerate',
},
audioEncoding: {
maxBitrate: 64_000,
},
preferredVideoCodec: 'h264',
preferredAudioCodec: 'opus',
})