A demo application of mediasoup v3.
Try it online at https://v3demo.mediasoup.org
- mediasoup website and documentation: mediasoup.org
- mediasoup support forum: mediasoup.discourse.group
By adding query parameters into the URL you can set certain settings of the application:
Parameter | Type | Description | Default Value |
---|---|---|---|
roomId |
String | Id of the room | Autogenerated |
displayName |
String | Display name of your participant | Autogenerated |
handlerName |
String | Handler name of the mediasoup-client Device instance |
Autodetected |
forceTcp |
Boolean | Force RTC (audio/video/datachannel) over TCP instead of UDP | false |
produce |
Boolean | Enable sending of audio/video | true |
consume |
Boolean | Enable reception of audio/video | true |
datachannel |
Boolean | Enable DataChannels | true |
forceVP8 |
Boolean | Force VP8 codec for webcam and screen sharing | false |
forceH264 |
Boolean | Force H264 codec for webcam and screen sharing | false |
forceVP9 |
Boolean | Force VP9 codec for webcam and screen sharing | false |
enableWebcamLayers |
Boolean | Enable simulcast or SVC for webcam | true |
enableSharingLayers |
Boolean | Enable simulcast or SVC for screen sharing | true |
webcamScalabilityMode |
String | scalabilityMode for webcam |
'L1T3' for VP8/H264 (in each simulcast encoding), 'L3T3_KEY' for VP9 |
sharingScalabilityMode |
String | scalabilityMode for screen sharing |
'L1T3' for VP8/H264 (in each simulcast encoding), 'L3T3' for VP9 |
numSimulcastStreams |
Number | Number of streams for simulcast in webcam and screen sharing | 3 |
info |
Boolean | Display detailed information about media transmission | false |
faceDetection |
Boolean | Run face detection | false |
externalVideo |
Boolean | Send an external video instead of local webcam | false |
e2eKey |
String | Key for media E2E encryption/decryption (just works with some OPUS and VP8 codecs) | |
consumerReplicas |
Number | Create artificial replicas of yourself and receive their audio and video (not displayed in the UI) | 0 |
- Clone the project:
$ git clone https://github.com/versatica/mediasoup-demo.git
$ cd mediasoup-demo
$ git checkout v3
-
Ensure you have installed the dependencies required by mediasoup to build.
-
Set up the mediasoup-demo server:
$ cd server
$ npm install
- Copy
config.example.js
asconfig.js
and customize it for your scenario:
$ cp config.example.js config.js
NOTE: To be perfectly clear, "customize it for your scenario" is not something "optional". If you don't set proper values in config.js
the application won't work. You must configure a tls certificate.
- Set up the mediasoup-demo browser app:
$ cd app
# For node 16
$ npm install
# For node 18, use legacy peer dependencies
$ npm install --legacy-peer-deps
- Run the Node.js server application in a terminal:
$ cd server
$ npm start
- In a different terminal build and run the browser application:
$ cd app
$ npm start
If you configured a self-signed tls certificate, and receive wss: connection errors, open the wss: url with https: protocol to accept the cert and allow wss: connections in your browser.
- Enjoy.
- Globally install
gulp-cli
NPM module (may needsudo
):
$ npm install -g gulp-cli
- Build the production ready browser application:
$ cd app
$ gulp dist
-
Upload the entire
server
folder to your server and make your web server (Apache, Nginx, etc) expose theserver/public
folder. -
Edit your
server/config.js
with appropriate settings (listening IP/port, logging options, valid TLS certificate, etc). -
Within your server, run the Node.js application by setting the
DEBUG
environment variable according to your needs (more info):
$ DEBUG="*mediasoup* *ERROR* *WARN*" node server.js
-
If you wish to run it as daemon/service you can use pm2 process manager. Or you can dockerize it among other options.
-
The Node.js application exposes an interactive terminal. When running as daemon (in background) the host administrator can connect to it by entering into the
server
folder and running:
$ npm run connect
- Required environment variables: server/DOCKER.md.
- Build the Docker image: server/docker/build.sh.
- Run the Docker image: server/docker/run.sh.
$ cd server
$ docker/build.sh
$ MEDIASOUP_ANNOUNCED_IP=192.168.1.34 ./docker/run.sh
Considerations for config.js
- Make sure https.listenIp is set to
0.0.0.0
. - Make sure TLS certificates reside in
server/certs
directory with namesfullchain.pem
andprivkey.pem
. - The default mediasoup port range is just 2000-2020, which is not suitable for production. You should increase it, however you should then run the container in
network="host"
mode.
MIT