### Install libmediasoupclient
Source: https://mediasoup.org/documentation/v3/libmediasoupclient/installation
Optionally install the built libmediasoupclient library to the system.
```bash
$ make install -C build/
```
--------------------------------
### Install mediasoup-client v3
Source: https://mediasoup.org/documentation/v3/mediasoup-client/installation
Use npm to install version 3 of the mediasoup-client library. This command should be run in your client application's directory.
```bash
$ npm install mediasoup-client@3
```
--------------------------------
### Install mediasoup v3 via NPM
Source: https://mediasoup.org/documentation/v3/mediasoup/installation
Installs the mediasoup v3 package using NPM. The installation process will attempt to fetch a prebuilt mediasoup-worker binary or build it locally if not found.
```bash
$ npm install mediasoup@3
```
--------------------------------
### mediasoup v3 Worker Logs Example
Source: https://mediasoup.org/documentation/v3/mediasoup/debugging
This example shows typical log output from a mediasoup worker process, including configuration details and internal events.
```text
mediasoup:worker[pid:80653] mediasoup-worker::main() | starting mediasoup-worker process [version:3.0.0-dev] +0ms
mediasoup:worker[pid:80653] mediasoup-worker::main() | little-endian CPU detected +0ms
mediasoup:worker[pid:80653] mediasoup-worker::main() | 64 bits architecture detected +1ms
mediasoup:worker[pid:80653] Settings::PrintConfiguration() | +0ms
mediasoup:worker[pid:80653] Settings::PrintConfiguration() | logLevel : debug +0ms
mediasoup:worker[pid:80653] Settings::PrintConfiguration() | logTags : info,simulcast +0ms
mediasoup:worker[pid:80653] Settings::PrintConfiguration() | rtcMinPort : 40000 +0ms
mediasoup:worker[pid:80653] Settings::PrintConfiguration() | rtcMaxPort : 49999 +0ms
mediasoup:worker[pid:80653] Settings::PrintConfiguration() | +0ms
mediasoup:worker[pid:80653] DepLibUV::PrintVersion() | libuv version: "1.27.0" +0ms
mediasoup:worker[pid:80653] DepOpenSSL::ClassInit() | openssl version: "OpenSSL 1.1.1b 26 Feb 2019" +0ms
mediasoup:worker[pid:80653] DepLibSRTP::ClassInit() | libsrtp version: "libsrtp 2.0.0" +0ms
mediasoup:Worker worker process running [pid:80653] +28ms
mediasoup:Worker createRouter() +1m
mediasoup:Channel[pid:80653] request() [method:worker.createRouter, id:1] +1m
mediasoup:Channel[pid:80653] request succeeded [method:worker.createRouter, id:1] +4ms
mediasoup:Router constructor() +0ms
mediasoup:Channel[pid:80653] request() [method:router.createWebRtcTransport, id:3] +360ms
mediasoup:Channel[pid:80653] request succeeded [method:router.createWebRtcTransport, id:3] +4ms
mediasoup:Transport constructor() +0ms
mediasoup:WebRtcTransport constructor() +0ms
mediasoup:Transport setMaxIncomingBitrate() [bitrate:1500000] +4ms
mediasoup:Channel[pid:80653] request() [method:transport.setMaxIncomingBitrate, id:4] +8ms
mediasoup:Channel[pid:80653] request succeeded [method:transport.setMaxIncomingBitrate, id:4] +2ms
```
--------------------------------
### Connect PlainTransport
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Examples of calling connect() on a PlainTransport with various configurations for comedia, rtcpMux, and SRTP.
```javascript
// Calling connect() on a PlainTransport created with comedia and rtcpMux set.
await plainTransport.connect(
{
ip : '1.2.3.4',
port : 9998
});
```
```javascript
// Calling connect() on a PlainTransport created with comedia unset and rtcpMux
// also unset.
await plainTransport.connect(
{
ip : '1.2.3.4',
port : 9998,
rtcpPort : 9999
});
```
```javascript
// Calling connect() on a PlainTransport created with comedia set and
// enableSrtp enabled.
await plainTransport.connect(
{
srtpParameters :
{
cryptoSuite : 'AES_CM_128_HMAC_SHA1_80',
keyBase64 : 'ZnQ3eWJraDg0d3ZoYzM5cXN1Y2pnaHU5NWxrZTVv'
}
});
```
```javascript
// Calling connect() on a PlainTransport created with comedia unset, rtcpMux
// set and enableSrtp enabled.
await plainTransport.connect(
{
ip : '1.2.3.4',
port : 9998,
srtpParameters :
{
cryptoSuite : 'AEAD_AES_256_GCM',
keyBase64 : 'YTdjcDBvY2JoMGY5YXNlNDc0eDJsdGgwaWRvNnJsamRrdG16aWVpZHphdHo='
}
});
```
--------------------------------
### Implement Consumer Listener
Source: https://mediasoup.org/documentation/v3/libmediasoupclient/api
Example implementation of the ConsumerListener interface to handle transport closure events.
```cpp
void MyConsumerListener::OnTransportClose(mediasoupclient::Consumer* consumer)
{
std::cout << "transport closed" << std::endl;
}
```
--------------------------------
### Force local build of mediasoup-worker
Source: https://mediasoup.org/documentation/v3/mediasoup/installation
Forces the installation process to skip downloading prebuilt binaries and build the mediasoup-worker locally. This is useful when prebuilt binaries are unavailable or when developing locally.
```bash
MEDIASOUP_SKIP_WORKER_PREBUILT_DOWNLOAD="true" npm install mediasoup@3
```
--------------------------------
### Specify Python executable for build
Source: https://mediasoup.org/documentation/v3/mediasoup/installation
Specifies the Python executable to use during the mediasoup installation if the default 'python3' or 'python' commands are not pointing to the correct version. This is required when building the mediasoup-worker locally.
```bash
$ PYTHON=python3.9 npm install mediasoup@3
```
--------------------------------
### Create WebRTC Transport
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Initializes a new WebRTC transport for the router. Use the first example for standard server-based configurations and the second for manual listen information.
```javascript
const transport = await router.createWebRtcTransport(
{
webRtcServer : webRtcServer
enableUdp : true,
enableTcp : false
});
```
```javascript
const transport = await router.createWebRtcTransport(
{
listenInfos :
[
{
protocol : "udp",
ip : "192.168.0.111",
announcedAddress : "88.12.10.41"
}
]
});
```
--------------------------------
### DataConsumerListener::OnMessage Implementation
Source: https://mediasoup.org/documentation/v3/libmediasoupclient/api
Implement this method to process incoming messages on a DataChannel. This example specifically handles messages with the label 'chat'.
```cpp
void MyConsumerListener::OnMessage(DataConsumer* dataConsumer, const webrtc::DataBuffer& buffer)
{
if (dataConsumer->GetLabel() == "chat")
{
std::string message = std::string(buffer.data.data(), buffer.data.size());
std::cout << "received chat message: " << message << std::endl;
}
}
```
--------------------------------
### Specify custom mediasoup-worker binary path
Source: https://mediasoup.org/documentation/v3/mediasoup/installation
Uses a custom mediasoup-worker binary during installation and runtime. Set the MEDIASOUP_WORKER_BIN environment variable to the path of your desired binary.
```bash
MEDIASOUP_WORKER_BIN="/home/xxx/src/foo/mediasoup-worker" npm install mediasoup@3
```
```bash
MEDIASOUP_WORKER_BIN="/home/xxx/src/foo/mediasoup-worker" node myapp.js
```
--------------------------------
### Implement Custom Log Handler
Source: https://mediasoup.org/documentation/v3/libmediasoupclient/api
Implement the LogHandlerInterface to define a custom handler for log messages. This example shows how to print log messages to standard output.
```cpp
void MyLogHandler::OnLog(LogLevel level, char* payload, size_t len)
{
std::cout << payload << std::endl;
}
```
--------------------------------
### Enable Debug Logging in localStorage
Source: https://mediasoup.org/documentation/v3/mediasoup-client/debugging
Set the 'debug' key in localStorage to enable specific log levels for mediasoup-client. This example enables WARN and ERROR messages.
```html
```
--------------------------------
### Instantiating Device
Source: https://mediasoup.org/documentation/v3/mediasoup-client/api
Creates a new instance of the main Device class.
```javascript
const device = new mediasoupClient.Device();
```
--------------------------------
### Device.factory(options)
Source: https://mediasoup.org/documentation/v3/mediasoup-client/api
Creates a new Device instance. This is the recommended way to initialize a device for media communication.
```APIDOC
## Device.factory(options)
### Description
Creates a new device instance. This method is asynchronous and may throw an UnsupportedError if the current environment is not supported.
### Parameters
- **options** (DeviceOptions) - Optional - Configuration object containing handlerName or handlerFactory.
### Returns
- **Device** - A new instance of the Device class.
### Example
```javascript
let device;
try {
device = await Device.factory();
} catch (error) {
if (error.name === 'UnsupportedError')
console.warn('browser not supported');
}
```
```
--------------------------------
### Create a new WebRTC server
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Initializes a new WebRTC server with the provided listen information.
```javascript
const webRtcServer = await worker.createWebRtcServer(
{
listenInfos :
[
{
protocol : 'udp',
ip : '9.9.9.9',
port : 20000
},
{
protocol : 'tcp',
ip : '9.9.9.9',
port : 20000
}
]
});
```
--------------------------------
### Create an AudioLevelObserver
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Initializes a new audio level observer with specified threshold and interval settings.
```javascript
const audioLevelObserver = await router.createAudioLevelObserver(
{
maxEntries : 1,
threshold : -70,
interval : 2000
});
```
--------------------------------
### Get libmediasoupclient Version
Source: https://mediasoup.org/documentation/v3/libmediasoupclient/api
Retrieves the current version string of the libmediasoupclient library.
```cpp
mediasoupclient::Version();
// "1.0.0"
```
--------------------------------
### Handle NotFoundError in transport.consume
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Example of catching a NotFoundError when a producer is closed during a consume operation.
```javascript
import { NotFoundError } from 'mediasoup/errors';
// [...]
try
{
const consumer = await transport.consume(
{
producerId: 'xxxxx',
rtpCapabilities: peerRtpCapabilities
});
}
catch (error)
{
if (error.instanceof(NotFoundError))
{
// Producer is closed, this is a legitimate scenario.
}
else
{
// Something was wrong.
}
}
```
--------------------------------
### Get DirectTransport Statistics
Source: https://mediasoup.org/documentation/v3/mediasoup/rtc-statistics
Retrieve statistics for a DirectTransport. This includes bitrate and packet counts.
```javascript
const stats = await directTransport.getStats();
// =>
[
{
"probationBytesSent": 0,
"probationSendBitrate": 0,
"recvBitrate": 5672,
"rtpBytesReceived": 0,
"rtpBytesSent": 0,
"rtpRecvBitrate": 0,
"rtpSendBitrate": 0,
"rtxBytesReceived": 0,
"rtxBytesSent": 0,
"rtxRecvBitrate": 0,
"rtxSendBitrate": 0,
"sendBitrate": 3204,
"timestamp": 894308981,
"transportId": "huif60cd-10ac-443b-8529-6474ecba2123",
"type": "direct-transport"
}
]
```
--------------------------------
### Create a new device using constructor
Source: https://mediasoup.org/documentation/v3/mediasoup-client/api
Initializes a new device instance. Note that this method is deprecated in favor of Device.factory().
```javascript
let device;
try
{
device = new mediasoupClient.Device();
}
catch (error)
{
if (error.name === 'UnsupportedError')
console.warn('browser not supported');
}
```
--------------------------------
### Initialize libmediasoupclient
Source: https://mediasoup.org/documentation/v3/libmediasoupclient/api
Performs the necessary initialization for the libmediasoupclient library, including setting up libwebrtc.
```cpp
mediasoupclient::Initialize();
```
--------------------------------
### Create a Device Instance
Source: https://mediasoup.org/documentation/v3/libmediasoupclient/api
Instantiates a new Device object. This is the primary entry point for C++ client-side applications using mediasoup.
```cpp
auto* device = new mediasoupclient::Device();
```
--------------------------------
### Create a new device using factory
Source: https://mediasoup.org/documentation/v3/mediasoup-client/api
Initializes a new device instance. This is the preferred method over the constructor.
```javascript
let device;
try
{
device = await Device.factory();
}
catch (error)
{
if (error.name === 'UnsupportedError')
console.warn('browser not supported');
}
```
--------------------------------
### producer.getStats()
Source: https://mediasoup.org/documentation/v3/mediasoup-client/api
Gets the local RTP sender statistics by calling getStats() in the underlying RTCRtpSender instance.
```APIDOC
## producer.getStats()
### Description
Gets the local RTP sender statistics by calling `getStats()` in the underlying `RTCRtpSender` instance.
### Returns
- **RTCStatsReport** (Object) - The statistics report.
```
--------------------------------
### AudioLevelObserverOptions
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Configuration options for initializing an AudioLevelObserver.
```APIDOC
### AudioLevelObserverOptions
- **maxEntries** (Number) - Optional - Maximum number of entries in the “volumes” event. Default: 1
- **threshold** (Number) - Optional - Minimum average volume (in dBvo from -127 to 0) for entries in the “volumes” event. Default: -80
- **interval** (Number) - Optional - Interval in ms for checking audio volumes. Default: 1000
- **appData** (AppData) - Optional - Custom application data. Default: { }
```
--------------------------------
### Get DataConsumer Statistics
Source: https://mediasoup.org/documentation/v3/mediasoup/rtc-statistics
Retrieve statistics for a data consumer, including messages and bytes sent.
```javascript
const stats = await dataConsumer.getStats();
// =>
[
{
"type": "data-consumer",
"label": "nnawjiwbav",
"protocol": "app-protocol",
"messagesSent": 3496,
"bytesSent": 65934
}
]
```
--------------------------------
### Device.load
Source: https://mediasoup.org/documentation/v3/mediasoup-client/api
Initializes the device with router RTP capabilities.
```APIDOC
## device.load({ routerRtpCapabilities, preferLocalCodecsOrder })
### Description
Loads the device with the provided router RTP capabilities.
### Parameters
- **routerRtpCapabilities** (object) - Required
- **preferLocalCodecsOrder** (boolean) - Optional
```
--------------------------------
### Get DataProducer Statistics
Source: https://mediasoup.org/documentation/v3/mediasoup/rtc-statistics
Retrieve statistics for a data producer, including messages and bytes received.
```javascript
const stats = await dataProducer.getStats();
// =>
[
{
"type": "data-producer",
"label": "nnawjiwbav",
"protocol": "app-protocol",
"messagesReceived": 3496,
"bytesReceived": 65934
}
]
```
--------------------------------
### Create a new router
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Initializes a new router instance with the specified media codecs.
```javascript
const mediaCodecs =
[
{
kind : "audio",
mimeType : "audio/opus",
clockRate : 48000,
channels : 2
},
{
kind : "video",
mimeType : "video/H264",
clockRate : 90000,
parameters :
{
"packetization-mode" : 1,
"profile-level-id" : "42e01f",
"level-asymmetry-allowed" : 1
}
}
];
const router = await worker.createRouter({ mediaCodecs });
```
--------------------------------
### Send direct messages via DataProducer
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Examples of sending string and binary messages directly from the Node.js process.
```javascript
const stringMessage = "hello";
const binaryMessage = Buffer.from([ 1, 2, 3, 4 ]);
dataProducer.send(stringMessage);
dataProducer.send(binaryMessage);
```
```javascript
dataProducer.send("bye", /*ppid*/ undefined, /*subchannels*/ [ 24 ]);
```
--------------------------------
### Handle transportclose event
Source: https://mediasoup.org/documentation/v3/mediasoup-client/api
Example listener for the transportclose event, which indicates the consumer has been closed due to the transport closing.
```javascript
consumer.on("transportclose", () =>
{
console.log("transport closed so consumer closed");
});
```
--------------------------------
### Load Device with Router Capabilities
Source: https://mediasoup.org/documentation/v3/mediasoup-client/api
Initializes the device using RTP capabilities retrieved from the mediasoup router.
```javascript
await device.load({ routerRtpCapabilities });
// Now the device is ready.
```
--------------------------------
### Consume remote media with streamId
Source: https://mediasoup.org/documentation/v3/mediasoup-client/api
Example of using streamId to group related inbound media streams for synchronization.
```javascript
micConsumer = await transport.consume({ streamId: `${remotePeerId}-mic-webcam` });
webcamConsumer = await transport.consume({ streamId: `${remotePeerId}-mic-webcam` });
screensharingConsumer = await transport.consume({ streamId: `${remotePeerId}-screensharing` });
```
--------------------------------
### Checkout and Build libwebrtc
Source: https://mediasoup.org/documentation/v3/libmediasoupclient/installation
Steps to fetch and sync the libwebrtc source code, and then checkout a specific version. This is a prerequisite for building libmediasoupclient.
```bash
$ cd /home/foo/src
$ mkdir webrtc-checkout
$ cd webrtc-checkout
$ fetch --nohooks webrtc
$ gclient sync
$ cd src
$ git checkout -b m140 refs/remotes/branch-heads/7339
$ gclient sync
```
--------------------------------
### Get PlainTransport Statistics
Source: https://mediasoup.org/documentation/v3/mediasoup/rtc-statistics
Retrieve statistics for a PlainTransport. This includes packet counts, bitrate, and transport tuple information.
```javascript
const stats = await plainTransport.getStats();
// =>
[
{
"bytesReceived": 467406,
"bytesSent": 2550,
"comedia": true,
"rtcpMux": true,
"probationBytesSent": 0,
"probationSendBitrate": 0,
"recvBitrate": 1802072,
"rtpBytesReceived": 5104571,
"rtpBytesSent": 0,
"rtpRecvBitrate": 1835651,
"rtpSendBitrate": 0,
"rtxBytesReceived": 0,
"rtxBytesSent": 0,
"rtxRecvBitrate": 0,
"rtxSendBitrate": 0,
"sendBitrate": 24,
"timestamp": 924308648,
"transportId": "8e7dc219-5cb0-4cca-b1ca-0bbbc584a364",
"tuple":
{
"localAddress": "11.22.33.44",
"localPort": 45346,
"protocol": "udp",
"remoteIp": "55.66.77.88",
"remotePort": 56971
},
"type": "plain-rtp-transport"
}
]
```
--------------------------------
### Defining custom AppData type
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Example of defining the AppData type to specify custom appData content for mediasoup entities.
```typescript
export type AppData =
{
[key: string]: unknown;
};
```
--------------------------------
### Importing mediasoup-client
Source: https://mediasoup.org/documentation/v3/mediasoup-client/api
Demonstrates how to import the library using ES6 modules or CommonJS, including destructuring options.
```javascript
// Using ES6 import.
import * as mediasoupClient from "mediasoup-client";
// Or using destructuring assignment:
import {
types,
version,
Device,
detectDevice,
detectDeviceAsync,
parseScalabilityMode,
ortc,
enhancedEvents,
FakeHandler,
testFakeParameters,
debug
} from "mediasoup-client";
// Using CommonJS.
const mediasoupClient = require("mediasoup-client");
// Or using destructuring assignment:
const {
types,
version,
Device,
detectDevice,
detectDeviceAsync,
parseScalabilityMode,
ortc,
enhancedEvents,
FakeHandler,
testFakeParameters,
debug
} = require("mediasoup-client");
```
--------------------------------
### Get WebRtcTransport Statistics
Source: https://mediasoup.org/documentation/v3/mediasoup/rtc-statistics
Retrieve statistics for a WebRtcTransport. This includes ICE and DTLS states, bitrate information, and packet counts.
```javascript
const stats = await webRtcTransport.getStats();
// =>
[
{
"availableOutgoingBitrate": 6750000,
"bytesReceived": 5360091,
"bytesSent": 20988,
"dtlsState": "connected",
"iceRole": "controlled",
"iceSelectedTuple": {
"localAddress": "11.22.33.44",
"localPort": 56726,
"protocol": "udp",
"remoteIp": "55.66.77.88",
"remotePort": 52320
},
"iceState": "completed",
"maxIncomingBitrate": 5500000,
"probationBytesSent": 0,
"probationSendBitrate": 0,
"recvBitrate": 1802072,
"rtpBytesReceived": 5104571,
"rtpBytesSent": 0,
"rtpPacketLossSent": 0,
"rtpRecvBitrate": 1835651,
"rtpSendBitrate": 0,
"rtxBytesReceived": 179934,
"rtxBytesSent": 0,
"rtxRecvBitrate": 0,
"rtxSendBitrate": 0,
"sctpState": "connected",
"sendBitrate": 4992,
"timestamp": 18079607138,
"transportId": "a00746bd-0758-4dfc-9f5f-c0ad4eb326d5",
"type": "webrtc-transport"
}
]
```
--------------------------------
### worker.createWebRtcServer(options)
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Creates a new WebRTC server instance within the worker.
```APIDOC
## worker.createWebRtcServer(options)
### Description
Creates a new WebRTC server.
### Parameters
- **options** (WebRtcServerOptions) - Required - WebRTC server options.
- **WorkerAppData** (AppData) - Optional - Custom appData definition.
```
--------------------------------
### Set Max Spatial Layer
Source: https://mediasoup.org/documentation/v3/mediasoup-client/api
Limits the highest transmitted RTP stream in a simulcast setup by specifying the encoding index.
```javascript
// Assuming `encodings` array has 3 entries, let's enable just the first and
// second streams (indexes 0 and 1).
await producer.setMaxSpatialLayer(1);
```
--------------------------------
### Importing the mediasoup module
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Demonstrates how to import the mediasoup module using ES6 syntax or CommonJS, including destructuring options.
```javascript
// Using ES6 import:
import * as mediasoup from "mediasoup";
// Or using destructuring assignment:
import {
types,
version,
workerBin,
observer,
createWorker,
getSupportedRtpCapabilities,
parseScalabilityMode,
ortc,
extras
} from "mediasoup";
// Using CommonJS:
const mediasoup = require("mediasoup");
// Or using destructuring assignment:
const {
types,
version,
workerBin,
observer,
createWorker,
getSupportedRtpCapabilities,
parseScalabilityMode,
ortc,
extras
} = require("mediasoup");
```
--------------------------------
### Get PipeTransport Statistics
Source: https://mediasoup.org/documentation/v3/mediasoup/rtc-statistics
Retrieve statistics for a PipeTransport. This includes bitrate and packet counts, along with the transport's local and remote tuple.
```javascript
const stats = await pipeTransport.getStats();
// =>
[
{
"probationBytesSent": 0,
"probationSendBitrate": 0,
"recvBitrate": 1802072,
"rtpBytesReceived": 5104571,
"rtpBytesSent": 0,
"rtpRecvBitrate": 1835651,
"rtpSendBitrate": 0,
"rtxBytesReceived": 0,
"rtxBytesSent": 0,
"rtxRecvBitrate": 0,
"rtxSendBitrate": 0,
"sendBitrate": 24,
"timestamp": 924308980,
"transportId": "352f60cd-10ac-443b-8529-6474ecba2e46",
"tuple":
{
"localAddress": "11.22.33.44",
"localPort": 12455,
"protocol": "udp",
"remoteIp": "11.22.33.44",
"remotePort": 42301
},
"type": "pipe-transport"
}
]
```
--------------------------------
### Configure libmediasoupclient Build with CMake
Source: https://mediasoup.org/documentation/v3/libmediasoupclient/installation
Configure the libmediasoupclient build using CMake, specifying paths to libwebrtc sources and binaries.
```bash
$ cmake . -Bbuild \
-DLIBWEBRTC_INCLUDE_PATH:PATH=${PATH_TO_LIBWEBRTC_SOURCES} \
-DLIBWEBRTC_BINARY_PATH:PATH=${PATH_TO_LIBWEBRTC_BINARY}
$ make -C build/
```
--------------------------------
### Build libmediasoupclient
Source: https://mediasoup.org/documentation/v3/libmediasoupclient/installation
Configures and builds the libmediasoupclient library using CMake and make. Requires specifying the include and binary paths for the pre-built libwebrtc.
```bash
$ cd /home/foo/src/libmediasoupclient
$ cmake . -Bbuild \
-DLIBWEBRTC_INCLUDE_PATH:PATH=/home/foo/src/webrtc-checkout/src \
-DLIBWEBRTC_BINARY_PATH:PATH=/home/foo/src/webrtc-checkout/src/out/m140/obj
$ make -C build/
```
--------------------------------
### Observe new WebRTC server creation
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Listens for the 'newwebrtcserver' event on the observer to track WebRTC server creation.
```javascript
worker.observer.on("newwebrtcserver", (webRtcServer) =>
{
console.log("new WebRTC server created [id:%s]", webRtcServer.id);
});
```
--------------------------------
### Get PipeConsumer RTP Statistics
Source: https://mediasoup.org/documentation/v3/mediasoup/rtc-statistics
Retrieve statistics for a consumer created on a PipeTransport. This includes statistics for each RTP stream being forwarded, but not for the associated producer's inbound RTP streams.
```javascript
const stats = await pipeConsumer.getStats();
// =>
[
{
"bitrate": 868184,
"byteCount": 19478693,
"firCount": 0,
"fractionLost": 0,
"kind": "video",
"mimeType": "video/VP8",
"nackCount": 0,
"nackPacketCount": 0,
"packetCount": 18696,
"packetsDiscarded": 0,
"packetsLost": 0,
"packetsRepaired": 0,
"packetsRetransmitted": 0,
"pliCount": 0,
"roundTripTime": 5.15,
"score": 10,
"ssrc": 116684231,
"timestamp": 514442975,
"type": "outbound-rtp"
},
{
"bitrate": 350000,
"byteCount": 8393425,
"firCount": 0,
"fractionLost": 0,
"kind": "video",
"mimeType": "video/VP8",
"nackCount": 0,
"nackPacketCount": 0,
"packetCount": 9417,
"packetsDiscarded": 0,
"packetsLost": 0,
"packetsRepaired": 0,
"packetsRetransmitted": 0,
"pliCount": 0,
"roundTripTime": 4.43,
"score": 10,
"ssrc": 116684230,
"timestamp": 514442975,
"type": "outbound-rtp"
},
{
"bitrate": 153456,
"byteCount": 3442897,
"firCount": 0,
"fractionLost": 0,
"kind": "video",
"mimeType": "video/VP8",
"nackCount": 0,
"nackPacketCount": 0,
"packetCount": 5393,
"packetsDiscarded": 0,
"packetsLost": 0,
"packetsRepaired": 0,
"packetsRetransmitted": 0,
"pliCount": 0,
"roundTripTime": 5.6,
"score": 10,
"ssrc": 116684229,
"timestamp": 514442975,
"type": "outbound-rtp"
}
]
```
--------------------------------
### mediasoup.getSupportedRtpCapabilities()
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Returns a cloned copy of the mediasoup supported RTP capabilities.
```APIDOC
## mediasoup.getSupportedRtpCapabilities()
### Description
Returns a cloned copy of the mediasoup supported RTP capabilities, specifically the content of the mediasoup/node/src/supportedRtpCapabilities.ts file.
```
--------------------------------
### Create a new mediasoup worker
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Initializes a worker instance with specific settings and optional custom appData.
```javascript
const worker = await mediasoup.createWorker<{ foo: number }>(
{
logLevel : "warn",
dtlsCertificateFile : "/home/foo/dtls-cert.pem",
dtlsPrivateKeyFile : "/home/foo/dtls-key.pem",
appData : { foo: 123 }
});
```
--------------------------------
### Get Simulcast Producer Statistics
Source: https://mediasoup.org/documentation/v3/mediasoup/rtc-statistics
Retrieves statistics for a producer using Simulcast. Each entry in the returned array corresponds to a discovered RTP stream, which may include multiple temporal layers.
```javascript
const stats = await producer.getStats();
// =>
[
{
"bitrate": 678400,
"bitrateByLayer":
{
"0.0": 237992,
"0.1": 145496,
"0.2": 294912
},
"byteCount": 4265668,
"firCount": 0,
"fractionLost": 0,
"jitter": 0,
"kind": "video",
"mimeType": "video/VP8",
"nackCount": 0,
"nackPacketCount": 0,
"packetCount": 4150,
"packetsDiscarded": 0,
"packetsLost": 0,
"packetsRepaired": 0,
"packetsRetransmitted": 95,
"pliCount": 5,
"rid": "r2",
"roundTripTime": 43.55,
"rtxPacketsDiscarded": 0,
"rtxSsrc": 2830213299,
"score": 10,
"ssrc": 689337360,
"timestamp": 925298114,
"type": "inbound-rtp"
},
{
"bitrate": 242784,
"bitrateByLayer":
{
"0.0": 85608,
"0.1": 52752,
"0.2": 104424
},
"byteCount": 1677745,
"firCount": 0,
"fractionLost": 0,
"jitter": 0,
"kind": "video",
"mimeType": "video/VP8",
"nackCount": 5,
"nackPacketCount": 31,
"packetCount": 2045,
"packetsDiscarded": 0,
"packetsLost": 4294967281,
"packetsRepaired": 15,
"packetsRetransmitted": 563,
"pliCount": 3,
"rid": "r1",
"roundTripTime": 48.1,
"rtxPacketsDiscarded": 0,
"rtxSsrc": 2486781276,
"score": 10,
"ssrc": 2995277190,
"timestamp": 925298114,
"type": "inbound-rtp"
},
{
"bitrate": 86768,
"bitrateByLayer":
{
"0.0": 29648,
"0.1": 19344,
"0.2": 37776
},
"byteCount": 581258,
"firCount": 0,
"fractionLost": 0,
"jitter": 2,
"kind": "video",
"mimeType": "video/VP8",
"nackCount": 0,
"nackPacketCount": 0,
"packetCount": 1362,
"packetsDiscarded": 0,
"packetsLost": 0,
"packetsRepaired": 0,
"packetsRetransmitted": 10,
"pliCount": 1,
"rid": "r0",
"roundTripTime": 49.77,
"rtxPacketsDiscarded": 0,
"rtxSsrc": 2118917939,
"score": 10,
"ssrc": 3060700812,
"timestamp": 925298114,
"type": "inbound-rtp"
}
]
```
--------------------------------
### Get Consumer RTP Statistics
Source: https://mediasoup.org/documentation/v3/mediasoup/rtc-statistics
Retrieve statistics for a consumer's outbound RTP stream and the associated producer's inbound RTP stream. This is the standard behavior for consumers on regular transports.
```javascript
const stats = await consumer.getStats();
// =>
[
{
"bitrate": 625312,
"byteCount": 879947,
"firCount": 0,
"fractionLost": 0,
"kind": "video",
"mimeType": "video/VP8",
"nackCount": 0,
"nackPacketCount": 0,
"packetCount": 979,
"packetsDiscarded": 0,
"packetsLost": 0,
"packetsRepaired": 0,
"packetsRetransmitted": 0,
"pliCount": 0,
"roundTripTime": 33.02,
"rtxSsrc": 836324070,
"score": 10,
"ssrc": 328066115,
"timestamp": 925531753,
"type": "outbound-rtp"
},
{
"bitrate": 627872,
"bitrateByLayer":
{
"0.0": 238856,
"0.1": 145872,
"0.2": 243144
},
"byteCount": 883855,
"firCount": 0,
"fractionLost": 0,
"jitter": 2,
"kind": "video",
"mimeType": "video/VP8",
"nackCount": 0,
"nackPacketCount": 0,
"packetCount": 979,
"packetsDiscarded": 0,
"packetsLost": 0,
"packetsRepaired": 0,
"packetsRetransmitted": 167,
"pliCount": 2,
"rtxSsrc": 1976184061,
"score": 10,
"ssrc": 2440984788,
"timestamp": 925531753,
"type": "inbound-rtp"
}
]
```
--------------------------------
### device.load
Source: https://mediasoup.org/documentation/v3/mediasoup-client/api
Loads the device with the RTP capabilities of the mediasoup router to initialize media settings.
```APIDOC
## device.load({ routerRtpCapabilities, preferLocalCodecsOrder })
### Description
Loads the device with the RTP capabilities of the mediasoup router. This is how the device knows about the allowed media codecs and other settings.
### Parameters
- **routerRtpCapabilities** (RtpCapabilities) - Required - The mediasoup router RTP capabilities.
- **preferLocalCodecsOrder** (Boolean) - Optional - Whether to prefer device's local order of codecs rather than the order of codecs provided to mediasoup server.
### Request Example
await device.load({ routerRtpCapabilities });
```
--------------------------------
### router.createAudioLevelObserver
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Creates a new audio level observer for the router.
```APIDOC
## router.createAudioLevelObserver(options)
### Description
Creates a new audio level observer.
### Parameters
- **options** (AudioLevelObserverOptions) - Optional - Options for the observer.
### Returns
- **AudioLevelObserver** - The created audio level observer instance.
### Example
```javascript
const audioLevelObserver = await router.createAudioLevelObserver({
maxEntries : 1,
threshold : -70,
interval : 2000
});
```
```
--------------------------------
### Get SVC Producer Statistics
Source: https://mediasoup.org/documentation/v3/mediasoup/rtc-statistics
Retrieves statistics for a producer using Scalable Video Coding (SVC). This will result in a single entry in the statistics array, representing one stream with multiple spatial and temporal layers.
```javascript
[
{
"bitrate": 680020,
"bitrateByLayer": {
"0.0": 38957,
"0.1": 48842,
"0.2": 72589,
"1.0": 135837,
"1.1": 175149,
"1.2": 260762,
"2.0": 323139,
"2.1": 461565,
"2.2": 680020
},
"byteCount": 337978,
"firCount": 0,
"fractionLost": 0,
"jitter": 4,
"kind": "video",
"mimeType": "video/VP9",
"nackCount": 0,
"nackPacketCount": 0,
"packetCount": 347,
"packetsDiscarded": 0,
"packetsLost": 0,
"packetsRepaired": 0,
"packetsRetransmitted": 149,
"pliCount": 0,
"roundTripTime": 34.57,
"rtxPacketsDiscarded": 0,
"rtxSsrc": 4171189299,
"score": 10,
"ssrc": 518176773,
"timestamp": 1205013977,
"type": "inbound-rtp"
}
]
```
--------------------------------
### dataConsumer.resume()
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Resumes the data consumer.
```APIDOC
## dataConsumer.resume()
### Description
Resumes the data consumer (messages are sent again to the consuming endpoint).
```
--------------------------------
### transport.observer.on("newconsumer", fn(consumer))
Source: https://mediasoup.org/documentation/v3/mediasoup-client/api
Emitted when a new consumer is created.
```APIDOC
## transport.observer.on("newconsumer", fn(consumer))
### Description
Emitted when a new consumer is created.
### Parameters
- **consumer** (Consumer) - New consumer.
### Example
```javascript
transport.observer.on("newconsumer", (consumer) =>
{
console.log("new consumer created [id:%s]", consumer.id);
});
```
```
--------------------------------
### Create Plain Transports for Audio and Video
Source: https://mediasoup.org/documentation/v3/communication-between-client-and-server
Initializes plain transports on the router to receive RTP streams. These transports must be configured with comedia enabled to allow the server to receive media from the external source.
```javascript
const audioTransport = await router.createPlainTransport(
{
listenIp : '127.0.0.1',
rtcpMux : false,
comedia : true
});
// Read the transport local RTP port.
const audioRtpPort = audioTransport.tuple.localPort;
// => 3301
// Read the transport local RTCP port.
const audioRtcpPort = audioTransport.rtcpTuple.localPort;
// => 4502
```
```javascript
const videoTransport = await router.createPlainTransport(
{
listenIp : '127.0.0.1',
rtcpMux : false,
comedia : true
});
// Read the transport local RTP port.
const videoRtpPort = videoTransport.tuple.localPort;
// => 3501
// Read the transport local RTCP port.
const videoRtcpPort = videoTransport.rtcpTuple.localPort;
// => 2989
```
--------------------------------
### Include mediasoupclient Header
Source: https://mediasoup.org/documentation/v3/libmediasoupclient/api
Include the main header file for the libmediasoupclient library.
```cpp
#include "libmediasoupclient/mediasoupclient.hpp"
```
--------------------------------
### WebRtcTransportOptions
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Configuration options for creating a WebRtcTransport. One of webRtcServer, listenInfos, or listenIps must be provided.
```APIDOC
### WebRtcTransportOptions
- **webRtcServer** (WebRtcServer) - Optional - Use a WebRTC server to handle network traffic.
- **listenInfos** (Array) - Optional - Listening information in order of preference.
- **listenIps** (Array) - Optional - Deprecated. Listening IP address or addresses.
- **port** (Number) - Optional - Fixed port to listen on.
- **enableUdp** (Boolean) - Optional - Listen in UDP (Default: true).
- **enableTcp** (Boolean) - Optional - Listen in TCP (Default: false).
- **preferUdp** (Boolean) - Optional - Prefer UDP (Default: false).
- **preferTcp** (Boolean) - Optional - Prefer TCP (Default: false).
- **iceConsentTimeout** (Number) - Optional - ICE consent timeout in seconds (Default: 30).
- **initialAvailableOutgoingBitrate** (Number) - Optional - Initial available outgoing bitrate in bps (Default: 600000).
- **enableSctp** (Boolean) - Optional - Create a SCTP association (Default: false).
- **maxSendMessageSize** (Number) - Optional - Max size for SCTP messages sent (Default: 262144).
- **maxReceiveMessageSize** (Number) - Optional - Max size for SCTP messages received (Default: 262144).
- **sctpSendBufferSize** (Number) - Optional - Max SCTP send buffer (Default: 2000000).
- **sctpPerStreamSendQueueLimit** (Number) - Optional - Per stream send queue size limit (Default: 2000000).
- **sctpMaxReceiverWindowBufferSize** (Number) - Optional - Max received window buffer size (Default: 5242880).
- **appData** (AppData) - Optional - Custom application data.
```
--------------------------------
### router.createActiveSpeakerObserver
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Creates a new active speaker observer.
```APIDOC
## router.createActiveSpeakerObserver(options)
### Description
Creates a new active speaker observer. This is an asynchronous operation that returns an ActiveSpeakerObserver instance.
### Parameters
- **options** (ActiveSpeakerObserverOptions) - Optional - Observer options.
- **ActiveSpeakerObserverAppData** (AppData) - Optional - Custom appData definition (default: { }).
### Request Example
```javascript
const activeSpeakerObserver = await router.createActiveSpeakerObserver({
interval : 500
});
```
```
--------------------------------
### Configure libwebrtc Build (Linux)
Source: https://mediasoup.org/documentation/v3/libmediasoupclient/installation
Generates build files for libwebrtc on Linux Debian Stretch with GCC 6.3 using gn. Includes specific arguments for the Linux environment.
```bash
$ gn gen out/m140 --args='is_debug=false is_component_build=false is_clang=false rtc_include_tests=false rtc_use_h264=true use_rtti=true use_custom_libcxx=false treat_warnings_as_errors=false use_ozone=true'
```
--------------------------------
### ProducerOptions
Source: https://mediasoup.org/documentation/v3/mediasoup-client/api
Configuration options for creating a new Producer instance via transport.produce().
```APIDOC
## ProducerOptions
### Description
Configuration object used when creating a producer to define track behavior, encoding settings, and codec preferences.
### Parameters
- **track** (MediaStreamTrack) - Required - An audio or video track.
- **streamId** (String) - Optional - Stream id used to group tracks for synchronization.
- **encodings** (Array) - Optional - Encoding settings for simulcast or SVC.
- **codecOptions** (ProducerCodecOptions) - Optional - Per codec specific options.
- **headerExtensionOptions** (ProducerHeaderExtensionOptions) - Optional - RTP header extension options.
- **codec** (RtpCodecCapability) - Optional - Specific media codec to use.
- **stopTracks** (Boolean) - Optional - Whether to call stop() on tracks when the producer is closed. Default: true.
- **disableTrackOnPause** (Boolean) - Optional - Whether to set track.enabled = false when paused. Default: true.
- **zeroRtpOnPause** (Boolean) - Optional - If true, zero RTP is sent when paused. Default: false.
- **onRtpSender** (OnRtpSenderCallback) - Optional - Callback invoked when RTCRtpSender is created.
- **appData** (Object) - Optional - Custom application data.
```
--------------------------------
### Observe new router creation
Source: https://mediasoup.org/documentation/v3/mediasoup/api
Listens for the 'newrouter' event on the observer to track router creation.
```javascript
worker.observer.on("newrouter", (router) =>
{
console.log("new router created [id:%s]", router.id);
});
```