Migração para a versão 2.2+ do SDK do iOS da Video API da Vonage

Há alterações na API, novos recursos, mudanças na interface do usuário e outras considerações que você deve levar em conta ao migrar uma aplicação da versão 2.1.7 para a versão 2.2 ou superior do SDK do OpenTok para iOS.

Alterações na API na versão 2.2
Nova API na versão 2.2
Alterações na interface do usuário nos objetos “publisher” e “subscriber”
Outros novos recursos

Alterações na API na versão 2.2

Ao migrar da versão 2.1.7, altere seu código de acordo com as seguintes alterações na API.

Inicializando uma sessão — O inicializador do objeto OTSession agora inclui um parâmetro de chave de API:

Versão 2.1.7 Versão 2.2
[OTSession initWithSessionId:            delegate:] [OTSession initWithApiKey:            sessionId:            delegate:]

Conectando-se a uma sessão — O método para se conectar a uma sessão não inclui mais a chave da API como parâmetro:

Versão 2.1.7 Versão 2.2
[OTSession connectWithApiKey:            token:] [OTSession connectWithToken:            error:]

Observe que o novo error parâmetro. No caso de um erro síncrono ao chamar este método, este parâmetro é definido como um objeto OTError.

Os nomes das seguintes constantes da enumeração OTSessionConnectionStatus foram alterados na versão 2.2:

2.1.7 constante 2,2 constante
OTSessionConnectionStatusDisconnected OTSessionConnectionStatusNotConnected

Inscrever-se em um canal — Na versão 2.1.7, quando você inicializa um objeto OTSubscriber, ele começa imediatamente a se inscrever no fluxo. Na versão 2.2, após instanciar uma instância de OTSubscriber, é necessário chamar o [OTSession subscribe:error:] método para começar a assinar o feed:

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

