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

Pion WebRTC中调用peerConnection.GetStats()无法获取InboundRTPStreamStats

问题描述

我正尝试为我的WebRTC应用获取接收字节数、丢包率、延迟等通用统计数据,为此编写了如下函数以验证是否能访问该信息:

func getInboundRTPStreamStats(peerConnection *webrtc.PeerConnection) {
    stats := peerConnection.GetStats()
    for k, stat := range stats {
        log.Infof("Stats %v :: %v\n", k, stats)
        if inboundStat, ok := stat.(webrtc.InboundRTPStreamStats); ok {
            log.Infof("Bytes Received: %d, Packets Lost: %d\n",
                inboundStat.BytesReceived, inboundStat.PacketsLost)
        }
    }
}

我将该函数放在peerConnection.OnTrack中执行:

peerConnection.OnTrack(func(t *webrtc.TrackRemote, receiver *webrtc.RTPReceiver) {
// ...
go func() {
    for {
        time.Sleep(1 * time.Second)
        getInboundRTPStreamStats(peerConnection)
    }
}()
// ...
}

尽管能获取到部分统计数据,但始终无法得到webrtc.InboundRTPStreamStats,想请教可能的问题原因是什么?我尝试调用peerConnection.GetStats(),预期能获取到InboundRTPStreamStats,但实际并未成功,不确定具体原因。

可能的原因及解决办法
  • 统计数据类型匹配偏差
    不同WebRTC Go库的统计结构可能存在差异,InboundRTPStreamStats可能被归类到其他相似类型下,或者需要从特定对象获取。先打印所有统计项的具体类型,确认是否有遗漏的入站统计类型:

    for k, stat := range stats {
        log.Infof("Stat key: %v, Type: %T\n", k, stat)
    }
    
  • 未处理GetStats()的异步特性
    部分WebRTC Go实现中,GetStats()是异步操作,同步调用可能无法实时获取到入流统计。检查库文档是否需要用异步回调方式获取:

    peerConnection.GetStats(func(stats webrtc.Stats) {
        // 在此回调中处理统计数据
    })
    
  • 流未完全建立就触发统计获取
    OnTrack触发仅代表轨道已添加,但RTP流可能还未完全建立(如ICE连接未完成、媒体流未开始传输)。可以先检查ICE连接状态,或者延长初始延迟,确保流稳定传输后再获取统计。

  • 库版本或实现的差异
    以pion/webrtc为例,不同版本对统计的暴露方式可能变化。入站RTP统计可能需要通过RTPReceiver的GetStats()方法获取,而非直接从PeerConnection获取:

    // 在OnTrack回调中使用receiver获取统计
    receiverStats := receiver.GetStats()
    for k, stat := range receiverStats {
        if inboundStat, ok := stat.(webrtc.InboundRTPStreamStats); ok {
            log.Infof("Bytes Received: %d, Packets Lost: %d\n",
                inboundStat.BytesReceived, inboundStat.PacketsLost)
        }
    }
    

内容的提问来源于stack exchange,提问作者Asif Mammadov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:01:15