Skip to content

DolbyIO/web-webrtc-stats

Repository files navigation

Build Package Publish Package npm License

Dolby.io WebRTC Statistics

This project is a library to use to parse WebRTC statistics.

Install this project

Run the npm command to install the package @dolbyio/webrtc-stats into your project:

npm install @dolbyio/webrtc-stats --save

Use the library

Collection

A WebRTCStats object needs to be created to start a WebRTC statistics collection. It requires some settings to configure how you want the collection to work.

interface WebRTCStatsOptions {
    /**
     * Function that will be called to retrieve the WebRTC statistics.
     * @returns a {@link RTCStatsReport} object through a {@link Promise}.
     */
    getStats: () => Promise<RTCStatsReport>;

    /**
     * Interval, in milliseconds, at which to collect the WebRTC statistics.
     * Default is 1,000 ms (1 second).
     */
    getStatsInterval?: number;

    /**
     * Include the raw statistics in the `stats` event.
     * Default is `false`.
     */
    includeRawStats?: boolean;
}

Create the collection object.

const collection = new WebRTCStats({
    getStats: () => {
        // Get the raw WebRTC statistics from the web browser
    },
    getStatsInterval: 1000,
    includeRawStats: true,
});

Start the collection with the start() function.

collection.start();

Stop the collection with the stop() function.

collection.stop();

Events

After starting the collection, the stats event is triggered when the WebRTC statistics have been collected and parsed. The event object is of type OnStats.

collection.on('stats', (event) => {
    console.log(event);
});

The error event is triggered when an error happens during the collection or the parsing of the WebRTC statistics.

collection.on('error', (error) => {
    console.error(error);
});

Examples

Dolby.io Real-time Streaming APIs

Example on how to start a statistics collection from the Dolby.io Real-time Streaming APIs.

import WebRTCStats from '@dolbyio/webrtc-stats';
import { Director, Publish } from '@millicast/sdk';

const PUBLISHER_TOKEN = '';
const STREAM_NAME = '';

const tokenGenerator = () =>
    Director.getPublisher({
        token: PUBLISHER_TOKEN,
        streamName: STREAM_NAME,
    });

const publisher = new Publish(STREAM_NAME, tokenGenerator);

// Publish the stream

const collection = new WebRTCStats({
    getStatsInterval: 1000,
    getStats: () => {
        return publisher.webRTCPeer.getRTCPeer().getStats();
    },
});

// The stats event is triggered after each interval has elapsed
collection.on('stats', (event) => {
    // Triggered when the statistics have been parsed
    console.log(event);
});

// Start the statistics collection
collection.start();

Dolby.io Communications APIs

Example on how to start a statistics collection from the Dolby.io Communications APIs.

import WebRTCStats from '@dolbyio/webrtc-stats';
import VoxeetSdk from '@voxeet/voxeet-web-sdk';

const collection = new WebRTCStats({
    getStatsInterval: 1000,
    getStats: async () => {
        // See: https://docs.dolby.io/communications-apis/docs/js-client-sdk-conferenceservice#localstats
        const webRTCStats = await VoxeetSDK.conference.localStats();

        // Convert the WebRTCStats object to RTCStatsReport
        const values = Array.from(webRTCStats.values())[0];
        const map = new Map();
        for (let i = 0; i < values.length; i++) {
            const element = values[i];
            map.set(element.id, element);
        }
        return map;
    },
});

// The stats event is triggered after each interval has elapsed
collection.on('stats', (event) => {
    // Triggered when the statistics have been parsed
    console.log(event);
});

// Start the statistics collection
collection.start();

How to

Run tests:

npm run test

Create distribution package:

npm run build