Inscrever-se em canais — Windows

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:

Detecção de fluxos em uma sessão

O objeto Session envia um StreamReceived evento que ocorre quando um fluxo publicado por outro cliente é criado em uma sessão. (Um fluxo é criado quando um cliente publica um fluxo para a sessão ou se o fluxo já existe quando você se conecta à sessão.)

@Override
session.StreamReceived += Session_StreamReceived;

private void Session_StreamReceived(object sender, Session.StreamEventArgs e)
{
    Console.WriteLine("Session stream received");
}

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, primeiro instancie um objeto `Subscriber` chamando o método Subscriber(context, stream, renderer) construtor. Passe o contexto do aplicativo do Windows para o Assinante, o objeto Stream e um renderizador de vídeo. O OpenTok.IVideoRenderer A interface define o renderizador de vídeo. A OpenTok.VideoRenderer A classe, incluída no SDK do OpenTok para Windows, renderiza vídeo em um controle do Windows Presentation Framework. O objeto VideoRenderer é uma subclasse de System.Windows.Controls.Control. Você pode adicionar esse elemento à sua hierarquia de visualização. Ou pode criar seu próprio renderizador de vídeo personalizado que implemente a OpenTok.IVideoRenderer interface.

Ligue para o subscribe() método do objeto Session para começar a se inscrever no fluxo:


VideoRenderer videoRenderer = new VideoRenderer();
// Add the video renderer to the application's view hierarchy.

Subscriber subscriber = new Subscriber(Context.Instance, stream, renderer);
subscriber.Error += Subscriber_Error;
session.subscribe(subscriber);

private void Session_Error(object sender, Subscriber.ErrorEventArgs e)
{
    Console.WriteLine("Subscriber error:" + e.ErrorCode);
}

O objeto Subscriber envia um Error caso ocorra um erro ao assinar o fluxo. Verifique o ErrorCode propriedade dos argumentos passados ao evento para ver detalhes sobre o motivo da falha na assinatura. (O OpenTok.ErrorCode definições de enumeração ErrorCode valores.)

O objeto Subscriber envia um Connected evento que ocorre quando o aplicativo começa a receber o fluxo do assinante.

Observação: A classe OpenTok.Subscriber implementa a interface System.IDisposable. Certifique-se de chamar o Dispose() método do objeto Subscriber para liberar seus recursos quando o objeto não for mais necessário (por exemplo, quando o Subscriber interrompe a transmissão de vídeo ou quando o aplicativo ou a janela está sendo fechado).

Você pode criar um driver de áudio personalizado para ser utilizado por todos os editores e assinantes.

Cancelar a inscrição em um stream

Para interromper a reprodução de uma transmissão da qual você é assinante, chame a função Session.Unsubscribe(subscriber) método:

session.unsubscribe(subscriber);

O Assinante é desconectado, e sua visualização é removida de sua supervisação.

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 é perdida e o cliente tenta se reconectar, o objeto Session envia um StreamDisconnected evento. Quando a conexão é restabelecida, o objeto Subscriber envia um StreamReconnected evento. Se o cliente não conseguir restaurar o fluxo, o objeto Session envia um StreamDropped evento.

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 destruição:

session.StreamDropped += Session_StreamDropped;

subscriber.StreamDisconnected += Subscriber_StreamDisconnected;
subscriber.StreamReconnected += Subscriber_StreamReconnected;

public void Subscriber_StreamDisconnected(object sender)
{
  // Display a user interface notification.
}

public void Subscriber_StreamReconnected(object sender)
{
  // Display a user interface notification.
}

public void Session_StreamDropped(object sender, EventArgs e)
{
  // Display a user interface notification.
}

Detectar quando os fluxos saem de uma sessão

Quando os fluxos publicados por outros clientes saem de uma sessão, o objeto Session envia um StreamDropped evento:

session.StreamDropped += Session_StreamDropped;

public void Session_StreamDropped(object sender, EventArgs e)
{
  // Stream dropped
}

O objeto de argumentos de evento passado para esta função é definido pela classe OpenTok.Session.StreamEventArgs. Essa classe inclui um Stream propriedade. Compare isso Stream opor-se à Stream propriedade de cada objeto Subscriber para identificar o assinante da transmissão.

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

O OpenTok Media Router interrompe o envio de vídeo ao assinante quando detecta que a conectividade está se deteriorando. O assinante continua recebendo o fluxo de áudio, caso haja algum. Quando o OpenTok Media Router interrompe o envio de vídeo, o objeto Assinante envia um VideoDisabled evento:

subscriber.VideoDisabled += Subscriber_VideoDisabled;

public void Subscriber_VideoDisabled(object sender)
{
  // Display a user interface notification.
}

Quando o OpenTok Media Router desativa o vídeo de um assinante, talvez seja necessário ajustar a interface do usuário relacionada a esse assinante.

O objeto Subscriber envia um VideoDisabled evento quando o vídeo for retomado:

subscriber.VideoEnabled += Subscriber_VideoEnabled;

public void Subscriber_VideoEnabled(object sender)
{
  // Video resumes for the subscriber.
}

Obter informações sobre um fluxo

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

  • Connection— (Conexão) O objeto Connection correspondente à conexão que está publicando o fluxo. Você pode comparar isso com o Connection propriedade do objeto Session para verificar se o fluxo está sendo publicado pelo seu cliente.
  • CreationTime— (DateTime) O carimbo de data e hora (DateTime) correspondente ao momento da criação do fluxo.
  • HasAudio— (bool) Se o stream possui áudio.
  • HasVideo— (bool) Indica se a transmissão contém vídeo.
  • Name— (string) O nome do fluxo. Esse valor é definido ao inicializar o Publisher do fluxo (consulte Inicializando um objeto Publisher).
  • Id— (string) O ID exclusivo do stream.
  • Height— (int) A altura do fluxo, em pixels.
  • VideoSourceType— (VideoSourceType) Se a transmissão utiliza uma fonte de vídeo de câmera (VideoSourceType.StreamVideoTypeCamera), uma fonte de vídeo para compartilhamento de tela (VideoSourceType.StreamVideoTypeScreen), ou uma fonte de vídeo personalizada (VideoSourceType.StreamVideoTypeCustom). Veja Compartilhamento de tela.
  • Width— (int) A largura do fluxo, em pixels.

Você usa o Subscriber.AudioStatsUpdated e Subscriber.VideoStatsUpdated eventos para monitorar as estatísticas do fluxo de um assinante. Para obter estatísticas de baixo nível sobre a conexão entre pares, use o Subscriber.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 Subscriber.PreferredFramerate e Subscriber.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.