A classe OTSubscriber estende a nova classe OTSubscriberKit. E o protocolo OTSubscriberDelegate está em conformidade com o novo protocolo OTSubscriberKitDelegate. (Veja Nova API na versão 2.2 (abaixo).

O OTSubscriber.view A propriedade é um objeto UIView. (Na versão 2.1.7, ela estava definida como um objeto OTVideoView, mas essa classe foi removida do SDK. Consulte Alterações na interface do usuário nos objetos “publisher” e “subscriber”.)

Na versão 2.2 do SDK, as visualizações dos assinantes não são removidas automaticamente de suas supervisualizações quando o [OTSessionDelegate sessionDidDisconnect:] A mensagem é enviada. Chame a [_subscriber.view removeFromSuperView:] método do objeto OTSubscriber para remover o assinante.

O [OTSubscriber stream:didChangeVideoDimensions:] O método foi removido na versão 2.2 do SDK. Você pode implementar sua própria classe de assinante personalizada, com base na nova classe OTSubscriberKit, e monitorar diretamente as dimensões do fluxo de vídeo. (Consulte Nova API na versão 2.2 (abaixo.)

Veja Alterações na interface do usuário nos objetos “publisher” e “subscriber” para obter informações sobre as alterações na interface de usuário do OTSubscriber.

Publicação de um stream — A classe OTPublisher estende a nova classe OTPublisherKit. E o protocolo OTPublisherDelegate está em conformidade com o novo protocolo OTPublisherKitDelegate. (Veja Nova API na versão 2.2 (abaixo). Além disso, os nomes das seguintes mensagens foram alterados no protocolo OTPublisherDelegate:

Versão 2.1.7 Versão 2.2
[OTPublisherDelegate publisherDidStartStreaming:] [OTPublisherDelegate publisher:                      streamCreated:]
[OTPublisherDelegate publisherDidStopStreaming:] [OTPublisherDelegate publisher:                      streamDestroyed:]

O OTPublisher.view A propriedade é um objeto UIView. (Na versão 2.1.7, ela estava definida como um objeto OTVideoView, mas essa classe foi removida do SDK. Consulte Alterações na interface do usuário nos objetos “publisher” e “subscriber”.)

Na versão 2.2 do SDK, as visualizações do editor não são removidas automaticamente de suas supervisualizações quando o [OTSessionDelegate sessionDidDisconnect:] A mensagem é enviada. Chame a [_publisher.view removeFromSuperView:] método do objeto OTPublisher para remover o editor.

Veja Alterações na interface do usuário nos objetos “publisher” e “subscriber” para obter informações sobre as alterações na interface de usuário do OTPublisher.

Tratamento de erros — Foram adicionados parâmetros de erro aos seguintes métodos:

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

Se ocorrer um erro síncrono ao chamar o método, o objeto de erro é definido como um objeto OTError; caso contrário, é definido como NULL.

Por exemplo, o código a seguir verifica se há um erro síncrono ao chamar [OTSession subscribe:error]:

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

As seguintes constantes de erro não são mais utilizadas na versão 2.2 (e não estão incluídas nas enums OTError):

OTSDKUpdateRequired
OTP2PSessionUnsupported
OTUnknownServerError
OTP2PSessionRequired
OTSessionCompatibilityMismatch
OTSelfSubscriberFailure

As seguintes constantes OTSessionErrorCode da versão 2.1.7 foram substituídas na versão 2.2:

Versão 2.1.7 Versão 2.2
OTInvalidSessionId OTInvalidSession
OTSessionSignalConnection OTSessionInvalidSignalType; OTSessionSignalDataTooLong

As seguintes constantes OTPublisherErrorCode da versão 2.1.7 foram substituídas na versão 2.2:

Versão 2.1.7 Versão 2.2
OTNoMediaPublished OTPublisherInternalError
OTUserDeniedCameraAccess OTPublisherInternalError

As seguintes constantes OTSubscriberErrorCode da versão 2.1.7 foram substituídas na versão 2.2:

Versão 2.1.7 Versão 2.2
OTFailedToConnect OTSubscriberInternalError
OTNoStreamMedia OTSubscriberInternalError
OTInitializationFailure OTSubscriberInternalError; OTConnectionTimeOut
OTInvalidStreamType OTSubscriberInternalError

API de sinalização — A API de sinalização sofreu alterações entre a versão 2.1.7 e a versão 2.2:

Versão 2.1.7 Versão 2.2
[OTSession signalWithType:            data:            completionHandler:] [OTSession signalWithType:            string:            connection:            error:]
[OTSession signalWithType:            data:            connections:            completionHandler:] [OTSession signalWithType:            string:            connection:            error:]

Observe as seguintes alterações:

  • Você só pode enviar uma string como dados do sinal. Não é mais possível definir os dados como outros tipos de objetos.
  • O método recebe um parâmetro de conexão que pode ser um único objeto OTConnection (não uma matriz) ou nil (para enviar um sinal a todos os clientes da sessão).
  • Os blocos de conclusão para sinalização foram removidos. Se o envio de um sinal falhar, o objeto de erro passado para os métodos de sinalização é definido como um objeto OTError. A enumeração OTSessionErrorCode (em OTError.h) inclui OTSessionInvalidSignalType e OTSessionSignalDataTooLong constantes para esses erros.

Na versão 2.2, o recebimento de um sinal está implementado no protocolo OTSessionDelegate:

Versão 2.1.7 Versão 2.2
[OTSession receiveSignalType:            withHandler:] [OTSessionDelegate session:            receivedSignalType:            fromConnection:            withString:]

Alteração do nome do representante do assinante — O protocolo OTSubscriberDelegate foi renomeado para OTSubscriberKitDelegate.

Alterações no nome dos delegados da sessão — Algumas mensagens nos métodos do OTSessionDelegate foram renomeadas:

Versão 2.1.7 Versão 2.2
[OTSessionDelegate didReceiveStream:] [OTSessionDelegate streamCreated:]
[OTSessionDelegate didDropStream:] [OTSessionDelegate streamDestroyed:]
[OTSessionDelegate didCreateConnection:] [OTSessionDelegate connectionCreated:]
[OTSessionDelegate didDropConnection:] [OTSessionDelegate connectionDestroyed:]

OTVideoView removido — A classe OTVideoView não está mais incluída. Consulte Alterações na interface do usuário nos objetos “publisher” e “subscriber” abaixo.

OTSession.connectionCount foi removido — A classe OTSession não inclui mais um connectionCount propriedade. Você pode monitorar o [OTSessionDelegate session:connectionCreated:] e [OTSessionDelegate session:connectionDestroyed:] mensagens e mantenha uma contagem das conexões em sua própria variável.

OTStream.type removido — O OTStream não inclui mais um type propriedade.

Nova API na versão 2.2

Suporte para arquivamento — O SDK 2.2 do OpenTok para iOS é compatível com o OpenTok recurso de arquivamento. O [OTSessionDelegate session:archiveStartedWithId:name:] A mensagem é enviada quando começa a reprodução de uma gravação arquivada de uma sessão. A [OTSessionDelegate session:archiveStoppedWithId:] Essa mensagem é enviada quando a gravação em arquivo de uma sessão é interrompida. Você pode adicionar ou remover um elemento da interface do usuário que indique que a gravação foi iniciada ou interrompida, com base nessa mensagem.

Nova Video API personalizada para transmissão de vídeo — As seguintes novas classes e protocolos oferecem suporte à nova Video API de transmissão de vídeo personalizada:

  • OTPublisherKit — Use esta classe para utilizar um capturador e um renderizador de vídeo personalizados para um fluxo de áudio e vídeo a ser publicado em uma sessão do OpenTok. Observe que a classe OTPublisher, que utiliza a câmera do iOS como fonte direta de vídeo, é uma subclasse do OTPublisherKit.

  • OTSubscriberKit — Use esta classe para utilizar um renderizador de vídeo personalizado para um fluxo de áudio e vídeo. Observe que a classe OTSubscriber, que exibe o fluxo de vídeo sem alterações, é uma subclasse de OTSubscriberKit.

  • OTVideoCapture — Esta interface serve para fornecer dados de vídeo a um objeto OTPublisherKit.

  • OTVideoRender — Utilize esta interface para renderizar dados de vídeo em um objeto OTPublisherKit ou OTSubscriberKit.

  • Outras classes e enums relacionadas à Video API personalizada estão definidas no arquivo OTVideoKit.h.

  • Nova propriedade OTSession.apiQueue — A fila de callbacks do delegado agora pode ser definida pelo aplicativo. A fila do GCD para o envio de callbacks ao delegado pode ser substituída para permitir a integração com o XCTest (novidade no Xcode 5) ou outras estruturas que precisem operar (e bloquear) na thread principal.

  • As enums no arquivo OTError.h têm novos valores. Os valores dos códigos de erro correspondem aos valores dos erros correspondentes na biblioteca OpenTok.js 2.2 e no SDK do OpenTok para Android 2.2.

Alterações na interface do usuário nos objetos “publisher” e “subscriber”

Os objetos OTPublisher e OTSubscriber não incluem mais os controles padrão da interface do usuário para os seguintes itens:

  • Um controle para alternar a câmera na visualização do OTPublisher — Você pode adicionar seu próprio controle de interface de usuário que utilize o cameraPosition propriedade do objeto OTPublisher para definir a câmera utilizada pelo editor.
  • Exibição do nome do fluxo tanto na visualização do OTSubscriber quanto na visualização do OTPublisher — Você pode adicionar seu próprio controle de interface de usuário que exiba o nome com base no name propriedade do objeto OTStream consumida pelo assinante ou o nome utilizado ao chamar o [OTPublisher initWithDelegate:name:] método.
  • Um botão de silenciar na visualização do OTSubscriber — Você pode adicionar seu próprio controle de interface de usuário que defina o subscribeToAudio propriedade do objeto OTSubscriber para silenciar e retomar o áudio do assinante. Verifique o hasAudio propriedade do objeto OTStream utilizada pelo assinante para determinar se o stream contém áudio.
  • Botão “Silenciar” na visualização do OTPublisher — Você pode adicionar seu próprio controle de interface de usuário que defina o publishAudio propriedade do objeto OTPublisher para silenciar e retomar o áudio do editor.
  • Um indicador de que o vídeo foi desativado para um assinante — Você pode adicionar seu próprio controle de interface de usuário que responda ao [OTSubscriber subscriberVideoDisabled:reason:] mensagem indicando que o vídeo foi desativado.

A visualização padrão nas classes OTPublisher e OTSubscriber inclui apenas o vídeo.

Você deve implementar esses controles de interface do usuário em seu próprio código. Isso permite que você utilize seu próprio design e adicione apenas os controles que desejar. O Aplicativos de exemplo do SDK do OpenTok para iOS no GitHub mostre como implementá-los.

O guia também inclui um código de exemplo para adicionar um controle de interface do usuário que indique que o arquivamento de uma sessão foi iniciado (ou interrompido). (O arquivamento é um novo recurso da versão 2.2 do SDK do OpenTok para iOS.)

Outros novos recursos

O SDK do OpenTok para iOS 2.2 também oferece suporte ao TURN sobre TCP. Isso melhora a conectividade em ambientes de rede restritos. São necessárias apenas as portas 80 e 443.