Twilio-Migrationsanleitung (Android)

Dieser Leitfaden zeigt Ihnen, wie Sie Ihre bestehende Twilio Video-Implementierung auf das Vonage Video SDK migrieren. Vonage bietet zwei Möglichkeiten für den Einstieg: Vonage's Video API.

Übersicht

Die Video APIs von Twilio und Vonage haben sehr ähnliche Konzepte. Dieser Leitfaden soll Sie bei der Migration Ihrer Videoanwendung unterstützen.

Der Hauptunterschied besteht darin, dass Sie in Twilio einen Raum erstellen müssen SID während Sie bei Vonage eine SessionID. Anschließend erstellen Sie Authentifizierungstoken, die auf der Client-Seite verwendet werden, um eine Verbindung zu Räumen in Twilio oder Sitzungen in Vonage herzustellen.

Die folgenden Diagramme zeigen die wichtigsten Unterschiede:

Vonage Twilio migraiton illustration 1 Vonage Twilio migraiton illustration 1

Video SDK-Anmeldeinformationen abrufen

Erstellen einer Entwickler Account um auf das Entwicklerportal zuzugreifen. Um mit Video zu beginnen, müssen Sie eine Anwendung erstellen. Sie können die eine Anwendung erstellen Leitfaden zum Erhalt Ihrer Anwendungs-ID und privater Schlüssel.

Installieren Sie das SDK

Ersetzen Sie die Twilio-Video-SDK-Referenz in Ihrer Gradle-Datei (build.gradle) durch das Vonage-Video-SDK.

Also von implementation 'com.twilio:video-android:7.5.1' zu implementation ‘com.opentok.android:opentok-android-sdk:2.27.0’.


Erforderliche Berechtigungen aktivieren

Falls noch nicht geschehen, aktivieren Sie bitte das folgende Recht in der AndroidManifest.xml Datei:

...
<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>

Authentifizierung

Das Vonage Video SDK verwendet Token, um Benutzer zu authentifizieren. Bei der Erstellung eines Tokens können Sie die Rolle des Benutzers festlegen (Abonnent, Herausgeber oder Moderator). Optional können Sie auch dem Token eine Zeichenfolge von Metadaten zuweisen (d.h. zur Identifizierung des angeschlossenen Kunden), beachten Sie bitte unsere Token-Erstellung Übersichtsartikel für Optionen, die Sie bei der Erzeugung von Token verwenden können. Die Token werden serverseitig generiert und an die Client-Seite gesendet. Besuchen Sie die Server-seitige SDKs Leitfäden um mehr zu erfahren.

Erstellen Sie eine Videositzung

A Sitzung ist wie ein ZimmerKunden mit demselben Sitzungs-ID in der Lage sein, miteinander zu kommunizieren. Wie Token, Sitzungen werden auf der Serverseite erstellt.

Bitte beachten Sie unser Erstellen einer Sitzung Leitfaden um mehr darüber und über die verschiedenen Konfigurationsmöglichkeiten zu erfahren.

Um eine Sitzung zu erstellen und ein Token zu erzeugen, verwenden Sie eine unserer Server-SDKs.

Verbinden mit einer Videositzung

Um einen Client-Endpunkt mit einer Vonage Video-Sitzung zu verbinden, benötigen Sie eine Anwendungs-ID, eine Sitzungs-ID und ein Token.

Diese Berechtigungsnachweise können über die Dashboard und in der Anwendung für die Entwicklung fest einkodiert. Für eine Produktionsumgebung verwenden Sie jedoch die Server-SDKs, um die Sitzungs-ID und das Token bereitzustellen (siehe Basic-Video-Chat Projekt).

Twilio Vonage Terminologie-Zuordnung

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

Verbinden mit einer Videositzung

Das Verbinden und Verwalten von Videostreams erfolgt über Ereignis-Handler.

Es gibt drei wichtige Ereignis-Listener, die Sie implementieren müssen:

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

SessionListener

Die Session.SessionListener Methoden werden verwendet, um Ereignisse zu behandeln, die das Hinzufügen und Entfernen von Teilnehmern (Abonnenten und Herausgebern) beinhalten.

Dies entspricht der Twilio-Funktion Room.Listener Ereignisbehandler.

Nachfolgend ist die Struktur des exponierten SessionListener Schnittstelle:

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

Die PublisherKit.PublisherListener wird verwendet, um eine Logik zu implementieren, die auf der Grundlage der Erstellungs- und Endströme ausgeführt wird.

Nachfolgend ist die Struktur des exponierten PublisherListener Schnittstelle:

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());
   }
};

SubscriberListener

Die SubscriberKit.SubscriberListener wird verwendet, um eine Logik zu implementieren, die ausgeführt wird, wenn ein Abonnent einem Stream beitritt.

Nachfolgend ist die Struktur des exponierten SubscriberListener Schnittstelle:

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());
   }
};

Verbinden mit einer Sitzung

Sie benötigen Ihre APP_ID , SESSION_ID um eine Verbindung zu einem Videostream herzustellen.

A TOKEN die dem Stream entspricht, dem Sie beitreten möchten, ist ebenfalls erforderlich.

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);

Video veröffentlichen

Die Video-SDKs von Vonage sorgen für eine automatische Optimierung der Videoqualität, die auf den Netzwerkbedingungen und den Fähigkeiten der Geräte basiert.

Sie können jedoch bestimmte Eigenschaften konfigurieren, wie z. B. Entschließung, Bildfrequenzund Audio-Fallback. Ein einzelnes Publisher-Objekt kann sowohl Audio als auch Video verwalten. Sie können Audio oder Video selektiv steuern, indem Sie Methoden verwenden, die für das Publisher-Objekt verfügbar sind.

Herausgeber hinzufügen

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);
   }
}

Nur Audiospur

Twilio

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

Vonage:

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

Nur Videospur

Twilio:

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

Vonage:

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

Veröffentlichen aus der Sitzung aufheben

Twilio:

localParticipant.unpublishTrack(localVideoTrack);

Vonage:

mSession.unpublish(mPublisher);

Publisher Audio stummschalten

Twilio:

localAudioTrack.enable(false);

Vonage:

mPublisher.setPublishAudio(false);

UnMute Publisher Audio

Twilio:

localAudioTrack.enable(true);

Vonage:

mPublisher.setPublishAudio(true);

Publisher-Video stummschalten

Twilio:

localVideoTrack.enable(false);

Vonage:

mPublisher.setPublishVideo(false);

UnMute Publisher Video

Twilio:

localVideoTrack.enable(true);

Vonage:

mPublisher.setPublishVideo(true);

Abonnieren Sie einen Stream

Wenn ein entfernter Teilnehmer (Subscriber) eine Verbindung zu einer Sitzung herstellt, wird die Session.SessionListener.onStreamReceived() Callback wird mit dem entsprechenden Stream-Objekt aufgerufen.

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);
   }

Trennen der Verbindung zu einer Sitzung

Twilio:

room.disconnect()

Vonage:

mSession.disconnect()

onPause() und onResume() Methoden

Vonage:

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


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


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

Idealerweise onPause() und onResume() sollte in der MainActivity Klasse.

Bildschirmfreigabe

Ein Anwendungsbeispiel für Bildschirmfreigabe.

Text-Chat-App

Ein Anwendungsbeispiel für Text senden.

Mehr Infos