Personalização da interface do usuário — Windows

Estas são as configurações que você pode fazer para personalizar a interface do usuário dos vídeos do OpenTok:

Adicionar um nome a um stream publicado

Você pode especificar o nome da editora chamando a função name() método do objeto Publisher.Builder quando você instanciar o objeto Publisher:

publisher = new Publisher(Context.Instance,
  renderer: publisherVideoRenderer,
  name: "Bob's video",
  capturer: capturer);

Você pode usar esse nome para identificar o cliente que está publicando o fluxo. A classe Stream possui um Name propriedade. Quando você inscrever-se em um canal, você pode exibir esse nome em um elemento da interface do usuário.

Não utilize informações pessoais no campo “nome” do editor — o nome do editor pode ser exibido para outros participantes da sessão e também pode aparecer na Ferramenta de Inspeção e nos registros internos da Vonage; portanto, você nunca deve usar informações confidenciais ou pessoais não criptografadas no nome do editor. Veja as melhores práticas de segurança.

Adicionar um botão de silenciar para um editor

Não há nenhum elemento padrão na interface do usuário para silenciar o microfone do apresentador. No entanto, é possível adicionar um elemento, como um botão, que configure o PublishAudio do objeto Publisher quando o usuário clicar nele. Defina a propriedade como false para silenciar o editor:

publisher.PublishAudio = false;

Defina a propriedade como true para publicar áudio.

publisher.PublishAudio = true;

Adicionar um botão de silenciar para um assinante

Não há nenhum elemento padrão da interface do usuário para silenciar o áudio do assinante. No entanto, é possível adicionar um elemento, como um botão, que configure o SubscribeToAudio do objeto Subscriber quando o usuário clicar nele. Defina a propriedade como false para silenciar o áudio:

subscriber.SubscribeToAudio = false;

Defina a propriedade como true para ativar a reprodução de áudio (se o stream tiver áudio):

subscriber.SubscribeToAudio = true;

Adicionar um botão para ativar/desativar a câmera do editor

Não há nenhum elemento padrão da interface do usuário para alternar a câmera utilizada pelo editor. No entanto, é possível adicionar um elemento, como um botão, que defina a VideoCapturer propriedade do objeto Publisher:

publisher.VideoCapturer = newCapturer;

Para obter mais informações, consulte Utilizando um capturador de vídeo personalizado.

Ajustar a interface do usuário quando o vídeo estiver ativado ou desativado

Quando o vídeo de um assinante é desativado, o objeto Assinante envia um VideoDisabled evento. Quando isso ocorre, é possível adicionar um elemento da interface do usuário (como um ícone) para indicar que o vídeo foi desativado:

subscriber.VideoDisabled += Subscriber_VideoDisabled;

private void Subscriber_VideoDisabled(object sender, EventArgs e) {
    // Display the video disabled indicator
}

Quando o vídeo de um assinante é reativado, o objeto Assinante envia um VideoEnabled evento. Quando isso ocorrer, você poderá remover um elemento da interface do usuário (como um ícone) que indique que o vídeo foi reativado:

subscriber.VideoEnabled += Subscriber_VideoEnabled;

private void Subscriber_VideoEnabled(object sender, EventArgs e) {
    // Display the video disabled indicator
}

Em sessões que utilizam o Roteador de mídia OpenTok (sessões com o modo de mídia definido como “roteado”), o Subscribe também pode enviar os seguintes eventos:

  • VideoDisableWarning — O OpenTok Media Router detectou que a qualidade da transmissão diminuiu e o vídeo será desativado caso a qualidade continue a piorar.
  • VideoDisableWarningLifted — O OpenTok Media Router constatou que a qualidade da transmissão melhorou a ponto de a interrupção do vídeo não representar um risco imediato.

Você também pode querer exibir e remover uma notificação da interface do usuário (como um ícone) quando esses eventos forem enviados.

