首页 文章

WebRTC:如何计算RTC对等连接的用户带宽/网络延迟

提问于
浏览
5

所以,我正在开发一个利用WebRTC在同行之间提供视频/音频通信的应用程序 .

我想向用户提供一些关于他们的网络连接/带宽/延迟等的反馈,以便在带宽等可怕的情况下建议可能的解决方案 .

WebRTC有一个getStats() API,它提供了许多关键信息 . 当对等连接处于活动状态时, getStats() 给了我以下对象...

{
    "googLibjingleSession_5531731670954573009":{
        "id":"googLibjingleSession_5531731670954573009",
        "timestamp":"2016-02-02T11:14:43.467Z",
        "type":"googLibjingleSession",
        "googInitiator":"true"
    },
    "googTrack_SCEHhCOl":{
        "id":"googTrack_SCEHhCOl",
        "timestamp":"2016-02-02T11:14:43.467Z",
        "type":"googTrack",
        "googTrackId":"SCEHhCOl"
    },
    "ssrc_360347109_recv":{
        "id":"ssrc_360347109_recv",
        "timestamp":"2016-02-02T11:14:43.467Z",
        "type":"ssrc",
        "googDecodingCTN":"757",
        "packetsLost":"0",
        "googSecondaryDecodedRate":"0",
        "googDecodingPLC":"3",
        "packetsReceived":"373",
        "googExpandRate":"0.00579834",
        "googJitterReceived":"0",
        "googDecodingCNG":"0",
        "ssrc":"360347109",
        "googPreferredJitterBufferMs":"20",
        "googSpeechExpandRate":"0.00140381",
        "googTrackId":"SCEHhCOl",
        "transportId":"Channel-audio-1",
        "googDecodingPLCCNG":"10",
        "googCodecName":"opus",
        "googDecodingNormal":"744",
        "audioOutputLevel":"6271",
        "googAccelerateRate":"0",
        "bytesReceived":"21796",
        "googCurrentDelayMs":"64",
        "googDecodingCTSG":"0",
        "googCaptureStartNtpTimeMs":"-1",
        "googPreemptiveExpandRate":"0.00292969",
        "googJitterBufferMs":"42"
    }
}

有了这些信息,我希望能够计算出用户......

a)带宽(理想情况下音频和视频分开但直接带宽就足够了)

b)网络延迟

提前致谢...

NB :我已经看过this wrapper但我似乎从 getStats() 回来了?

我也知道GitHub上有WebRTC test可用,但同样,我应该能够实现我想要的而不依赖第三方"plugins"等 .

1 回答

  • 3

    据我所知,这些RTCStatReports的属性差异很大 . 例如,您提到的 bytesSent 属性并不总是可用,您可能需要这样做:

    // chrome
    if (res.googCodecName == 'VP8' && res.bytesSent) {
      // res.bytesSent - bytes sent so far (video)
    }
    
    // firefox
    if (res.mediaType == 'video' && res.bytesSent) ...
    

    看一下wrapper you posted的来源,了解更多信息 . 您还可以查看my fork(如果包装器不再起作用,那就是我上次查看的情况) .

相关问题