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
OTSessionInvalidSignalTypeeOTSessionSignalDataTooLongconstantes 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
cameraPositionpropriedade 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
namepropriedade 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
subscribeToAudiopropriedade do objeto OTSubscriber para silenciar e retomar o áudio do assinante. Verifique ohasAudiopropriedade 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
publishAudiopropriedade 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.