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 :
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
- Échantillon Gradle fichier.
- Exemples d'Applications à Exemples d'applications Android.
- Meilleures pratiques pour les applications vidéo dans le bâtiment.
- SDK Android de l'API Video de Vonage
- SDK côté serveur