Voice Diagnostics SDK
The Voice Diagnostics SDK provides functions to test input and output audio devices, and the functionality to test network bandwidth requirements towards Twilio’s servers.
This SDK requires the use of Twilio NTS to perform the network tests. Using NTS will incur charges as per NTS pricing.
Features
- Input audio device tests include volume calculation
- Output audio device tests are done by playing a sound file to the selected device
- Bandwidth requirements tests
Prerequisites
- A Twilio account. Sign up for free here
- Node.js v10+
- NPM v6+ (comes installed with newer Node versions)
Installation
Building the project locally
git clone git@github.com:twilio/rtc-diagnostics.git
cd rtc-diagnostics
npm install
npm run build
NPM
You can install directly from npm.
npm install @twilio/rtc-diagnostics --save
Or install from a local directory.
npm install /local-path-to-repo/rtc-diagnostics
Using this method, you can import rtc-diagnostics
like so:
import { testBitrate } from '@twilio/rtc-diagnostics';
Script tag
You can also include rtc-diagnostics.js
directly in your web app using a <script>
tag.
<script src="https://my-server-path/rtc-diagnostics.js"></script>
Using this method, rtc-diagnostics.js
will set a browser global:
const { testBitrate } = Twilio.Diagnostics;
Usage
The following are examples for running tests. For more information, please refer to the API Docs
BitrateTest Example
import { testBitrate } from '@twilio/rtc-diagnostics';
const bitrateTest = testBitrate({
iceServers: [{
credential: 'bar',
username: 'foo',
urls: 'turn:global.turn.twilio.com:3478?transport=udp',
}],
});
bitrateTest.on('bitrate', (bitrate) => {
console.log(bitrate);
});
bitrateTest.on('error', (error) => {
console.log(error);
});
bitrateTest.on('end', (report) => {
console.log(report);
});
setTimeout(() => {
bitrateTest.stop();
}, 10000);
See BitrateTest.Options
for more information for how to obtain the urls values
InputTest Example
import { testInputDevice, InputTest } from '@twilio/rtc-diagnostics';
const outputDeviceTest = testInputDevice({
deviceId: ...,
});
inputDeviceTest.on(InputTest.Events.Volume, (volume) => {
console.log(volume);
});
inputDeviceTest.on(InputTest.Events.Error, (error) => {
console.error(error);
});
inputDeviceTest.on(InputTest.Events.End, (report) => {
console.log(report);
});
setTimeout(() => {
inputDeviceTest.stop();
}, 10000);
OutputTest Example
import { testOutputDevice, OutputTest } from '@twilio/rtc-diagnostics';
const outputDeviceTest = testOutputDevice({
deviceId: ...,
});
outputDeviceTest.on(InputTest.Events.Volume, (volume) => {
console.log(volume);
});
outputDeviceTest.on(InputTest.Events.Error, (error) => {
console.error(error);
});
outputDeviceTest.on(InputTest.Events.End, (report) => {
console.log(report);
});
setTimeout(() => {
outputDeviceTest.stop();
}, 10000);
Related
License
See LICENSE.md