You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:15:03