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:
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
- Muster Gradle Datei.
- Muster-Applikationen unter Android-Beispielanwendungen.
- Bewährte Praktiken für Videoanwendungen im Gebäude.
- Vonage Video API Android SDK
- Serverseitige SDKs