2016-02-02 3 views
4

Итак, я работаю над приложением, которое использует WebRTC для предоставления видео/аудиосвязи между сверстниками.WebRTC: Как рассчитать пропускную способность пользователя/сетевую задержку RTC Peer Connection

Я бы хотел сообщить пользователям о своем сетевом соединении/пропускной способности/латентности и т. Д., Чтобы предложить возможные решения, если пропускная способность и т.д. ужасно.

WebRTC имеет API getStats(), который предоставляет несколько ключевых фрагментов информации. Когда Peer Connection активен, 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" 
    } 
} 

Именно с этой информацией, которую я надеюсь вычислить пользователь ...

а) Пропускная способность (В идеале аудио и видео отдельно но прямо пропускной способности будет достаточно)

б) Сеть Задержка

заранее спасибо ...

NB: Я уже видел this wrapper, но я хотел бы иметь возможность сделать это сам (с немного вашей помощью, конечно: D), поскольку в примере кода для этой оболочки используется свойство «bytesSent», которое я похоже, не вернулись с getStats()?

Я также осведомлен о WebRTC test имеющихся на GitHub, но опять же, я должен быть в состоянии достичь того, чего я хочу, не полагаясь на третьей стороне «плагинов» и т.д.

+1

Хром не соответствует спецификации. См. Http://stackoverflow.com/questions/29800010/can-someone-comprehensively-explain-the-webrtc-stats-api/29840886#29840886. – jib

ответ

2

Насколько я помню, свойства для этих 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 (если оболочка больше не работает, это было так, когда я в последний раз смотрел).

+1

Это неверно для Firefox. См. Http://stackoverflow.com/questions/29800010/can-someone-comprehensively-explain-the-webrtc-stats-api/29840886#29840886. – jib

+0

О, черт побери! спасибо @jib – wpp

 Смежные вопросы

  • Нет связанных вопросов^_^