Transmissões de publicação — Windows
Depois de conectado a uma sessão, você pode publicar um stream que outros clientes conectados à sessão possam visualizar.
Este tópico inclui as seguintes seções:
- Inicializando um objeto Publisher
- Publicação de um stream
- Definindo a taxa de bits máxima para uma transmissão
- Impedir que uma editora transmita conteúdo
- Como obter estatísticas sobre o stream de um editor
- Testando a transmissão de um emissor
Inicializando um objeto Publisher
Um objeto Publisher é usado para capturar um fluxo de áudio e vídeo do microfone e da câmera do sistema para uso em uma sessão do OpenTok. Você também pode usar um Publisher para publicar um compartilhamento de tela transmissão de vídeo.
É possível criar um Publisher básico chamando a função Publisher() construtor, passando a instância do aplicativo do Windows:
publisher = new Publisher(Context.Instance);
publisher.Error += Publisher_Error;
private void Publisher_Error(object sender, Publsher.ErrorEventArgs e)
{
Console.WriteLine("Publisher error:" + e.ErrorCode);
}
Passe o objeto Publisher para o Session.publish() método para publicar um fluxo em uma sessão. Consulte Publicação de um stream.
Por padrão, o Publisher utiliza o capturador de vídeo padrão, que usa o microfone e a câmera padrão do sistema como fontes de áudio e vídeo para a transmissão publicada. Isso é definido pelo VideoCapturer no SDK do OpenTok.
É possível definir um objeto de captura de vídeo específico para o editor utilizar. Esse objeto captura vídeo de uma fonte de vídeo (como uma câmera) e possui configurações para o vídeo (como a taxa de quadros e a resolução).
Você pode usar o VideoCapturer.EnumerateDevices() método para enumerar dispositivos de captura de vídeo (câmeras) no sistema. Ele retorna uma lista de objetos VideoDevice. A classe VideoDevice inclui vários CreateVideoCapturer() métodos para instanciar um objeto VideoCapturer que utilize o dispositivo de vídeo:
VideoCapturer.CreateVideoCapturer(format)— Cria um objeto VideoCapturer usando as configurações definidas por um objeto VideoFormat.VideoCapturer.CreateVideoCapturer(width, height, fps)— Cria um objeto VideoCapturer com a resolução definida pelowidtheheightparâmetros e com a taxa de quadros definida pelofpsparâmetro.VideoCapturer.CreateVideoCapturer(resolution, fps)— Cria um objeto VideoCapturer com a resolução definida peloresolutionparâmetro e com a taxa de quadros definida pelofpsparâmetro. OOpenTok.VideoCapturer.ResolutionA enum define os valores utilizados pelaresolutionparâmetro:Low(320 x 240 pixels),Medium(640 x 480 pixels),High(1280 x 720 pixels), eHigh1080p(1920 x 1080 pixels).
O capturador de vídeo utiliza a resolução suportada pelo sistema que for mais próxima da resolução especificada por você.
Por padrão, os desenvolvedores utilizam um renderizador de vídeo padrão para o Windows Presentation Foundation, definido pela classe VideoRenderer no SDK do OpenTok para Windows. Também é possível especificar um renderizador para o vídeo criando uma classe que implemente a interface IVideoRenderer. É possível usar um renderizador de vídeo personalizado — consulte Utilizando um renderizador de vídeo personalizado.
O código a seguir cria um Publisher que utiliza o capturador de vídeo padrão do sistema, com a resolução definida como 720p (VideoCapturer.Resolution.High) e a taxa de quadros definida em 30 quadros por segundo:
var devices = VideoCapturer.EnumerateDevices();
var selectedDevice = devices[0];
capturer = selectedDevice.CreateVideoCapturer(VideoCapturer.Resolution.High,
VideoCapturer.VideoCapturer.FrameRate.Fps30);
publisher = new Publisher(Context.Instance, renderer: publisherVideoRenderer, capturer: capturer);
publisher.Error += Publisher_Error;
private void Publisher_Error(object sender, Publsher.ErrorEventArgs e)
{
Console.WriteLine("Publisher error:" + e.ErrorCode);
}
Observação: Em sessões que utilizam o OpenTok Media Router (sessões com o modo de mídia (configurado como “routed”), reduzir a taxa de quadros diminui proporcionalmente a largura de banda utilizada pela transmissão. No entanto, em sessões em que o modo de mídia está configurado como “relayed”, reduzir a taxa de quadros não diminui a largura de banda da transmissão.
Você passa outros parâmetros opcionais da função Publisher() construtor para definir configurações personalizadas para o stream publicado:
name— O nome do vídeo do editor. OStream.NameA propriedade de um stream publicado por esse editor será definida com esse valor (em todos os clientes).hasAudioTrack— Se deve incluir uma faixa de áudio na transmissão publicada. O padrão étrue.hasVideoTrack— Se deve incluir uma faixa de áudio na transmissão publicada. O padrão étrue.stereo— Se o áudio estéreo deve ser ativado na transmissão publicada. O padrão éfalse. Defina isso comotruepara transmitir o áudio de um microfone estéreo.
Você também pode alterar a fonte de áudio utilizada pelo editor. Ou você pode criar um driver de áudio personalizado para ser utilizado por todos os editores e assinantes.
Você pode usar um capturador de vídeo personalizado para publicar uma transmissão com uma fonte de vídeo personalizada — consulte Utilizando um capturador de vídeo personalizado. Você também pode usar o capturador de vídeo personalizado para publicar uma transmissão de compartilhamento de tela — consulte Compartilhamento de tela.
Observação: A classe OpenTok.Publisher e a classe OpenTok.VideoCapturer implementam a interface System.IDisposable. Certifique-se de chamar o Dispose() método desses objetos para liberar seus recursos quando você não precisar mais deles (por exemplo, quando o Publisher for removido ou quando o aplicativo ou a janela estiver sendo fechado).
Publicação de um stream
Depois de criar um objeto Publisher (Veja Inicializando um objeto Publisher), você pode passá-lo para o Publish(publisher) método de um objeto Session para publicar o fluxo na sessão:
session.Publish(publisher);
Este código pressupõe que session é um objeto Session, que publisher é um objeto Publisher e que o cliente se conectou à sessão. Para obter mais informações, consulte Participar de uma sessão.
O Publisher envia o StreamCreated evento que ocorre quando o editor inicia a transmissão para a sessão:
publisher.StreamCreated += Publisher_StreamCreated;
session.Publish(publisher);
private void Publisher_StreamCreated(object sender, Publisher.StreamEventArgs e)
{
Console.WriteLine("The publisher started streaming.");
}
Definindo a taxa de bits máxima para uma transmissão
É possível definir a taxa de bits máxima para uma transmissão publicada. Definir a taxa de bits máxima pode ajudar a reduzir o consumo de largura de banda quando um usuário se conecta por meio de uma conexão com limite de tráfego. Consulte esta documentação.
Impedir que uma editora transmita conteúdo
Você pode impedir que o editor transmita para a sessão chamando a função Unpublish(publisher) método do objeto Session:
session.unpublish(mPublisher);
O Publisher envia o StreamCreated evento que ocorre quando o editor inicia a transmissão para a sessão:
publisher.StreamCreated += Publisher_StreamDestroyed;
session.Publish(publisher);
private void Publisher_StreamDestroyed(object sender, Publisher.StreamEventArgs e)
{
Console.WriteLine("The publisher stopped streaming.");
}
Como obter estatísticas sobre o stream de um editor
Para registrar métodos de retorno de chamada para relatórios periódicos de estatísticas de áudio e vídeo de um editor, defina um manipulador de eventos para o Publisher AudioStatsUpdated e VideoUpdated eventos. Para obter estatísticas de conexão entre pares em nível de baixo, use o Publisher.GetRtcStatsReport() método.
Consulte Guia do desenvolvedor sobre observabilidade do cliente para obter informações detalhadas.
Testando a transmissão de um emissor
Você pode publicar uma transmissão de teste e verificar suas estatísticas de áudio e vídeo para determinar o tipo de transmissão (como alta resolução ou somente áudio) compatível com a sua conexão.
Você pode então se inscrever no feed e usar o Subscriber.AudioStatsUpdated e Subscriber.VideoStatsUpdated eventos para obter estatísticas de áudio e vídeo da transmissão que você publica.