如何获取RTCSctpTransportStats对象读取WebRTC SCTP往返时间
解决获取RTCSctpTransportStats无返回的方案
核心排查步骤
- 调整统计拉取的触发时机
你当前监听的iceConnectionState == "connected"仅代表ICE层连接完成,SCTP传输层握手会晚于ICE完成,需要等SCTP本身状态就绪后再拉取统计。你可以监听pc.sctp的onstatechange事件,等状态变为connected再执行统计查询。 - 核对统计项的类型标识
不同浏览器的早期WebRTC实现对SCTP统计项的type命名有差异,部分Chromium旧版本使用sctp作为类型值,而非规范定义的sctp-transport,遍历统计时可以先打印所有条目的type字段确认实际命名。 - 确保DataChannel已完全建立
可以追加监听DataChannel的open事件,至少有一个DataChannel成功连接后再拉取SCTP统计,避免SCTP层未完全初始化导致统计项未生成。
调整后的参考代码
// 监听SCTP状态就绪后再拉取统计 pc.sctp.onstatechange = () => { if (pc.sctp.state === 'connected') { pc.getStats().then(statsReport => { statsReport.forEach(item => { // 兼容两种type命名规则 if (item.type === 'sctp-transport' || item.type === 'sctp') { console.log('SCTP往返时间:', item.smoothedRoundTripTime); } }); }); } }; // 也可以在DataChannel open后额外触发一次统计拉取 pc.ondatachannel = (event) => { const channel = event.channel; channel.onopen = () => { // 这里可复用上面的getStats逻辑 }; };
内容的提问来源于stack exchange,提问作者NO_GUI
相关产品推荐
相关产品推荐

