Inscrever-se em canais — iOS

Depois de conectado a uma sessão, você pode se inscrever em transmissões na sessão. Ao se inscrever em uma transmissão, você pode exibir o vídeo dela no aplicativo.

Este tópico inclui as seguintes seções:

Reconexão automática

Se um cliente perder a conexão com um fluxo assinado (por exemplo, devido a uma queda na conectividade de rede em qualquer um dos clientes), ele tentará se reconectar automaticamente ao fluxo. Quando a conexão com o fluxo é interrompida e o cliente tenta se reconectar, o [OTSubscriberKitDelegate subscriberDidDisconnectFromStream:] A mensagem é enviada ao delegado do objeto OTSubscriberKit. Quando a conexão é restabelecida, o [OTSubscriberKitDelegate subscriberDidReconnectToStream:] a mensagem é enviada. Se o cliente não conseguir restabelecer a conexão, o [OTSessionDelegate session:streamDestroyed:] A mensagem é enviada.

Em resposta a esses eventos, seu aplicativo pode (opcionalmente) exibir notificações na interface do usuário indicando os estados de desconexão temporária, reconexão e desconexão.

// OTSubscriber delegate callbacks:
- (void)subscriberDidDisconnectFromStream:(OTStream*)stream
{
  // Display a user interface notification.
}

- (void)subscriberDidReconnectToStream:(OTStream*)stream
{
  // Adjust user interface.
}

// OTSession delegate callback:
- (void)session:(OTSession*)session session:streamDestroyed:(OTStream*)stream
{
  // Adjust user interface.
}

Detecção de fluxos em uma sessão

O [OTSessionDelegate session:streamCreated:] A mensagem é enviada quando um novo fluxo é criado em uma sessão. (Um fluxo é criado quando um cliente publica um fluxo para a sessão.) O Objeto OTStream possui propriedades que definem o fluxo. Compare o connection propriedade do objeto OTStream com o connection propriedade do objeto OTSession para determinar se o fluxo é aquele publicado pelo seu cliente:

- (void)session:(OTSession*)session streamCreated:(OTStream*)stream
{
    NSLog(@"session streamCreated (%@)", stream.streamId);

    // See the declaration of subscribeToSelf above.
    if ([stream.connection.connectionId isEqualToString: session.connection.connectionId]) {
        // This is my own stream
    } else {
        // This is a stream from another client.
    }
}

Você pode se inscrever em um stream para exibi-lo no seu aplicativo. Consulte a próxima seção.

Inscrever-se em um canal

Para se inscrever em um stream, chame a função [OTSubscriber initWithStream:] método, passando um objeto OTStream e um objeto delegado para receber mensagens relacionadas aos assinantes. Em seguida, chame o[OTSession subscribe:error] método para começar a assinar o feed:

- (void)session:(OTSession*)session streamCreated:(OTStream*)stream
{
    subscriber = [[OTSubscriber alloc] initWithStream:stream delegate:self];
    OTError* error = nil;
    [session subscribe:subscriber error:&error]
    if (error) {
      NSLog(@"subscribe failed with error: (%@)", error);
    }
}

O [OTSubscriberDelegate subscriberDidConnectToStream:] A mensagem é enviada quando o aplicativo começa a receber o fluxo do assinante. Nesse momento, você pode adicionar a visualização do assinante (representada pelo OTSubscriber.view propriedade) ao aplicativo:

	- (void)subscriberDidConnectToStream:(OTSubscriber*)subscriber
	{
	    [subscriber.view setFrame:CGRectMake(0, 300, 400, 300)];
	    [self.view addSubview:subscriber.view];
	}

Cancelar a inscrição em um stream

Para interromper a reprodução de uma transmissão da qual você é assinante, chame a função [OTSession unsubscribe:error:] método:

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

O assinante foi desconectado. Em seguida, remova sua visualização da supervisualização:

    [subscriber.view removeFromSuperview:];

Detectar quando os fluxos saem de uma sessão

Quando os streams saem de uma sessão, o [OTSession session: streamDestroyed:] A mensagem é enviada. Quando um stream é descartado, a visualização de qualquer objeto OTSubscriber associado a esse stream é removida de sua superview. Verifique se o stream não foi publicado pelo seu próprio cliente e remova sua visualização da superview.

- (void)session:(OTSession*)session streamDestroyed:(OTStream *)stream
{
    NSLog(@"session streamDestroyed (%@)", stream.streamId);

    if ([subscriber.stream.streamId isEqualToString:stream.streamId])
    {
        [_subscriber.view removeFromSuperview];
        _subscriber = nil;
    }
}

Detectar quando o vídeo de um assinante está desativado

