Migrating Your WebRTC Utility from Twilio to AWS: A Developer’s Information

Migrating Your WebRTC Utility from Twilio to AWS: A Developer’s Information
Migrating Your WebRTC Utility from Twilio to AWS: A Developer’s Information


On December fifth, 2023 Twilio introduced the End of Life (EOL) of their Programmable Video product. This abrupt providing discontinuation has compelled many purchasers to discover various choices for operating good digital camera or video streaming options. On this weblog, we’ll spotlight some issues that prospects can make the most of as steerage to form their migration technique.

Scalability, depth and breadth of capabilities, and safety implementation are important parameters that may affect the design of your video streaming options and the functions constructed round it. Designing for long run reliability requires making an allowance for how your utility will deal with excessive site visitors volumes and video high quality. These are frequent challenges whereas delivering for vary of units by means of accessible Software program Growth Kits (SDKs). Due to this fact, when your current know-how requires code modifications to lift-and-shift to new WebRTC know-how, it ought to embody a purpose-fit code migration technique that addresses the beforehand talked about challenges and supplies complete testing routine to continuously cross-check your migration progress.

Amazon Kinesis Video Streams, a managed cloud service that makes it simple so that you can securely stream video from linked units to AWS for analytics, machine studying (ML), playback, and different processing. It affords a great path so that you can simply assist and combine close to real-time video streams from linked cameras and comparable units to be used circumstances, reminiscent of surveillance, stay streaming, and video evaluation. Furthermore, Amazon Kinesis Video Streams integration with different AWS companies permits you to extensively course of and retailer massive volumes of knowledge, making it simple so that you can migrate your current answer with minimal disruption. On this weblog, our instance code will concentrate on serving to you migrate your current Twilio-based streaming answer to AWS with the assistance of Amazon Kinesis Video Streams. However, earlier than we go additional into the precise implementation with Amazon Kinesis Video Streams, it’s important that you just study all of the accessible choices and make an knowledgeable alternative aligned together with your use case and enterprise wants. Due to this fact, please learn Choose the right AWS video service for your use case to familiarize your self with all possible choices.

Twilio to Amazon Kinesis Video Streams Implementation

The code examples under present a situation the place chances are you’ll be changing Twilio with Amazon Kinesis Video Streams with WebRTC performance. It demonstrates primary WebRTC performance with Twilio and changing it with Amazon Kinesis Video Streams. This code doesn’t dive into many complexities of a real-world utility, reminiscent of full signaling logic, ICE candidate handling, and UI interplay. To get extra conversant in the WebRTC protocols and Amazon Kinesis Video Stream signaling, please overview among the reference supplies talked about under.

Conditions

    • An AWS account
    • Kinesis Video Streams service permissions through IAM function or IAM coverage
    • An EC2 occasion or serverless potential to run NodeJS with Categorical would even be crucial to copy the code examples.

Organising a WebRTC Connection With Twilio

The supply code under demonstrates Twilio API use for room creation, token era and passing the safety token to the shopper to permit connection to the room. Your use and courses might range relying in your implementation. For the aim of preserving this instance easy, our primary JavaScript class file is the place these features are outlined.

// use dotenv configuration
require("dotenv").config();

// use uuid for guids
const { v4: uuidv4 } = require("uuid");

/*
*  This part is twilio token dealing with, room creation and authn
*  That is later changed with a kvs signaling object to be used
*/

const AccessToken = require("twilio").jwt.AccessToken;
const VideoGrant = AccessToken.VideoGrant;

// ExpressJS is used to serve the appliance and deal with HTTP posts, will get, and so on
const specific = require("specific");
const app = specific();
const port = 5000;

// use the Categorical JSON middleware
app.use(specific.json());


// create the twilioClient
const twilioClient = require("twilio")(
  course of.env.TWILIO_API_KEY,
  course of.env.TWILIO_API_SECRET,
  { accountSid: course of.env.TWILIO_ACCOUNT_SID }
);

const findOrCreateRoom = async (roomName) => {
    attempt {
      // see if the room exists already. If it would not, this may throw
      // error 20404.
      await twilioClient.video.v1.rooms(roomName).fetch();
    } catch (error) {
      // the room was not discovered, so create it
      if (error.code == 20404) {
        await twilioClient.video.v1.rooms.create({
          uniqueName: roomName,
          sort: "go",
        });
      } else {
        // let different errors bubble up
        throw error;
      }
    }
  };

  const getAccessToken = (roomName) => {
    // create an entry token
    const token = new AccessToken(
      course of.env.TWILIO_ACCOUNT_SID,
      course of.env.TWILIO_API_KEY,
      course of.env.TWILIO_API_SECRET,
      // generate a random distinctive identification for this participant
      { identification: uuidv4() }
    );
    // create a video grant for this particular room
    const videoGrant = new VideoGrant({
      room: roomName,
    });
  
    // add the video grant
    token.addGrant(videoGrant);
    // serialize the token and return it
    return token.toJwt();
  };