Observe que, ao instanciar um objeto Publisher, você habilita ou desabilita o recurso de fallback de áudio para editores e assinantes no fluxo publicado. O recurso de fallback de áudio desativa o vídeo (tanto nos editores quanto nos assinantes) quando as condições da rede ou da CPU não permitem a exibição de vídeo. Consulte Opção alternativa de áudio (Windows).

Se você ativar o recurso de substituição de áudio do editor, o Publisher envia os seguintes eventos relacionados ao recurso alternativo de áudio:

  • VideoDisabled
  • VideoEnabled
  • VideoDisableWarning
  • VideoDisableWarningLifted

É possível exibir indicadores da interface do usuário em resposta a esses eventos.

Exibição de um elemento indicador quando uma sessão está sendo arquivada

Quando a gravação de um arquivo de uma sessão é iniciada (ou se você se conectar a uma sessão que está sendo gravada), o objeto Session envia um ArchiveStarted evento. Quando a gravação é interrompida, o objeto Session envia um ArchiveStopped evento. É possível adicionar um elemento da interface do usuário, como um ícone exibido na visualização do editor, para indicar que um vídeo está sendo gravado:

session.ArchiveStarted += Session_ArchiveStarted;
session.ArchiveStopped += Session_ArchiveStopped;

private void Session_ArchiveStarted(object sender, EventArgs e) {
    // Display the archive indicator
}

private void Session_ArchiveStopped(object sender, EventArgs e) {
    // Hide the archive indicator
}

Ajuste da interface do usuário com base nos níveis de áudio

O Subscriber.AudioLevel e Publisher.AudioLevel Os eventos são enviados em intervalos regulares com o nível de áudio do assinante e do emissor. Você pode usar o AudioLevel propriedade dos argumentos do evento para atualizar a exibição em um medidor de nível de áudio:

@Override
publisher.AudioLevel += Publisher_AudioLevel;
subscriber.AudioLevel += Subscriber_AudioLevel;

private void Publisher_AudioLevel(object sender, EventArgs e) {
    // Display the audio level based on e.AudioLevel
}

private void Subscriber_AudioLevel(object sender, EventArgs e) {
    // Display the audio level based on e.AudioLevel
}

Observação: O nível de áudio de um emissor não fica disponível até que seu fluxo seja publicado em uma sessão. Para obter uma prévia do áudio antes que o emissor comece a transmitir para a sessão, use um driver de áudio personalizado.

Por padrão, por motivos de privacidade, quando todos os editores estão silenciados, a captura de áudio é interrompida e o microfone é liberado. Isso significa que não haverá mais atualizações no nível de áudio até que uma instância do editor reative o áudio. A partir da versão 2.31.0, o editor conta com uma propriedade que permite que a captura de áudio continue mesmo quando silenciado.

Ao instanciar uma nova instância do publisher, o desenvolvedor pode ativar esse comportamento:


	publisher = new Publisher.Builder(_context)
	{
		AllowAudioCaptureWhileMuted = true
	}.Build();

Observação: Ao ativar esse recurso, o microfone será utilizado mesmo quando o emissor estiver silenciado.

Utilizando um renderizador de vídeo personalizado

Por padrão, os desenvolvedores utilizam um renderizador de vídeo padrão para o Windows Presentation Foundation, definido pelo SDK do OpenTok para Windows.

Você também pode especificar um renderizador para o vídeo criando uma classe que implemente a interface IVideoRenderer. A interface inclui um RenderFrame(frame) método que é chamado quando um novo quadro de vídeo fica disponível. Na sua implementação desse método, use o objeto frame passado para o método para criar uma imagem a ser renderizada. Além disso, ao final da sua implementação desse método, certifique-se de chamar o Dispose() método do frame objeto, para evitar vazamentos de memória.

Ao instanciar um objeto Publisher ou Subscriber, é possível passar o objeto do renderizador de vídeo personalizado para o Publisher() ou Subscriber() construtor (como o renderer parâmetro).