Guide de migration Twilio (Android)

Ce guide vous explique comment migrer votre implémentation Twilio Video existante vers le SDK vidéo de Vonage. Vonage propose deux façons de commencer : Le SDK vidéo de Vonage Video API.

Vue d'ensemble

Les API Video de Twilio et de Vonage ont des concepts très similaires. Ce guide de démarrage a pour but de vous aider à migrer votre application vidéo.

La principale différence est qu'avec Twilio, vous devez créer une chambre. SID alors que dans Vonage, vous créez un Identifiant de session. Vous créez ensuite des jetons d'authentification qui sont utilisés du côté client pour se connecter aux salles dans Twilio ou aux sessions dans Vonage.

Les diagrammes suivants détaillent les principales différences :

Vonage Twilio migraiton illustration 1 Vonage Twilio migraiton illustration 1

Obtenir les informations d'identification du SDK vidéo

Créer un Compte de développeur pour accéder au portail des développeurs. Pour commencer avec la vidéo, vous devez créer une application. Vous pouvez suivre le créer une application pour obtenir votre ID de l'application et clé privée.

Installer le SDK

Remplacez la référence au SDK vidéo de Twilio dans votre fichier Gradle (build.gradle) par le SDK vidéo de Vonage.

Ainsi, à partir de implementation 'com.twilio:video-android:7.5.1' à implementation ‘com.opentok.android:opentok-android-sdk:2.27.0’.


Activer les autorisations requises

Si ce n'est pas déjà fait, veuillez activer l'autorisation suivante dans l'onglet AndroidManifest.xml fichier :

...
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />


<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
</manifest>

Authentification

