msc-node
Version:
mediasoup client side Node.js library
162 lines (128 loc) • 4.7 kB
Markdown
For developer MUST USE NODE 16
[![][npm-shield-mediasoup-client]][npm-mediasoup-client]
[![][github-actions-shield-mediasoup-client]][github-actions-mediasoup-client]
[![][opencollective-shield-mediasoup]][opencollective-mediasoup]
JavaScript client side library for building [mediasoup][mediasoup-website] based applications.
- [mediasoup.org][mediasoup-website]
- [mediasoup.discourse.group][mediasoup-discourse]
```js
import { Device } from "mediasoup-client";
import mySignaling from "./my-signaling"; // Our own signaling stuff.
// Create a device (use browser auto-detection).
const device = new Device();
// Communicate with our server app to retrieve router RTP capabilities.
const routerRtpCapabilities = await mySignaling.request(
"getRouterCapabilities"
);
// Load the device with the router RTP capabilities.
await device.load({ routerRtpCapabilities });
// Check whether we can produce video to the router.
if (!device.canProduce("video")) {
console.warn("cannot produce video");
// Abort next steps.
}
// Create a transport in the server for sending our media through it.
const { id, iceParameters, iceCandidates, dtlsParameters, sctpParameters } =
await mySignaling.request("createTransport", {
sctpCapabilities: device.sctpCapabilities,
});
// Create the local representation of our server-side transport.
const sendTransport = device.createSendTransport({
id,
iceParameters,
iceCandidates,
dtlsParameters,
sctpParameters,
});
// Set transport "connect" event handler.
sendTransport.on("connect", async ({ dtlsParameters }, callback, errback) => {
// Here we must communicate our local parameters to our remote transport.
try {
await mySignaling.request("transport-connect", {
transportId: sendTransport.id,
dtlsParameters,
});
// Done in the server, tell our transport.
callback();
} catch (error) {
// Something was wrong in server side.
errback(error);
}
});
// Set transport "produce" event handler.
sendTransport.on(
"produce",
async ({ kind, rtpParameters, appData }, callback, errback) => {
// Here we must communicate our local parameters to our remote transport.
try {
const { id } = await mySignaling.request("produce", {
transportId: sendTransport.id,
kind,
rtpParameters,
appData,
});
// Done in the server, pass the response to our transport.
callback({ id });
} catch (error) {
// Something was wrong in server side.
errback(error);
}
}
);
// Set transport "producedata" event handler.
sendTransport.on(
"producedata",
async (
{ sctpStreamParameters, label, protocol, appData },
callback,
errback
) => {
// Here we must communicate our local parameters to our remote transport.
try {
const { id } = await mySignaling.request("produceData", {
transportId: sendTransport.id,
sctpStreamParameters,
label,
protocol,
appData,
});
// Done in the server, pass the response to our transport.
callback({ id });
} catch (error) {
// Something was wrong in server side.
errback(error);
}
}
);
// Produce our webcam video.
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
const webcamTrack = stream.getVideoTracks()[0];
const webcamProducer = await sendTransport.produce({ track: webcamTrack });
// Produce data (DataChannel).
const dataProducer = await sendTransport.produceData({
ordered: true,
label: "foo",
});
```
- Iñaki Baz Castillo [[website](https://inakibaz.me)|[github](https://github.com/ibc/)]
- José Luis Millán [[github](https://github.com/jmillan/)]
- Twitter: [@mediasoup_sfu](https://twitter.com/mediasoup_sfu)
You can support mediasoup by [sponsoring][sponsor] it. Thanks!
[](./LICENSE)
[]: https://mediasoup.org
[]: https://mediasoup.discourse.group
[]: https://img.shields.io/npm/v/mediasoup-client.svg
[]: https://npmjs.org/package/mediasoup-client
[]: https://github.com/versatica/mediasoup-client/actions/workflows/mediasoup-client.yaml/badge.svg
[]: https://github.com/versatica/mediasoup-client/actions/workflows/mediasoup-client.yaml
[]: https://img.shields.io/opencollective/all/mediasoup.svg
[]: https://opencollective.com/mediasoup/
[]: https://mediasoup.org/sponsor/