Umstellung auf Version 2.2+ des Vonage Video API iOS SDK

Bei der Migration einer Application von Version 2.1.7 auf Version 2.2+ des OpenTok iOS SDK sollten Sie API-Änderungen, neue Funktionen, Änderungen an der Benutzeroberfläche und weitere Aspekte berücksichtigen.

API-Änderungen in Version 2.2
Neue API in Version 2.2
Änderungen an der Benutzeroberfläche in Publisher- und Subscriber-Objekten
Weitere neue Funktionen

API-Änderungen in Version 2.2

Bei einer Migration von Version 2.1.7 sollten Sie Ihren Code entsprechend den folgenden API-Änderungen anpassen.

Eine Sitzung initialisieren — Der Initialisierer für das OTSession-Objekt enthält nun einen Parameter für den API-Schlüssel:

Version 2.1.7 Version 2.2
[OTSession initWithSessionId:            delegate:] [OTSession initWithApiKey:            sessionId:            delegate:]

Verbinden mit einer Sitzung — Bei der Methode zum Herstellen einer Verbindung zu einer Sitzung wird der API-Schlüssel nicht mehr als Parameter angegeben:

Version 2.1.7 Version 2.2
[OTSession connectWithApiKey:            token:] [OTSession connectWithToken:            error:]

Beachten Sie, dass die neue error Parameter. Im Falle eines synchronen Fehlers beim Aufruf dieser Methode wird dieser Parameter auf ein OTError-Objekt gesetzt.

Die Namen der folgenden Konstanten der Enumeration „OTSessionConnectionStatus“ wurden in Version 2.2 geändert:

2.1.7 Konstante 2.2 Konstante
OTSessionConnectionStatusDisconnected OTSessionConnectionStatusNotConnected

Einen Stream abonnieren — In Version 2.1.7 beginnt ein OTSubscriber-Objekt sofort mit dem Abonnieren des Streams, sobald es initialisiert wird. In Version 2.2 müssen Sie nach der Instanziierung einer OTSubscriber-Instanz die Methode [OTSession subscribe:error:] Vorgehensweise, um den Stream zu abonnieren:

_subscriber = [[OTSubscriber alloc] initWithStream:stream delegate:self];
OTError* myError = nil;
[_session subscribe:_subscriber error:&myError]
if (myError) {
  NSLog(@"subscribe failed with error: (%@)", myError);
}

Die Klasse „OTSubscriber“ erweitert die neue Klasse „OTSubscriberKit“. Und das Protokoll „OTSubscriberDelegate“ entspricht dem neuen Protokoll „OTSubscriberKitDelegate“. (Siehe Neue API in Version 2.2 (siehe unten).

Die OTSubscriber.view Die Eigenschaft ist ein UIView-Objekt. (In Version 2.1.7 war sie auf ein OTVideoView-Objekt gesetzt, doch diese Klasse wurde aus dem SDK entfernt. Siehe Änderungen an der Benutzeroberfläche in Publisher- und Subscriber-Objekten.)

In Version 2.2 des SDK werden Subscriber-Ansichten nicht automatisch aus ihren übergeordneten Ansichten entfernt, wenn die [OTSessionDelegate sessionDidDisconnect:] Die Nachricht wird gesendet. Rufen Sie die [_subscriber.view removeFromSuperView:] Methode des OTSubscriber-Objekts, um den Abonnenten zu entfernen.

Die [OTSubscriber stream:didChangeVideoDimensions:] Die Methode wurde in Version 2.2 des SDK entfernt. Sie können eine eigene, benutzerdefinierte Abonnentenklasse auf Basis der neuen Klasse „OTSubscriberKit“ implementieren und die Dimensionen des Videostreams direkt überwachen. (Siehe Neue API in Version 2.2 (siehe unten.)

Siehe Änderungen an der Benutzeroberfläche in Publisher- und Subscriber-Objekten Informationen zu Änderungen an der Benutzeroberfläche von OTSubscriber.

Veröffentlichen eines Streams — Die Klasse „OTPublisher“ erweitert die neue Klasse „OTPublisherKit“. Und das Protokoll „OTPublisherDelegate“ entspricht dem neuen Protokoll „OTPublisherKitDelegate“. (Siehe Neue API in Version 2.2 (siehe unten). Außerdem haben sich die folgenden Nachrichtennamen im Protokoll „OTPublisherDelegate“ geändert:

Version 2.1.7 Version 2.2
[OTPublisherDelegate publisherDidStartStreaming:] [OTPublisherDelegate publisher:                      streamCreated:]
[OTPublisherDelegate publisherDidStopStreaming:] [OTPublisherDelegate publisher:                      streamDestroyed:]

Die OTPublisher.view Die Eigenschaft ist ein UIView-Objekt. (In Version 2.1.7 war sie auf ein OTVideoView-Objekt gesetzt, doch diese Klasse wurde aus dem SDK entfernt. Siehe Änderungen an der Benutzeroberfläche in Publisher- und Subscriber-Objekten.)

In Version 2.2 des SDK werden Publisher-Ansichten nicht automatisch aus ihren übergeordneten Ansichten entfernt, wenn die [OTSessionDelegate sessionDidDisconnect:] Die Nachricht wird gesendet. Rufen Sie die [_publisher.view removeFromSuperView:] Methode des OTPublisher-Objekts, um den Publisher zu entfernen.

Siehe Änderungen an der Benutzeroberfläche in Publisher- und Subscriber-Objekten Informationen zu Änderungen an der Benutzeroberfläche von OTPublisher.

Fehlerbehandlung — Den folgenden Methoden wurden Fehlerparameter hinzugefügt:

[OTSession connectWithToken:error:]
[OTSession publish:error:]
[OTSession signalWithType:string:connection:error:]
[OTSession subscribe:error:]
[OTSession unpublish:error:]
[OTSession unsubscribe:error:]

Tritt beim Aufruf der Methode ein Synchronisationsfehler auf, wird das Fehlerobjekt auf ein OTError-Objekt gesetzt; andernfalls wird es auf NULL gesetzt.

Der folgende Code prüft beispielsweise beim Aufruf auf einen synchronen Fehler: [OTSession subscribe:error]:

OTError* myError = nil;
[_session subscribe:_subscriber error:&myError]
if (myError) {
  NSLog(@"subscribe failed with error: (%@)", myError);
}

Die folgenden Fehlerkonstanten werden in Version 2.2 nicht mehr verwendet (und sind nicht in den OTError-Enums enthalten):

OTSDKUpdateRequired
OTP2PSessionUnsupported
OTUnknownServerError
OTP2PSessionRequired
OTSessionCompatibilityMismatch
OTSelfSubscriberFailure

Die folgenden OTSessionErrorCode-Konstanten aus Version 2.1.7 werden in Version 2.2 ersetzt:

Version 2.1.7 Version 2.2
OTInvalidSessionId OTInvalidSession
OTSessionSignalConnection OTSessionInvalidSignalType; OTSessionSignalDataTooLong

Die folgenden OTPublisherErrorCode-Konstanten aus Version 2.1.7 werden in Version 2.2 ersetzt:

Version 2.1.7 Version 2.2
OTNoMediaPublished OTPublisherInternalError
OTUserDeniedCameraAccess OTPublisherInternalError

Die folgenden OTSubscriberErrorCode-Konstanten aus Version 2.1.7 werden in Version 2.2 ersetzt:

Version 2.1.7 Version 2.2
OTFailedToConnect OTSubscriberInternalError
OTNoStreamMedia OTSubscriberInternalError
OTInitializationFailure OTSubscriberInternalError; OTConnectionTimeOut
OTInvalidStreamType OTSubscriberInternalError

Signalisierungs-API — Die Signaling-API hat sich von Version 2.1.7 auf Version 2.2 geändert:

Version 2.1.7 Version 2.2
[OTSession signalWithType:            data:            completionHandler:] [OTSession signalWithType:            string:            connection:            error:]
[OTSession signalWithType:            data:            connections:            completionHandler:] [OTSession signalWithType:            string:            connection:            error:]

Beachten Sie die folgenden Änderungen:

  • Als Signaldaten können Sie nur eine Zeichenkette senden. Es ist nicht mehr möglich, die Daten als Objekte anderer Typen festzulegen.
  • Die Methode erwartet einen Verbindungsparameter, der entweder ein einzelnes OTConnection-Objekt (kein Array) oder „nil“ ist (um ein Signal an alle Clients in der Sitzung zu senden).
  • Abschlussblöcke für die Signalübermittlung wurden entfernt. Wenn das Senden eines Signals fehlschlägt, wird das an die Signalmethoden übergebene Fehlerobjekt auf ein OTError-Objekt gesetzt. Die Enumeration OTSessionErrorCode (in OTError.h) umfasst OTSessionInvalidSignalType und OTSessionSignalDataTooLong Konstanten für diese Fehler.

In Version 2.2 ist der Empfang eines Signals im Protokoll „OTSessionDelegate“ implementiert:

Version 2.1.7 Version 2.2
[OTSession receiveSignalType:            withHandler:] [OTSessionDelegate session:            receivedSignalType:            fromConnection:            withString:]

Änderung des Namens eines Abonnentenbevollmächtigten — Das Protokoll „OTSubscriberDelegate“ wurde in „OTSubscriberKitDelegate“ umbenannt.

Änderungen der Namen von Sitzungsdelegierten — Einige Meldungen in den OTSessionDelegate-Methoden wurden umbenannt:

Version 2.1.7 Version 2.2
[OTSessionDelegate didReceiveStream:] [OTSessionDelegate streamCreated:]
[OTSessionDelegate didDropStream:] [OTSessionDelegate streamDestroyed:]
[OTSessionDelegate didCreateConnection:] [OTSessionDelegate connectionCreated:]
[OTSessionDelegate didDropConnection:] [OTSessionDelegate connectionDestroyed:]

OTVideoView wurde entfernt — Die Klasse „OTVideoView“ ist nicht mehr enthalten. Siehe Änderungen an der Benutzeroberfläche in Publisher- und Subscriber-Objekten unten.

OTSession.connectionCount entfernt — Die Klasse „OTSession“ enthält nun keinen connectionCount Eigenschaft. Sie können die [OTSessionDelegate session:connectionCreated:] und [OTSessionDelegate session:connectionDestroyed:] Nachrichten und führen Sie eine Zählung der Verbindungen in Ihrer eigenen Variablen.

OTStream.type entfernt — Der OTStream enthält nun keinen type Eigentum.

Neue API in Version 2.2

Unterstützung bei der Archivierung — Das OpenTok iOS SDK 2.2 unterstützt OpenTok Archivierungsfunktion. Die [OTSessionDelegate session:archiveStartedWithId:name:] Die Nachricht wird gesendet, wenn die Archivaufzeichnung einer Sitzung beginnt. Die [OTSessionDelegate session:archiveStoppedWithId:] Diese Meldung wird gesendet, wenn die Archivaufzeichnung einer Sitzung beendet wird. Auf Grundlage dieser Meldung können Sie ein Element der Benutzeroberfläche hinzufügen oder entfernen, das anzeigt, dass die Aufzeichnung gestartet oder beendet wurde.

Neue benutzerdefinierte Video API — Die folgenden neuen Klassen und Protokolle unterstützen die neue benutzerdefinierte Video API:

  • OTPublisherKit – Verwenden Sie diese Klasse, um einen benutzerdefinierten Video-Capturer und Video-Renderer für einen Audio-Video-Stream zu nutzen, der in einer OpenTok-Sitzung veröffentlicht werden soll. Beachten Sie, dass die Klasse „OTPublisher“, die die iOS-Kamera als direkten Video-Feed nutzt, eine Unterklasse von „OTPublisherKit“ ist.

  • OTSubscriberKit – Verwenden Sie diese Klasse, um einen benutzerdefinierten Video-Renderer für einen Audio-Video-Stream einzusetzen. Beachten Sie, dass die Klasse „OTSubscriber“, die den Videostream unverändert anzeigt, eine Unterklasse von „OTSubscriberKit“ ist.

  • OTVideoCapture – Diese Schnittstelle dient dazu, Videodaten an ein OTPublisherKit-Objekt zu übermitteln.

  • OTVideoRender – Diese Schnittstelle dient zum Rendern von Videodaten in einem OTPublisherKit- oder OTSubscriberKit-Objekt.

  • Weitere Klassen und Aufzählungen im Zusammenhang mit der benutzerdefinierten Video API sind in der Datei „OTVideoKit.h“ definiert.

  • Neue Eigenschaft „OTSession.apiQueue“ – Die Callback-Warteschlange für Delegaten kann nun anwendungsspezifisch definiert werden. Die GCD-Warteschlange für die Ausgabe von Callbacks an den Delegaten kann überschrieben werden, um die Integration mit XCTest (neu in Xcode 5) oder anderen Frameworks zu ermöglichen, die im Hauptthread ausgeführt werden (und diesen blockieren) müssen.

  • Die Enums in der Datei „OTError.h“ enthalten neue Werte. Die Fehlercode-Werte stimmen mit den Werten für die entsprechenden Fehler in der OpenTok.js 2.2-Bibliothek und dem OpenTok Android 2.2 SDK überein.

Änderungen an der Benutzeroberfläche in Publisher- und Subscriber-Objekten

Die Objekte „OTPublisher“ und „OTSubscriber“ enthalten für die folgenden Elemente keine Standard-Benutzeroberflächenelemente mehr:

  • Ein Steuerelement zum Umschalten der Kamera in der OTPublisher-Ansicht — Sie können ein eigenes Benutzeroberflächen-Steuerelement hinzufügen, das die cameraPosition Eigenschaft des OTPublisher-Objekts, um die vom Publisher verwendete Kamera festzulegen.
  • Anzeige des Stream-Namens sowohl in der OTSubscriber-Ansicht als auch in der OTPublisher-Ansicht – Sie können ein eigenes Benutzeroberflächen-Steuerelement hinzufügen, das den Namen basierend auf dem name Eigenschaft des OTStream-Objekts, das vom Abonnenten verwendet wird, oder der Name, der beim Aufruf der [OTPublisher initWithDelegate:name:] Methode.
  • Eine Stummschalt-Schaltfläche in der OTSubscriber-Ansicht — Sie können ein eigenes Benutzeroberflächen-Steuerelement hinzufügen, das die subscribeToAudio Eigenschaft des OTSubscriber-Objekts, um den Ton für den Abonnenten stummzuschalten und wieder einzuschalten. Überprüfen Sie die hasAudio Eigenschaft des OTStream-Objekts, die vom Abonnenten ausgewertet wird, um festzustellen, ob der Stream Audio enthält.
  • Stummschaltknopf in der OTPublisher-Ansicht — Sie können ein eigenes Benutzeroberflächenelement hinzufügen, das die publishAudio Eigenschaft des OTPublisher-Objekts zum Stummschalten und Wiederaufnehmen der Audioausgabe für den Publisher.
  • Ein Indikator dafür, dass das Video für einen Abonnenten deaktiviert wurde – Sie können ein eigenes Steuerelement für die Benutzeroberfläche hinzufügen, das auf das [OTSubscriber subscriberVideoDisabled:reason:] Meldung, die darauf hinweist, dass das Video deaktiviert wurde.

Die Standardansicht in den Klassen „OTPublisher“ und „OTSubscriber“ umfasst nur das Video.

Sie müssen diese Benutzeroberflächenelemente in Ihrem eigenen Code implementieren. So haben Sie die Möglichkeit, Ihr eigenes Design zu verwenden und nur die gewünschten Elemente hinzuzufügen. Die Beispiel-Apps für das OpenTok iOS SDK auf GitHub Zeigen Sie, wie man diese umsetzt.

Das Kochbuch enthält außerdem Beispielcode zum Hinzufügen eines Steuerelements für die Benutzeroberfläche, das anzeigt, dass die Archivierung einer Sitzung begonnen (oder beendet) hat. (Die Archivierung ist eine neue Funktion in Version 2.2 des OpenTok iOS SDK.)

Weitere neue Funktionen

Das OpenTok iOS 2.2 SDK bietet außerdem Unterstützung für TURN über TCP. Dies verbessert die Konnektivität in eingeschränkten Netzwerkumgebungen. Es werden lediglich die Ports 80 und 443 benötigt.