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

Pion WebRTC中TrackRemote对应空RemoteOutboundRTPStreamStats、OutboundRTPStreamStats、RemoteInboundRTPStreamStats问题咨询

Pion WebRTC中TrackRemote对应空RemoteOutboundRTPStreamStats、OutboundRTPStreamStats、RemoteInboundRTPStreamStats问题咨询

你好,针对你遇到的Pion WebRTC里TrackRemote对应统计数据为空的问题,结合你给出的浏览器发视频给Pion广播端的场景,我整理了几个可能的原因和解决思路:

  • 统计数据还没到可收集的时机
    WebRTC的各类统计数据不是一开始就有的,得等ICE连接稳定、媒体流真正开始传输后才会生成。如果是刚创建PeerConnection或者刚触发OnTrack回调就去查统计,大概率是空的。你可以试试在ICE连接状态变为connected之后(通过监听PeerConnection.OnICEConnectionStateChange),或者等媒体流传输个几秒钟再去获取统计数据。

  • Interceptor配置没到位
    你提到了要创建InterceptorRegistry,但代码没写完。Pion的统计功能依赖StatsInterceptor,如果没正确注册这个拦截器,就没法收集到对应的RTP统计。正确的配置方式应该是这样:

// 创建InterceptorRegistry并添加StatsInterceptor
interceptorRegistry := webrtc.NewInterceptorRegistry()
statsInterceptor, err := webrtc.NewStatsInterceptor()
if err != nil {
    panic(err)
}
interceptorRegistry.Add(statsInterceptor)

// 创建API时传入MediaEngine和InterceptorRegistry
api := webrtc.NewAPI(webrtc.WithMediaEngine(mediaEngine), webrtc.WithInterceptorRegistry(interceptorRegistry))
// 用这个API创建PeerConnection
peerConnection, err := api.NewPeerConnection(peerConnectionConfig)
  • 搞混了收发端的统计类型
    你要注意,Pion这边是接收浏览器发来的视频,属于接收端,所以OutboundRTPStreamStats为空是正常的——因为Pion没有发送这个Track的媒体数据,只有浏览器作为发送端才会有Outbound相关统计。另外RemoteOutboundRTPStreamStats是对端(浏览器)的发送统计,RemoteInboundRTPStreamStats是对端的接收统计,这些数据需要ICE连接完全建立、媒体流传输一段时间后才会同步过来,而且得通过正确的方式查询。

  • 统计查询方式不对
    不要直接从TrackRemote上硬找统计数据,正确的做法是调用PeerConnection.GetStats()来统一获取,然后根据TrackID筛选对应的统计项:

stats, err := peerConnection.GetStats()
if err != nil {
    panic(err)
}
for _, report := range stats {
    switch report.Type {
    case webrtc.TypeInboundRTPStream:
        inboundStats := report.(webrtc.InboundRTPStreamStats)
        if inboundStats.TrackID == track.ID() {
            // 这里可以拿到Pion作为接收端的统计,比如已接收字节数
            fmt.Printf("已接收字节数:%d\n", inboundStats.BytesReceived)
        }
    case webrtc.TypeRemoteOutboundRTPStream:
        remoteOutboundStats := report.(webrtc.RemoteOutboundRTPStreamStats)
        if remoteOutboundStats.TrackID == track.ID() {
            // 这里拿到浏览器作为发送端的统计,比如已发送字节数
            fmt.Printf("对端已发送字节数:%d\n", remoteOutboundStats.BytesSent)
        }
    }
}

备注:内容来源于stack exchange,提问作者LST

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:18:04