编解码器偏好
WetRTC 支持在 SDP 协商前通过 RTCRtpTransceiver.setCodecPreferences() 调整视频与音频编解码器优先级。
导入
ts
import {
type PreferredVideoCodec,
type PreferredAudioCodec,
type VideoRtpCodec,
type AudioRtpCodec,
sortVideoCodecsH264First,
applyH264CodecPreference,
applyH264CodecPreferences,
sortAudioCodecsOpusFirst,
applyOpusCodecPreference,
applyOpusCodecPreferences,
} from '@wetspace/wetrtc'通过 WetRTC 配置(推荐)
ts
const rtc = new WetRTC({
signal,
direction: 'sendrecv',
preferredVideoCodec: 'h264',
preferredAudioCodec: 'opus',
})视频:preferredVideoCodec
| 值 | 说明 |
|---|---|
'auto' | 默认,使用浏览器协商顺序 |
'h264' | 将 H.264 排在 VP8 / VP9 等编解码器之前 |
适用于屏幕共享等希望启用硬件视频编码的场景(Electron / Chrome 在 Windows 等平台通常对 H.264 走硬件编码)。
音频:preferredAudioCodec
| 值 | 说明 |
|---|---|
'auto' | 默认,使用浏览器协商顺序 |
'opus' | 将 Opus 排在 PCMU / PCMA 等编解码器之前 |
WebRTC 语音默认即为 Opus;显式设置可确保在多种音频 codec 并存时优先 Opus。
WetRTC 会在以下时机自动应用:
addTrack()— 添加 track 后,对对应 transceiver 设置编解码器偏好ensureTransceivers()—recvonly方向创建 transceiver 后立即设置connect()— 发起协商前对所有已存在的 transceiver 再次兜底
兼容性
若对端不支持首选编解码器,WebRTC 会自动回退。视频可通过 监控诊断 中的 stats.codec 确认实际协商结果。
视频:H.264 排序策略
sortVideoCodecsH264First() 将 RTCRtpReceiver.getCapabilities('video') 返回的编解码器列表重新排序:
- 所有
mimeType为video/h264(不区分大小写)的条目排在前面 - H.264 内部优先
sdpFmtpLine含packetization-mode=1的配置 - 其余编解码器(VP8、VP9、AV1 等)保持相对顺序接在后面
音频:Opus 排序策略
sortAudioCodecsOpusFirst() 将 RTCRtpReceiver.getCapabilities('audio') 返回的编解码器列表重新排序:
- 所有
mimeType为audio/opus的条目排在前面 - 其余编解码器(PCMU、PCMA、G722 等)保持相对顺序接在后面
独立工具函数
视频
| 函数 | 说明 |
|---|---|
sortVideoCodecsH264First(codecs) | 返回 H.264 优先的编解码器列表 |
applyH264CodecPreference(transceiver) | 对单个 transceiver 应用 H.264 优先 |
applyH264CodecPreferences(pc) | 批量应用至所有视频 transceiver |
音频
| 函数 | 说明 |
|---|---|
sortAudioCodecsOpusFirst(codecs) | 返回 Opus 优先的编解码器列表 |
applyOpusCodecPreference(transceiver) | 对单个 transceiver 应用 Opus 优先 |
applyOpusCodecPreferences(pc) | 批量应用至所有音频 transceiver |
调用时机
setCodecPreferences 必须在 createOffer() / createAnswer() 之前调用。WetRTC 已在内部保证这一点;若手动集成,请勿在协商完成后再修改偏好。