基于Daily.co的WebRTC应用如何调用getStats API获取通话统计数据
基于Daily.co React+TS WebRTC应用获取通话统计的解决思路
- 优先使用SDK封装的统计接口
Daily.co SDK已经内置了格式化后的统计获取方法,不需要自行操作原生RTCPeerConnection,适配性更强,推荐优先使用:
调用call.getNetworkStats()可获取网络层相关统计(丢包率、往返延迟、可用带宽等),调用call.getMediaStats()可获取媒体轨道相关统计(帧率、分辨率、码率等)。
示例代码:import DailyCall from '@daily-co/daily-js'; // 确保在joined-meeting事件触发后调用 const handleFetchStats = async (call: DailyCall) => { const networkStats = await call.getNetworkStats(); const mediaStats = await call.getMediaStats(); // 业务逻辑处理统计数据 console.log('网络统计:', networkStats); console.log('媒体统计:', mediaStats); } - 需要原生RTCPeerConnection调用getStats的实现方案
如果你确实需要访问原生RTCPeerConnection实例调用原生API,可使用SDK提供的getNativePeerConnections()方法获取所有活跃的RTCPeerConnection实例:
示例代码:import DailyCall from '@daily-co/daily-js'; call.on('joined-meeting', async () => { // 获取当前所有活跃的RTCPeerConnection实例 const peerConnections = call.getNativePeerConnections(); // 遍历所有实例调用getStats for (const pc of peerConnections) { const statsReport = await pc.getStats(); statsReport.forEach(item => { // 按需处理原生统计项 if (item.type === 'inbound-rtp') { console.log('入站流丢包率:', item.packetsLost); } }) } }) - TS适配注意事项
确保你安装的@daily-co/daily-js依赖为最新版本,官方已经内置了上述所有方法的TypeScript类型声明,无需自行补充类型定义。 - 常见踩坑说明
不要在通话初始化阶段调用上述方法,必须等待joined-meeting事件触发后再操作,此时RTCPeerConnection实例才会完成初始化,否则会获取到空数组导致无法调用getStats。
内容的提问来源于stack exchange,提问作者Jivan
相关产品推荐
相关产品推荐

