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
- Inscrever-se em um canal
- Cancelar a inscrição em um stream
- Reconexão automática
- Detectar quando os fluxos saem de uma sessão
- Detectar quando o vídeo de um assinante está desativado
- Obter informações sobre um fluxo
- Como definir a taxa de quadros e a resolução preferidas
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 oConnectionpropriedade 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.