Skip to content

A tiny JavaScript library using WebRTC getStats API to return peer connection stats i.e. bandwidth usage, packets lost, local/remote ip addresses and ports, type of connection etc.

Notifications You must be signed in to change notification settings

raygerami/getStats

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

npm downloads

A tiny JavaScript library using WebRTC getStats API to return peer connection stats i.e. bandwidth usage, packets lost, local/remote ip addresses and ports, type of connection etc.

It is MIT Licenced, which means that you can use it in any commercial/non-commercial product, free of cost.

npm install getstats

cd node_modules
cd getstats
node server.js

# and open:
# http://localhost:9999/

To use it:

<script src="./node_modules/getstats/getStats.js"></script>

Link the library

<script src="https://cdn.webrtc-experiment.com/getStats.js"></script>

Or link specific build:

<script src="https://github.com/muaz-khan/getStats/releases/download/1.0.4/getStats.js"></script>

window.getStats

To invoke directly:

getStats(peer, callback, interval);

RTCPeerConnection.prototype.getPeerStats

Or, to setup an instance method:

// if your code is encapsulated under a method
(function() {
    RTCPeerConnection.prototype.getPeerStats = window.getStats;
    
    // or
    RTCPeerConnection.prototype.__getStats = window.getStats;
    
    // or
    RTCPeerConnection.prototype.getConnectionStats = window.getStats;
    
    // or
    RTCPeerConnection.prototype['your-choice'] = window.getStats;
})();

NEVER set/override RTCPeerConnection.prototype.getStats because it is a reserved method.

// following will fail
RTCPeerConnection.prototype.getStats = window.getStats;

// it should be
RTCPeerConnection.prototype.intanceMethodNamae = window.getStats;

Usage

var rtcPeerConnection = new RTCPeerConnection(rtcConfig);

var repeatInterval = 2000; // 2000 ms == 2 seconds
rtcPeerConnection.getPeerStats(function(result) {
    result.connectionType.remote.ipAddress
    result.connectionType.remote.candidateType
    result.connectionType.transport
    
    result.audio.availableBandwidth
    result.audio.packetsSent
    result.audio.packetsLost
    result.audio.rtt
    
    // to access native "results" array
    result.results.forEach(function(r) {
        console.log(r);
    });
}, repeatInterval);

Firefox?

peer.getStats(peer.getLocalStreams()[0].getAudioTracks()[0], function(results) {
    // rest goes here
}, 5 * 1000);

result.datachannel

// states => open or close
alert(result.datachannel.state === 'open');

result.isOfferer

Offerer is the person who invoked createOffer method.

result.encryption

To detect which tech is used to encrypt your connections.

alert(result.encryption === 'sha-256');

result.nomore()

This function can be used to ask to stop invoking getStats API.

btnStopGetStats.onclick  = function() {
    getStatsResult.nomore();
};

result.audio

  1. result.audio.availableBandwidth
  2. result.audio.inputLevel
  3. result.audio.packetsLost
  4. result.audio.rtt
  5. result.audio.packetsSent
  6. result.audio.bytesSent

result.video

  1. result.video.availableBandwidth
  2. result.video.googFrameHeightInput
  3. result.video.googFrameWidthInput
  4. result.video.googCaptureQueueDelayMsPerS
  5. result.video.rtt
  6. result.video.packetsLost
  7. result.video.packetsSent
  8. result.video.googEncodeUsagePercent
  9. result.video.googCpuLimitedResolution
  10. result.video.googNacksReceived
  11. result.video.googFrameRateInput
  12. result.video.googPlisReceived
  13. result.video.googViewLimitedResolution
  14. result.video.googCaptureJitterMs
  15. result.video.googAvgEncodeMs
  16. result.video.googFrameHeightSent
  17. result.video.googFrameRateSent
  18. result.video.googBandwidthLimitedResolution
  19. result.video.googFrameWidthSent
  20. result.video.googFirsReceived
  21. result.video.bytesSent

result.connectionType

  1. result.connectionType.local.candidateType
  2. result.connectionType.local.ipAddress
  3. result.connectionType.local.networkType
  4. result.connectionType.remote.candidateType
  5. result.connectionType.remote.ipAddress
  6. result.connectionType.transport

result.results

It is an array that is returned by browser's native PeerConnection API.

console.log(result.results);

License

getStats.js is released under MIT licence . Copyright (c) Muaz Khan.

About

A tiny JavaScript library using WebRTC getStats API to return peer connection stats i.e. bandwidth usage, packets lost, local/remote ip addresses and ports, type of connection etc.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • HTML 52.1%
  • JavaScript 47.9%