The above operate definitions facilitate acquisition of a brand new Twilio room or becoming a member of one if it already exists. Twilio makes use of JSON Internet Tokens (JWT) to grant entry to new or current rooms. The JWT is generated from Twilio credentials then granted to the room. These server-generated tokens are then handed to shoppers to connect with a room.

Migrating to Amazon Kinesis Video Streams

The JavaScript supply code under demonstrates utilizing the AWS SDK to create an Amazon Kinesis Video Streams signaling channel to be used. Once more, our primary JavaScript class file is the place these features are outlined; nevertheless, chances are you’ll want to create new courses or file nomenclature to create new instantiations of Kinesis Video Stream shoppers. Producer and shopper functions require legitimate credentials to entry Amazon Kinesis video streams. Although not demonstrated under, this may be achieved with temporary security credentials in IAM to your producer and shopper utility entry.

//  That is the KVS signaling substitute
   
// Import AWS SDK and crucial elements
const AWS = require('aws-sdk');
const { KinesisVideo, KinesisVideoSignalingChannels } = require('aws-sdk');

// Configure AWS credentials
AWS.config.replace({
  accessKeyId: course of.env.AWS_ACCESS_KEY,
  secretAccessKey: course of.env.AWS_SECRET_KEY,
  area: course of.env.AWS_REGION
});
// Initialize AWS Kinesis Video and Signaling Purchasers
const kinesisVideoClient = new KinesisVideo({ apiVersion: '2019-12-04' });
const signalingClient = new KinesisVideoSignalingChannels({ apiVersion: '2019-12-04' });

async operate createChannel(chnName) {
      attempt {
        information = await kinesisVideoClient.createSignalingChannel({ 
           ChannelName: chnName
           })
           .promise();
        console.log('Created signaling channel:', information.ChannelARN);
        //sigchan = information.ChannelARN;
        // Additional code for signaling in WebRTC goes right here
    } catch (error) {
        console.error('Error creating signaling channel:', error);
    }
    return information.ChannelARN;
}

// Operate to connect native media (simplified)
async operate attachLocalMedia(channelARN) {
    attempt {
      const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
      // That is the place you'd usually join the stream to a WebRTC peer connection
      console.log('Stream able to be linked to Kinesis Video Stream');
    } catch (error) {
          console.error('Media machine entry error:', error);
    }
}

The aws-sdk supplies the mandatory libraries to your Amazon Kinesis Video Streams migration. It’s helpful and constant past this use case for the aforementioned credential administration for shopper utility entry. The JavaScript above creates a signaling channel. The signaling element manages the WebRTC signaling endpoints that enable functions to securely join with one another for peer-to-peer stay media streaming.

Server Facet POST dealing with

The app.submit Express routing examples under display a situation the place utility HTTP POST calls may be modified to make the most of the newly created Amazon Kinesis Video Streams signaling channels to your video wants. It is very important observe that extra features for ICE signaling will likely be required for peer connectivity.

app.submit("/twexample", async (req, res) => {
  // return 400 if the request has an empty physique or no roomName
  if (!req.physique || !req.physique.roomName) {
    return res.standing(400).ship("Should embody roomName argument.");
  }
  const roomName = req.physique.roomName;
  // discover or create a room with the given roomName
  findOrCreateRoom(roomName);
  // generate an Entry Token for a participant on this room
  const token = getAccessToken(roomName);
  res.ship({
    token: token,
  });
});

/* POST to /twexample URL for a twilio room
   embody JSON within the physique to specify a room title
   {"roomName":"our kvs signaling channel"}
*/

app.submit("/kvsexample", async (req, res) => {
  // Much less advanced than above twilio instance - if no roomName specified within the physique, use random
  if (!req.physique.roomName || req.physique.roomName.size === 0) {
    roomName = uuidv4();  
    console.log(`eval physique not met - utilizing rand ${roomName}`);
  } else {
    roomName = req.physique.roomName
  }

  sigchan = await createChannel(roomName);
 
  console.log(`arn=`, sigchan);
  res.ship({
    ChannelARN: sigchan,
  })
});

Key Modifications within the Migration

      • Use of Async/Await: The instance above makes use of async/await for higher dealing with of asynchronous operations. This could enhance utility efficiency decreasing the necessity for advanced operate callback chains.
      • Signaling for WebRTC: The Amazon Kinesis Video Streams instance acknowledges the necessity for added WebRTC signaling code, which is a fancy course of involving creating affords, answering, and dealing with ICE candidates.

Conclusion

Transitioning to Amazon Kinesis Video Streams supplies a sturdy platform for real-time video processing and analytics, appropriate for situations like stay streaming and surveillance. With its user-friendly options, AWS service integration and WebRTC capabilities, you solely pay for what you utilize. Another choice talked about above on this weblog could possibly be migrating to Amazon Chime SDK, which affords a great answer for real-time communication wants, facilitating video/audio conferencing and collaborative platforms with its user-friendly options and AWS service integration. For additional steerage or inquiries relating to this migration, please attain out to AWS Help or your AWS Account Group or submit an IoT Migration Request here.

Barry McCall

Barry McCall

Barry McCall is a Sr. Technical Account Supervisor with AWS

Leave a Reply

Your email address will not be published. Required fields are marked *