Skip to content

8xFF/atm0s-media-sdk-js

Repository files navigation

Atm0s Media JS SDK

Continuous Integrations

JS SDK for interacting with Atm0s Media Server (This SDK is still in Alpha).

Installation

This library is published in the NPM registry and can be installed using any compatible package manager.

npm install @8xff/atm0s-media-js@alpha --save

# For Yarn, use the command below.
yarn add @8xff/atm0s-media-js@alpha

Installation from CDN

This module has an UMD bundle available through JSDelivr and Unpkg CDNs.

<!-- For UNPKG use the code below. -->
<script src="https://unpkg.com/@8xff/atm0s-media-js@alpha"></script>

<!-- For JSDelivr use the code below. -->
<script src="https://cdn.jsdelivr.net/npm/@8xff/atm0s-media-js"></script>

<script>
  // UMD module is exposed through the "Atm0s" global variable.
  console.log(Atm0s);
</script>

Documentation

Usage

Connect to a Session

import { createSession } from "@8xff/atm0s-media-js";

const url = "<YOUR SERVER URL>";
const token = "<YOUR SERVER TOKEN IF NEEDED>";

// This can be any MediaStream
const stream = await navigator.mediaDevices.getUserMedia({
  audio: true,
  video: true,
});

const session = createSession(url, {
  roomId: "Echo Room",
  peerId: "echo-client",
  token,
  // You can optionally initialize the session with senders and receivers so we won't have to keep
  // updating SDP every time we create a new senders and receivers
  senders: [
    { stream: stream, name: "audio_main", kind: "audio" },
    {
      stream: stream,
      name: "video_main",
      kind: "video",
      // Optionally, you can add simulcast
      simulcast: true,
    },
  ],
  receivers: {
    audio: 1,
    video: 1,
  },
});

// This will connect to the server and send the initialized MediaStream from above 
session.connect();

Consume the stream

By issued stream name

const consumer = session.createConsumerPair(peerId, "audio_main", "video_main");

Or listen to stream events:

// Note: In this specific case, we only have our own stream, so only `mystream_added` is triggered.
// In the case of listening for an external stream, use `stream_added` instead
session.on("mystream_added", (stream) => {
  // The audio stream and video stream added events will be triggered separately

  if (stream.kind === "video") {
    const consumer = session.createConsumer(stream);
    const stream = consumer.view();
    // Do something with stream ...
  }

  if (stream.kind === "audio") {
    const consumer = session.createConsumer(stream);
    const stream = consumer.view();
    // Do something with stream ...
  }
});

You can find more details about the SDK Documentation here.

License

Released under MIT License.