Migrando seu aplicativo WebRTC do Twilio para a AWS: um guia do desenvolvedor


Em 5 de dezembro de 2023, a Twilio anunciou o Fim da vida útil (EOL) do produto de vídeo programável. Essa interrupção abrupta da oferta forçou muitos clientes a explorar opções alternativas para executar soluções de câmera inteligente ou streaming de vídeo. Neste weblog, destacaremos algumas considerações que os clientes podem utilizar como orientação para moldar sua estratégia de migração.

Escalabilidade, profundidade e amplitude de recursos e implementação de segurança são parâmetros críticos que influenciarão o design de suas soluções de streaming de vídeo e os aplicativos criados em torno delas. Projetar para confiabilidade de longo prazo requer levar em consideração como seu aplicativo lidará com altos volumes de tráfego e qualidade de vídeo. Esses são desafios comuns ao entregar para uma variedade de dispositivos por meio de Kits de Desenvolvimento de Software program (SDKs) disponíveis. Portanto, quando sua tecnologia existente requer mudanças de código para levantar e mudar para novos WebRTC tecnologia, ela deve incluir uma estratégia de migração de código adequada à finalidade que aborde os desafios mencionados anteriormente e forneça uma rotina de testes abrangente para verificar frequentemente o progresso da migração.

Transmissões de vídeo do Amazon Kinesis, um serviço de nuvem gerenciado que facilita o streaming seguro de vídeo de dispositivos conectados para a AWS para análise, aprendizado de máquina (ML), reprodução e outros processamentos. Ele oferece um caminho very best para você oferecer suporte e integrar facilmente fluxos de vídeo quase em tempo actual de câmeras conectadas e dispositivos semelhantes para casos de uso, como vigilância, streaming ao vivo e análise de vídeo. Além disso, a integração do Amazon Kinesis Video Streams com outros serviços da AWS permite que você processe e armazene extensivamente grandes volumes de dados, facilitando a migração de sua solução existente com o mínimo de interrupção. Neste weblog, nosso código de exemplo se concentrará em ajudar você a migrar sua solução de streaming existente baseada em Twilio para a AWS com a ajuda do Amazon Kinesis Video Streams. Mas, antes de nos aprofundarmos na implementação específica com o Amazon Kinesis Video Streams, é elementary que você aprenda sobre todas as opções disponíveis e faça uma escolha informada alinhada ao seu caso de uso e às necessidades do seu negócio. Portanto, leia Escolha o serviço de vídeo AWS certo para seu caso de uso para se familiarizar com todas as opções viáveis.

Implementação de Twilio para Amazon Kinesis Video Streams

Os exemplos de código abaixo fornecem um cenário em que você pode estar substituindo o Twilio pelo Amazon Kinesis Video Streams com funcionalidade WebRTC. Ele demonstra a funcionalidade básica do WebRTC com o Twilio e a substitui pelo Amazon Kinesis Video Streams. Este código não se aprofunda em muitas complexidades de um aplicativo do mundo actual, como lógica de sinalização completa, Tratamento de candidatos ICEe interação com a IU. Para se familiarizar mais com os protocolos WebRTC e a sinalização do Amazon Kinesis Video Stream, revise alguns dos materiais de referência mencionados abaixo.

Pré-requisitos

    • Uma conta AWS
    • Permissões do serviço Kinesis Video Streams por meio da função do IAM ou da política do IAM
    • Uma instância EC2 ou capacidade sem servidor para executar NodeJS com Specific também seria necessária para replicar os exemplos de código.

Configurando uma conexão WebRTC com Twilio

O código-fonte abaixo demonstra o uso da API Twilio para criação de salas, geração de tokens e passagem do token de segurança para o cliente para permitir a conexão com a sala. Seu uso e lessons podem variar dependendo da sua implementação. Para manter este exemplo simples, nosso arquivo de classe JavaScript principal é onde essas funções são definidas.

// 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 many others
const categorical = require("categorical");
const app = categorical();
const port = 5000;

// use the Specific JSON middleware
app.use(categorical.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();
  };

