Transmissões — Android

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

Um objeto Publisher é usado para capturar um fluxo de áudio e vídeo do microfone e da câmera do dispositivo para uso em uma sessão do OpenTok.

Para um editor básico, use o Publisher.Builder classe para instanciar um objeto Publisher. Passe o contexto do aplicativo Android para o publisher:

mPublisher = new Publisher.Builder(context)
  .build();

Certifique-se de manter uma referência ao objeto Publisher para evitar que ele seja removido pela coleta de lixo, o que pode causar falhas e comportamentos inesperados.

Adicione um objeto ouvinte para eventos básicos relacionados ao editor chamando o setPublisherListener(PublisherKit.PublisherListener listener) método do objeto Publisher:

mPublisher.setPublisherListener(this);

Implemente os métodos da interface PublisherKit.PublisherListener no objeto que você especificar como objeto ouvinte de eventos. Esses métodos são chamados quando ocorrem eventos relacionados ao editor.

O getView() O método do objeto Publisher retorna a visualização do vídeo que você publica. Adicione-a como uma subvisualização de um objeto android.view.ViewGroup para exibi-la no aplicativo:

mPublisherViewContainer.addView(mPublisher.getView());

Passe o objeto Publisher para o Session.publish() método para publicar um fluxo em uma sessão. Consulte Publicação de um stream.

Você pode chamar outros métodos do objeto Publisher.Builder para definir configurações personalizadas para o editor:

mPublisher = new Publisher.Builder(context)
  .name("Bob")
  .audioTrack(true)
  .frameRate(CameraCaptureFrameRate.FPS_7)
  .resolution(CameraCaptureResolution.LOW)
  .videoTrack(false)
  .capturer(mCapturer)
  .renderer(mRenderer)
  .build();

Observe que, nas 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ê 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.

Você também pode usar uma fonte de áudio personalizada para a transmissão publicada — consulte Utilização de um driver de áudio personalizado.

Visualização do vídeo do editor antes da transmissão

Observe que, por padrão, a visualização do Editor exibe o vídeo do editor assim que ele inicia a transmissão para a sessão. Para ver uma pré-visualização do vídeo antes que o Editor inicie a transmissão, chame a função startPreview() método do objeto Publisher:

mPublisher.startPreview();

Se você chamar o startPreview() método, é preciso chamar o destroy() método utilizado pelo editor para remover a visualização do editor (e o vídeo), quando o editor interrompe a transmissão (quando o onStreamDestroyed(PublisherKit publisher, Stream stream) (o método do PublisherListener é chamado).

Observação: O startPreview() O método não conecta a entrada de áudio ao emissor. Para obter uma pré-visualização do áudio antes que o emissor comece a transmitir para a sessão, use um driver de áudio personalizado.

Publicação de um stream

Depois de criar um objeto Publisher (Veja Inicializando um objeto Publisher), você pode passá-lo para o publish(PublisherKit publisher) método de um objeto Session para publicar o fluxo na sessão:

mSession.publish(mPublisher);

Este código pressupõe que mSession é um objeto Session e que o cliente se conectou à sessão. Para obter mais informações, consulte Participar de uma sessão.

O PublisherKit.PublisherListener.onStreamCreated(PublisherKit publisher, Stream stream) O método é chamado quando o editor inicia a transmissão para a sessão:

@Override
public void onStreamCreated(publisher, stream) {
   // 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(PublisherKit publisher) método do objeto Session:

    mSession.unpublish(mPublisher);

O PublisherKit.PublisherListener.onStreamDestroyed(PublisherKit publisher, Stream stream) O método é chamado quando o editor interrompe a transmissão para a sessão:

@Override
public void onStreamDestroyed(publisher, stream) {
   // 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, chame o PublisherKit.setAudioStatsListener(listener) e PublisherKit.setVideoStatsListener(listener) métodos. Passe objetos que implementem o PublisherKit.AudioStatsListener e PublisherKit.VideoStatsListener interfaces.

As implementações do PublisherKit.AudioStatsListener.onAudioStats(publisher, stats) e PublisherKit.VideoStatsListener.onVideoStats(publisher, stats) Os métodos são chamados periodicamente para relatar estatísticas de áudio e vídeo para o editor. Cada método recebe dois objetos: o editor e uma matriz de objetos de estatísticas.

Para obter estatísticas de fluxo de baixo nível, use o PublisherKit.getRtcStatsReport() método. Isso fornece relatórios de estatísticas de RTC para o fluxo de mídia.

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.

Para obter estatísticas de um stream publicado pelo cliente local, é necessário usar uma sessão que utilize o OpenTok Media Router (sessões com o modo de mídia (definido como “roteado”). Em seguida, você pode usar o SubscriberKit.setAudioStatsListener(AudioStatsListener listener) e SubscriberKit.setVideoStatsListener(VideoStatsListener listener) métodos do objeto Subscriber para obter estatísticas de áudio e vídeo da transmissão que você publica. Consulte esse assunto para mais informações.

O teste-da-rede-opentok O repositório inclui um código de exemplo que mostra como utilizar as estatísticas de um fluxo de teste antes de publicá-lo em uma sessão.