Skip to content

音频编码调优

语音通话、系统声共享等场景可通过 WetRTCConfig.audioEncoding 或独立工具函数,对发送端音频轨道与 RTP 编码参数进行调优。

导入

ts
import {
  type AudioEncodingOptions,
  applyAudioSenderEncoding,
  applyAudioEncodingToConnection,
  applyReceiverPlayoutDelay,
} from '@wetspace/wetrtc'

AudioEncodingOptions

字段类型说明
maxBitratenumber发送端最大码率 (bps),映射到 RTCRtpEncodingParameters.maxBitrate
priorityRTCPriorityTypeRTP 流优先级('very-low''high'
networkPriorityRTCPriorityType网络层优先级

常用码率参考

场景建议 maxBitrate
语音32_00064_000
音乐 / 系统声96_000128_000

WebRTC 音频默认使用 Opus 编解码器,通常无需手动指定 codec(可通过 preferredAudioCodec: 'opus' 显式优先)。

通过 WetRTC 配置(推荐)

ts
const rtc = new WetRTC({
  signal,
  direction: 'sendrecv',
  audioEncoding: {
    maxBitrate: 64_000,
    priority: 'high',
  },
  preferredAudioCodec: 'opus',
})

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

  1. addTrack() — 添加音频 track 后立即调用 setParameters
  2. connectionstatechangeconnected — 协商完成后对所有音频 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 事件或 statechangeconnected 时调用:

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',
})

详见 视频编码调优编解码器偏好

Released under the MIT License.