As definições de função acima facilitam a aquisição de uma nova sala Twilio ou a entrada em uma se ela já existir. A Twilio utiliza JSON Net Tokens (JWT) para conceder acesso a salas novas ou existentes. O JWT é gerado a partir de credenciais Twilio e então concedido à sala. Esses tokens gerados pelo servidor são então passados ​​aos clientes para se conectarem a uma sala.

Migrando para o Amazon Kinesis Video Streams

O código-fonte JavaScript abaixo demonstra o uso do AWS SDK para criar um canal de sinalização do Amazon Kinesis Video Streams para uso. Novamente, nosso arquivo de classe JavaScript principal é onde essas funções são definidas; no entanto, você pode desejar criar novas lessons ou nomenclatura de arquivo para criar novas instanciações de clientes do Kinesis Video Stream. Os aplicativos de produtor e cliente exigem credenciais válidas para acessar os fluxos de vídeo do Amazon Kinesis. Embora não demonstrado abaixo, isso pode ser obtido com credenciais de segurança temporárias no IAM para acesso ao seu aplicativo de produtor e cliente.

//  That is the KVS signaling substitute
   
// Import AWS SDK and crucial parts
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 Shoppers
const kinesisVideoClient = new KinesisVideo({ apiVersion: '2019-12-04' });
const signalingClient = new KinesisVideoSignalingChannels({ apiVersion: '2019-12-04' });

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

// Perform 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 sometimes join the stream to a WebRTC peer connection
      console.log('Stream able to be related to Kinesis Video Stream');
    } catch (error) {
          console.error('Media system entry error:', error);
    }
}

O aws-sdk fornece as bibliotecas necessárias para sua migração do Amazon Kinesis Video Streams. Ele é útil e consistente além deste caso de uso para o gerenciamento de credenciais acima mencionado para acesso ao aplicativo cliente. O JavaScript acima cria um canal de sinalização. O componente de sinalização gerencia os endpoints de sinalização WebRTC que permitem que os aplicativos se conectem com segurança entre si para streaming de mídia ao vivo ponto a ponto.

Manipulação de POST do lado do servidor

O aplicativo.publish Expressar os exemplos de roteamento abaixo demonstram um cenário em que chamadas HTTP POST do aplicativo podem ser modificadas para utilizar os canais de sinalização Amazon Kinesis Video Streams recém-criados para suas necessidades de vídeo. É importante observar que funções adicionais para sinalização ICE serão necessárias para conectividade peer.

app.publish("/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 embrace 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
   embrace JSON within the physique to specify a room title
   {"roomName":"our kvs signaling channel"}
*/

app.publish("/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,
  })
});

Principais mudanças na migração

      • Uso de Async/Await: O exemplo acima faz uso de async/await para melhor manipulação de operações assíncronas. Isso pode melhorar o desempenho do aplicativo, reduzindo a necessidade de cadeias de callback de função complexas.
      • Sinalização para WebRTC: O exemplo do Amazon Kinesis Video Streams reconhece a necessidade de código de sinalização WebRTC adicional, que é um processo complexo que envolve a criação de ofertas, resposta e tratamento de candidatos ICE.

Conclusão

A transição para o Amazon Kinesis Video Streams fornece uma plataforma robusta para processamento e análise de vídeo em tempo actual, adequada para cenários como transmissão ao vivo e vigilância. Com seus recursos fáceis de usar, integração de serviços da AWS e recursos do WebRTC, você paga apenas pelo que usa. Outra opção mencionada acima neste weblog pode ser a migração para o Amazon Chime SDK, que oferece uma solução very best para necessidades de comunicação em tempo actual, facilitando videoconferências/audioconferências e plataformas colaborativas com seus recursos fáceis de usar e integração de serviços da AWS. Para obter mais orientações ou dúvidas sobre essa migração, entre em contato com o Suporte da AWS ou com sua Equipe de Contas da AWS ou envie uma solicitação de migração de IoT aqui.

Migrando seu aplicativo WebRTC do Twilio para a AWS: um guia do desenvolvedor

Barry McCall

Barry McCall é gerente sênior de contas técnicas da AWS

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *