Migración a la versión 2.2 o superior del SDK para iOS de la Video API de Vonage

Hay cambios en la API, nuevas funciones, modificaciones en la interfaz de usuario y otras cuestiones que debes tener en cuenta a la hora de migrar una aplicación de la versión 2.1.7 a la versión 2.2 o posterior del SDK de OpenTok para iOS.

Cambios en la API de la versión 2.2
Nueva API en la versión 2.2
Cambios en la interfaz de usuario de los objetos «publisher» y «subscriber»
Otras novedades

Cambios en la API de la versión 2.2

Al actualizar desde la versión 2.1.7, modifica tu código teniendo en cuenta los siguientes cambios en la API.

Inicialización de una sesión — El inicializador del objeto OTSession incluye ahora un parámetro de clave API:

Versión 2.1.7 Versión 2.2
[OTSession initWithSessionId:            delegate:] [OTSession initWithApiKey:            sessionId:            delegate:]

Conectarse a una sesión — El método para conectarse a una sesión ya no incluye la clave de API como parámetro:

Versión 2.1.7 Versión 2.2
[OTSession connectWithApiKey:            token:] [OTSession connectWithToken:            error:]

Ten en cuenta que el nuevo error parámetro. En caso de que se produzca un error sincrónico al llamar a este método, este parámetro se establece en un objeto OTError.

Los nombres de las siguientes constantes de la enumeración OTSessionConnectionStatus cambiaron en la versión 2.2:

2.1.7 constante 2,2 constante
OTSessionConnectionStatusDisconnected OTSessionConnectionStatusNotConnected

Suscribirse a una transmisión — En la versión 2.1.7, al inicializar un objeto OTSubscriber, este comienza inmediatamente a suscribirse al flujo. En la versión 2.2, tras crear una instancia de OTSubscriber, debes llamar al método [OTSession subscribe:error:] Método para empezar a suscribirse a la transmisión:

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

La clase `OTSubscriber` hereda de la nueva clase `OTSubscriberKit`. Y el protocolo `OTSubscriberDelegate` cumple con el nuevo protocolo `OTSubscriberKitDelegate`. (Véase Nueva API en la versión 2.2 (véase más abajo).

El OTSubscriber.view La propiedad es un objeto UIView. (En la versión 2.1.7, estaba configurada como un objeto OTVideoView, pero esa clase se ha eliminado del SDK. Véase Cambios en la interfaz de usuario de los objetos «publisher» y «subscriber».)

En la versión 2.2 del SDK, las vistas de los suscriptores no se eliminan automáticamente de sus supervistas cuando el [OTSessionDelegate sessionDidDisconnect:] Se envía el mensaje. Llama a la [_subscriber.view removeFromSuperView:] método del objeto OTSubscriber para eliminar el suscriptor.

El [OTSubscriber stream:didChangeVideoDimensions:] El método se ha eliminado en la versión 2.2 del SDK. Puedes implementar tu propia clase de suscriptor personalizada, basada en la nueva clase OTSubscriberKit, y supervisar directamente las dimensiones de la transmisión de vídeo. (Véase Nueva API en la versión 2.2 (véase más abajo.)

Véase Cambios en la interfaz de usuario de los objetos «publisher» y «subscriber» para obtener información sobre los cambios en la interfaz de usuario de OTSubscriber.

Publicar un flujo — La clase `OTPublisher` hereda de la nueva clase `OTPublisherKit`. Y el protocolo `OTPublisherDelegate` cumple con el nuevo protocolo `OTPublisherKitDelegate`. (Véase Nueva API en la versión 2.2 (véase más abajo). Además, han cambiado los siguientes nombres de mensajes en el protocolo OTPublisherDelegate:

Versión 2.1.7 Versión 2.2
[OTPublisherDelegate publisherDidStartStreaming:] [OTPublisherDelegate publisher:                      streamCreated:]
[OTPublisherDelegate publisherDidStopStreaming:] [OTPublisherDelegate publisher:                      streamDestroyed:]

El OTPublisher.view La propiedad es un objeto UIView. (En la versión 2.1.7, estaba configurada como un objeto OTVideoView, pero esa clase se ha eliminado del SDK. Véase Cambios en la interfaz de usuario de los objetos «publisher» y «subscriber».)

En la versión 2.2 del SDK, las vistas de editor no se eliminan automáticamente de sus supervistas cuando el [OTSessionDelegate sessionDidDisconnect:] Se envía el mensaje. Llama a la [_publisher.view removeFromSuperView:] método del objeto OTPublisher para eliminar el editor.

Véase Cambios en la interfaz de usuario de los objetos «publisher» y «subscriber» para obtener información sobre los cambios en la interfaz de usuario de OTPublisher.

Gestión de errores — Se han añadido parámetros de error a los siguientes métodos:

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

Si se produce un error sincrónico al llamar al método, el objeto de error se establece como un objeto OTError; en caso contrario, se establece como NULL.

Por ejemplo, el siguiente código comprueba si se produce un error síncrono al llamar a [OTSession subscribe:error]:

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

Las siguientes constantes de error ya no se utilizan en la versión 2.2 (y no están incluidas en las enumeraciones de OTError):

OTSDKUpdateRequired
OTP2PSessionUnsupported
OTUnknownServerError
OTP2PSessionRequired
OTSessionCompatibilityMismatch
OTSelfSubscriberFailure

Las siguientes constantes OTSessionErrorCode de la versión 2.1.7 se sustituyen en la versión 2.2:

Versión 2.1.7 Versión 2.2
OTInvalidSessionId OTInvalidSession
OTSessionSignalConnection OTSessionInvalidSignalType; OTSessionSignalDataTooLong

Las siguientes constantes OTPublisherErrorCode de la versión 2.1.7 se sustituyen en la versión 2.2:

Versión 2.1.7 Versión 2.2
OTNoMediaPublished OTPublisherInternalError
OTUserDeniedCameraAccess OTPublisherInternalError

Las siguientes constantes OTSubscriberErrorCode de la versión 2.1.7 se sustituyen en la versión 2.2:

Versión 2.1.7 Versión 2.2
OTFailedToConnect OTSubscriberInternalError
OTNoStreamMedia OTSubscriberInternalError
OTInitializationFailure OTSubscriberInternalError; OTConnectionTimeOut
OTInvalidStreamType OTSubscriberInternalError

API de señalización — La API de señalización ha cambiado de la versión 2.1.7 a la versión 2.2:

Versión 2.1.7 Versión 2.2
[OTSession signalWithType:            data:            completionHandler:] [OTSession signalWithType:            string:            connection:            error:]
[OTSession signalWithType:            data:            connections:            completionHandler:] [OTSession signalWithType:            string:            connection:            error:]

Ten en cuenta los siguientes cambios:

  • Solo puedes enviar una cadena como datos de la señal. Ya no es posible establecer los datos como otros tipos de objetos.
  • El método admite un parámetro de conexión que puede ser un único objeto OTConnection (no una matriz) o nil (para enviar una señal a todos los clientes de la sesión).
  • Se han eliminado los bloques de finalización para la señalización. Si falla el envío de una señal, el objeto de error pasado a los métodos de señalización se establece como un objeto OTError. La enumeración OTSessionErrorCode (en OTError.h) incluye OTSessionInvalidSignalType y OTSessionSignalDataTooLong constantes para estos errores.

En la versión 2.2, la recepción de una señal se ha implementado en el protocolo OTSessionDelegate:

Versión 2.1.7 Versión 2.2
[OTSession receiveSignalType:            withHandler:] [OTSessionDelegate session:            receivedSignalType:            fromConnection:            withString:]

Cambio de nombre del representante del suscriptor — El protocolo OTSubscriberDelegate ha pasado a llamarse OTSubscriberKitDelegate.

Cambios en los nombres de los delegados de sesión — Se han cambiado los nombres de algunos mensajes de los métodos de OTSessionDelegate:

Versión 2.1.7 Versión 2.2
[OTSessionDelegate didReceiveStream:] [OTSessionDelegate streamCreated:]
[OTSessionDelegate didDropStream:] [OTSessionDelegate streamDestroyed:]
[OTSessionDelegate didCreateConnection:] [OTSessionDelegate connectionCreated:]
[OTSessionDelegate didDropConnection:] [OTSessionDelegate connectionDestroyed:]

Se ha eliminado OTVideoView — La clase OTVideoView ya no se incluye. Véase Cambios en la interfaz de usuario de los objetos «publisher» y «subscriber» abajo.

Se ha eliminado OTSession.connectionCount — La clase OTSession ya no incluye un connectionCount propiedad. Puedes supervisar el [OTSessionDelegate session:connectionCreated:] y [OTSessionDelegate session:connectionDestroyed:] mensajes y lleva la cuenta de las conexiones en tu propia variable.

Se ha eliminado OTStream.type — OTStream ya no incluye un type propiedad.

Nueva API en la versión 2.2

Compatibilidad con el archivado — El SDK de OpenTok para iOS 2.2 es compatible con OpenTok función de archivo. En [OTSessionDelegate session:archiveStartedWithId:name:] El mensaje se envía cuando comienza la grabación en archivo de una sesión. El [OTSessionDelegate session:archiveStoppedWithId:] El mensaje se envía cuando finaliza la grabación en archivo de una sesión. Es posible que desees añadir o eliminar un elemento de la interfaz de usuario que indique que la grabación ha comenzado o finalizado, en función de este mensaje.

Nueva Video API de transmisión de vídeo personalizada — Las siguientes clases y protocolos nuevos son compatibles con la nueva Video API de transmisión de vídeo personalizada:

  • OTPublisherKit: utiliza esta clase para emplear un capturador y un renderizador de vídeo personalizados para una transmisión de audio y vídeo que se vaya a publicar en una sesión de OpenTok. Ten en cuenta que la clase OTPublisher, que utiliza la cámara de iOS como fuente de vídeo directa, es una subclase de OTPublisherKit.

  • OTSubscriberKit: utiliza esta clase para emplear un renderizador de vídeo personalizado para una transmisión de audio y vídeo. Ten en cuenta que la clase OTSubscriber, que muestra la transmisión de vídeo sin modificaciones, es una subclase de OTSubscriberKit.

  • OTVideoCapture: esta interfaz se utiliza para proporcionar datos de vídeo a un objeto OTPublisherKit.

  • OTVideoRender: esta interfaz se utiliza para procesar datos de vídeo en un objeto OTPublisherKit o en un objeto OTSubscriberKit.

  • En el archivo OTVideoKit.h se definen otras clases y enumeraciones relacionadas con la Video API de transmisión de vídeo personalizada.

  • Nueva propiedad OTSession.apiQueue: ahora la cola de llamadas de retorno del delegado puede definirse desde la aplicación. La cola de GCD para enviar llamadas de retorno al delegado puede sobrescribirse para permitir la integración con XCTest (novedad de Xcode 5) u otros marcos de trabajo que necesiten operar en el hilo principal (y bloquearlo).

  • Las enumeraciones del archivo OTError.h tienen nuevos valores. Los valores de los códigos de error coinciden con los valores de los errores correspondientes en la biblioteca OpenTok.js 2.2 y en el SDK de OpenTok para Android 2.2.

Cambios en la interfaz de usuario de los objetos «publisher» y «subscriber»

Los objetos OTPublisher y OTSubscriber ya no incluyen los controles de interfaz de usuario predeterminados para lo siguiente:

  • Un control para activar o desactivar la cámara en la vista de OTPublisher: puedes añadir tu propio control de interfaz de usuario que utilice el cameraPosition propiedad del objeto OTPublisher que permite establecer la cámara que utiliza el editor.
  • Visualización del nombre del flujo tanto en la vista OTSubscriber como en la vista OTPublisher: puedes añadir tu propio control de interfaz de usuario que muestre el nombre en función del name propiedad del objeto OTStream consumido por el suscriptor o el nombre utilizado al llamar a la [OTPublisher initWithDelegate:name:] método.
  • Un botón de silencio en la vista OTSubscriber: puedes añadir tu propio control de interfaz de usuario que establezca el subscribeToAudio Propiedad del objeto OTSubscriber que permite silenciar y reanudar el audio del suscriptor. Consulta el hasAudio Propiedad del objeto OTStream que utiliza el suscriptor para determinar si el flujo contiene audio.
  • Botón de silencio en la vista OTPublisher: puedes añadir tu propio control de interfaz de usuario que establezca el publishAudio Propiedad del objeto OTPublisher que permite silenciar y reanudar el audio del editor.
  • Un indicador de que el vídeo se ha desactivado para un suscriptor: puedes añadir tu propio control de interfaz de usuario que responda al [OTSubscriber subscriberVideoDisabled:reason:] mensaje que indica que el vídeo estaba desactivado.

La vista predeterminada en las clases OTPublisher y OTSubscriber solo incluye el vídeo.

Debes implementar estos controles de interfaz de usuario en tu propio código. Esto te permite utilizar tu propio diseño e incluir únicamente los controles que desees. El Aplicaciones de ejemplo del SDK de OpenTok para iOS en GitHub explica cómo ponerlas en práctica.

El manual también incluye código de ejemplo para añadir un control de interfaz de usuario que indique que se ha iniciado (o detenido) el archivado de una sesión. (El archivado es una nueva función de la versión 2.2 del SDK de OpenTok para iOS.)

Otras novedades

El SDK de OpenTok para iOS 2.2 también es compatible con TURN sobre TCP. Esto mejora la conectividad en entornos de red con restricciones. Solo se necesitan los puertos 80 y 443.