Le SDK vidéo de Vonage utilise des jetons pour authentifier les utilisateurs. Lors de la génération d'un jeton, vous pouvez définir le rôle de l'utilisateur (abonné, éditeur ou modérateur). En option, vous pouvez également assigner une chaîne de métadonnées au jeton (c'est-à-dire pour identifier le client connecté). Article sur la création de jetons pour connaître les options que vous pouvez utiliser lors de la génération de jetons. Les jetons sont générés côté serveur et envoyés côté client. Visitez la page Guides des SDK côté serveur pour en savoir plus.

Créer une session vidéo

A session est comme un chambre, les clients ayant le même ID de la session pourront communiquer entre eux. Comme jetons, sessions sont créées du côté du serveur.

Veuillez vous référer à notre Création d'une session guide pour en savoir plus ainsi que sur les différentes options de configuration disponibles.

Pour créer une session et générer un jeton, utilisez l'un de nos outils SDK serveur.

Se connecter à une session vidéo

Pour connecter un point d'extrémité client à une session Vonage Video, vous avez besoin d'un identifiant d'application, d'un identifiant de session et d'un jeton.

Ces informations d'identification peuvent être récupérées à partir de la page d'accueil de l'application Tableau de bord et codé en dur dans l'application pour le développement, mais pour un environnement de production, utilisez les SDK du serveur pour fournir l'ID de session et le jeton (vérifiez Chat vidéo de base ).

Cartographie terminologique Twilio Vonage

Twilio Vonage
Room Session
Participants Subscriber(s) + Publisher(s)
Tracks Stream
RemoteTracks Subscribers(s).stream
LocalTracks Publisher(s).stream

Connexion à une session vidéo

La connexion et la gestion des flux vidéo s'effectuent à l'aide d'un gestionnaire d'événements.

Vous devez mettre en œuvre trois auditeurs d'événements clés :

  • Session.SessionListener (private Session mSession;)
  • PublisherKit.PublisherListener (private Publisher mPublisher;)
  • SubscriberKit.SubscriberListener (private Subscriber mSubscriber;)

SessionListener

Les Session.SessionListener sont utilisées pour gérer les événements impliquant l'ajout et la suppression de participants (abonnés et éditeurs).

Cela équivaut à la fonction Room.Listener gestionnaire de l'événement.

Voici la structure de l'exposé SessionListener l'interface :

private Session.SessionListener sessionListener = new Session.SessionListener() {
   @Override
   public void onConnected(Session session) {
       Log.d(TAG, "onConnected: Connected to session: " + session.getSessionId());


       mPublisher = new Publisher.Builder(MainActivity.this).build();
       mPublisher.setPublisherListener(publisherListener);
       mSession.publish(mPublisher);
   }


   @Override
   public void onDisconnected(Session session) {
       Log.d(TAG, "onDisconnected: Disconnected from session: " + session.getSessionId());
   }


   @Override
   public void onStreamReceived(Session session, Stream stream) {
       Log.d(TAG, "onStreamReceived: New Stream Received " + stream.getStreamId() + " in session: " + session.getSessionId());


       mSubscriber = new Subscriber.Builder(MainActivity.this, stream).build();
       mSubscriber.setSubscriberListener(subscriberListener);
       mSession.subscribe(mSubscriber);
   }


   @Override
   public void onStreamDropped(Session session, Stream stream) {
       Log.d(TAG, "onStreamDropped: Stream Dropped: " + stream.getStreamId() + " in session: " + session.getSessionId());   
   }


   @Override
   public void onError(Session session, OpentokError opentokError) {
       Log.e("Session error: " + opentokError.getMessage());
   }
};

PublisherListener

Les PublisherKit.PublisherListener est utilisée pour mettre en œuvre la logique à exécuter en fonction des flux de création et de fin.

Voici la structure de l'exposé PublisherListener l'interface :

private PublisherKit.PublisherListener publisherListener = new PublisherKit.PublisherListener() {
   @Override
   public void onStreamCreated(PublisherKit publisherKit, Stream stream) {
       Log.d(TAG, "onStreamCreated: Publisher Stream Created. Own stream " + stream.getStreamId());
   }


   @Override
   public void onStreamDestroyed(PublisherKit publisherKit, Stream stream) {
       Log.d(TAG, "onStreamDestroyed: Publisher Stream Destroyed. Own stream " + stream.getStreamId());
   }


   @Override
   public void onError(PublisherKit publisherKit, OpentokError opentokError) {
       Log.e("PublisherKit onError: " + opentokError.getMessage());
   }
};

Écouteur d'abonnés

Les SubscriberKit.SubscriberListener est utilisée pour mettre en œuvre la logique à exécuter lorsqu'un abonné rejoint un flux.

Voici la structure de l'exposé SubscriberListener l'interface :

SubscriberKit.SubscriberListener subscriberListener = new SubscriberKit.SubscriberListener() {
   @Override
   public void onConnected(SubscriberKit subscriberKit) {
       Log.d(TAG, "onConnected: Subscriber connected. Stream: " + subscriberKit.getStream().getStreamId());
   }


   @Override
   public void onDisconnected(SubscriberKit subscriberKit) {
       Log.d(TAG, "onDisconnected: Subscriber disconnected. Stream: " + subscriberKit.getStream().getStreamId());
   }


   @Override
   public void onError(SubscriberKit subscriberKit, OpentokError opentokError) {
       Log.e("SubscriberKit onError: " + opentokError.getMessage());
   }
};

Connexion à une session

Vous aurez besoin de votre APP_ID , SESSION_ID pour se connecter à un flux vidéo.

A TOKEN correspondant à la filière que vous souhaitez rejoindre est également requis.

Twilio

private Room room;
ConnectOptions.Builder connectOptionsBuilder =
       new ConnectOptions.Builder(accessToken).roomName(roomName);
room = Video.connect(this, connectOptionsBuilder.build(), roomListener());

Vonage

Session.Builder builder = new Session.Builder(this, APP_ID, SESSION_ID);
mSession = builder.build();
mSession.setSessionListener(sessionListener);
mSession.connect(TOKEN);

Publication de vidéos

Les SDK vidéo de Vonage gèrent automatiquement le réglage de la qualité vidéo, en fonction des conditions du réseau et des capacités de l'appareil.

Cela dit, vous pouvez configurer certaines propriétés, telles que résolution, taux de rafraîchissementet repli audio. Un seul objet éditeur peut gérer à la fois l'audio et la vidéo. Vous pouvez contrôler sélectivement l'audio ou la vidéo à l'aide des méthodes disponibles avec l'objet publisher.

Ajouter un éditeur

Twilio :

localVideoTrack = LocalVideoTrack.create(this, true, cameraCapturerCompat, LOCAL_VIDEO_TRACK_NAME);

Vonage :

Session.SessionListener() {
   @Override
   public void onConnected(Session session) {
       Log.d(TAG, "onConnected: Connected to session: " + session.getSessionId());
       mPublisher = new Publisher.Builder(MainActivity.this).build();
       mPublisher.setPublisherListener(publisherListener);
       mSession.publish(mPublisher);
   }
}

Piste audio uniquement

Twilio

localVideoTrack =
       LocalVideoTrack.create(this, false, cameraCapturerCompat, LOCAL_VIDEO_TRACK_NAME);

Vonage :

mPublisher = new Publisher.Builder(this).name(mUsername)
       .videoTrack(false)
       .build();

Piste vidéo uniquement

Twilio :

localAudioTrack = LocalAudioTrack.create(this, false, LOCAL_AUDIO_TRACK_NAME);

Vonage :

mPublisher = new Publisher.Builder(this).name(mUsername)
       .audioTrack(false)
       .build();

Annuler la publication d'une session

Twilio :

localParticipant.unpublishTrack(localVideoTrack);

Vonage :

mSession.unpublish(mPublisher);

Mute Publisher Audio

Twilio :

localAudioTrack.enable(false);

Vonage :

mPublisher.setPublishAudio(false);

UnMute Publisher Audio

Twilio :

localAudioTrack.enable(true);

Vonage :

mPublisher.setPublishAudio(true);

Muter la vidéo de l'éditeur

Twilio :

localVideoTrack.enable(false);

Vonage :

mPublisher.setPublishVideo(false);

UnMute Publisher Video

Twilio :

localVideoTrack.enable(true);

Vonage :

mPublisher.setPublishVideo(true);

S'abonner à un flux

Lorsqu'un participant distant (abonné) se connecte à une session, le système Session.SessionListener.onStreamReceived() est invoquée avec l'objet de flux correspondant.

Twilio :

@Override
public void onConnected(Room room) {
   localParticipant = room.getLocalParticipant();
   setTitle(room.getName());


   for (RemoteParticipant remoteParticipant : room.getRemoteParticipants()) {
       addRemoteParticipant(remoteParticipant);
       break;
   }
}

Vonage :

@Override
public void onStreamReceived(Session session, Stream stream) {
       Log.d(TAG, "onStreamReceived: New Stream Received " + stream.getStreamId() + " in session: " + session.getSessionId());


       mSubscriber = new Subscriber.Builder(MainActivity.this, stream).build();
       mSubscriber.setSubscriberListener(subscriberListener);
       mSession.subscribe(mSubscriber);
   }

Déconnexion d'une session

Twilio :

room.disconnect()

Vonage :

mSession.disconnect()

Méthodes onPause() et onResume()

Vonage :

@Override
protected void onPause() {
   super.onPause();


   if (mSession != null) {
       mSession.onPause();
   }
}


@Override
protected void onResume() {
   super.onResume();
   if (mSession != null) {
       mSession.onResume();
   }
}

Idéalement onPause() et onResume() devrait être mis en œuvre dans le MainActivity Classe.

Partage d'écran

Un exemple d'application pour partage d'écran.

Application de chat textuel

Un exemple d'application pour envoi de texte.

Plus d'informations