O representante do assinante envia o [OTSubscriberDelegate subscriberVideoDisabled:reason:] mensagem exibida quando o vídeo do assinante está desativado:

- (void)subscriberVideoDisabled:(OTSubscriber *)subscriber
                         reason:(OTSubscriberVideoEventReason)reason
{
    NSLog(@"subscriber video disabled.");
}

O reason O parâmetro pode ser definido como uma das seguintes constantes definidas na enumeração OTSubscriberVideoEventReason:

  • OTSubscriberVideoEventPublisherPropertyChanged — O problema com o vídeo ocorreu porque o autor da transmissão interrompeu a transmissão.
  • OTSubscriberVideoEventQualityChanged — O problema no vídeo foi causado por uma alteração na qualidade do fluxo de vídeo. A qualidade do fluxo pode variar devido às condições da rede ou ao uso da CPU, tanto no lado do assinante quanto no do emissor. Esse motivo é utilizado apenas em sessões cujo modo de mídia esteja definido como “roteado”. (Consulte O OpenTok Media Router e os modos de mídia.) Esse recurso do OpenTok Media Router faz com que o assinante interrompa a transmissão de vídeo quando a qualidade do sinal se deteriora, e a mensagem é enviada. Quando as condições melhoram, a transmissão de vídeo é retomada, e o [OTSubscriberKit subscriberVideoEnabled:reason:] A mensagem é enviada. Quando o fluxo de vídeo é interrompido, o assinante continua recebendo o fluxo de áudio, caso haja um.
  • OTSubscriberVideoEventSubscriberPropertyChanged — O problema com o vídeo foi causado por uma alteração na conta deste assinante OTSubscriberKit.subscribeToVideo propriedade.

Se a transmissão de vídeo for retomada, o [OTSubscriberKit subscriberVideoEnabled:reason:] A mensagem é enviada.

Ao publicar uma transmissão, você pode evitar que o vídeo seja desativado devido à qualidade da transmissão. Antes de chamar a função [OTSession publish:error:] método, defina o audioFallbackEnabled propriedade do objeto Publisher (ou do objeto PublisherKit) para NO.

Obter informações sobre um fluxo

O objeto OTStream possui as seguintes propriedades que definem o fluxo:

  • connection—O objeto OTConnection correspondente à conexão que está publicando o fluxo. Você pode comparar isso com o connection propriedade do objeto OTSession para verificar se o fluxo está sendo publicado pelo seu cliente.
  • creationTime—O carimbo de data e hora NSDate correspondente à data de criação do fluxo.
  • hasAudio—(Booleano) Se o stream possui áudio.
  • hasVideo—(Booleano) Se a transmissão contém vídeo.
  • name—(NSString) O nome do fluxo. Esse valor é definido ao inicializar o Publisher do fluxo (consulte Inicializando um objeto OTPublisher).
  • session—(OTSession) A sessão do OpenTok à qual a transmissão está vinculada.
  • streamId—(NSString) O ID exclusivo do fluxo.
  • videoDimensions—Um objeto CGSize que define as dimensões atuais da trilha de mídia de vídeo neste fluxo.
  • videoType—(OTStreamVideoType) Se a transmissão utiliza uma fonte de vídeo de câmera (OTStreamVideoTypeCamera), uma fonte de vídeo para compartilhamento de tela (OTStreamVideoTypeScreen), ou uma fonte de vídeo personalizada (OTStreamVideoTypeCustom). Veja Compartilhamento de tela.

Você pode definir um OTSubscriberKitNetworkStatsDelegate objeto para que o OTSubscriberKit monitore as estatísticas do fluxo de um assinante. Para obter estatísticas de baixo nível do fluxo, use o [OTSubscriberKit getRtcStatsReport:] método.

Consulte Guia do desenvolvedor sobre observabilidade do cliente para obter informações detalhadas.

Como definir a taxa de quadros e a resolução preferidas

Ao assinar um stream que utiliza o recurso de vídeo escalável, é possível definir a taxa de quadros e a resolução preferidas para a transmissão que o cliente assinante recebe do OpenTok Media Router. Para mais detalhes, consulte SubscriberKit.preferredFrameRate e SubscriberKit.preferredResolution.

Observação: Essas preferências pressupõem que o editor esteja utilizando o layout padrão da camada de escalabilidade. Se o editor tiver definido um modo de escalabilidade de destino diferente do padrão (consulte Definição do modo de escalabilidade alvo), a seleção de camada do Media Router pode não corresponder à resolução ou à taxa de quadros solicitada. Consulte Interação com a resolução e a taxa de quadros preferidas pelo assinante para mais detalhes.