Transmisiones en directo — Android

Una vez que haya conectado a una sesiónpuede publicar un flujo que otros clientes conectados a la sesión puedan ver.

Este tema incluye las siguientes secciones:

Inicialización de un objeto Publisher

El objeto «Publisher» se utiliza para capturar un flujo de audio y vídeo desde el micrófono y la cámara del dispositivo para utilizarlo en una sesión de OpenTok.

Para un editor básico, utiliza el Publisher.Builder para instanciar un objeto Publisher. Introduzca el contexto de la aplicación Android para el editor:

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

Asegúrate de mantener una referencia al objeto Publisher para evitar que sea eliminado por el recolector de basura, lo que podría provocar fallos y un comportamiento imprevisto.

Añade un objeto receptor para los eventos básicos relacionados con la publicación llamando a la función setPublisherListener(PublisherKit.PublisherListener listener) método del objeto Publisher:

mPublisher.setPublisherListener(this);

Implemente los métodos de la interfaz PublisherKit.PublisherListener en el objeto que especifique como objeto receptor de eventos. Estos métodos se ejecutan cuando se producen eventos relacionados con el editor.

El getView() del objeto Publisher devuelve la vista del vídeo que has publicado. Añádelo como subvista de un objeto android.view.ViewGroup para mostrarlo en la aplicación:

mPublisherViewContainer.addView(mPublisher.getView());

Pasa el objeto Publisher a la Session.publish() Método para publicar un flujo en una sesión. Véase Publicar un flujo.

Puede llamar a otros métodos del objeto Publisher.Builder para definir configuraciones personalizadas para el editor:

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

Ten en cuenta que en las sesiones que utilizan el OpenTok Media Router (sesiones con el modo multimedia enrutado), al reducir la frecuencia de imagen se reduce proporcionalmente el ancho de banda utilizado por el flujo. Sin embargo, en las sesiones que tienen el modo de medios establecido en retransmitido, la reducción de la frecuencia de imagen no reduce el ancho de banda del flujo.

Puede utilizar un capturador de vídeo personalizado para publicar un flujo con una fuente de vídeo personalizada - véase Uso de un capturador de vídeo personalizado. También puedes utilizar el capturador de vídeo personalizado para publicar una transmisión en la que se comparta la pantalla; consulta Compartir pantalla.

También puedes utilizar una fuente de audio personalizada para la transmisión publicada; consulta Uso de un controlador de audio personalizado.

Previsualización del vídeo del editor antes de su retransmisión

Ten en cuenta que, de forma predeterminada, la vista del editor muestra el vídeo de este cuando comienza a transmitir a la sesión. Para ver una vista previa del vídeo antes de que el editor comience a transmitir, llama a la función startPreview() método del objeto Publisher:

mPublisher.startPreview();

Si llamas al startPreview() debe llamar al método destroy() Método que utiliza el editor para eliminar su vista (y el vídeo) cuando deja de retransmitir (cuando el onStreamDestroyed(PublisherKit publisher, Stream stream) se llama al método de PublisherListener).

Nota: En startPreview() Este método no conecta la entrada de audio al emisor. Para obtener una vista previa del audio antes de que el emisor comience a transmitir a la sesión, utiliza un controlador de audio personalizado.

Publicar un flujo

Una vez creado el objeto Publisher (véase Inicialización de un objeto Publisher), puedes pasarlo a la publish(PublisherKit publisher) de un objeto Session para publicar el flujo en la sesión:

mSession.publish(mPublisher);

Este código supone que mSession es un objeto Session y que el cliente se ha conectado a la sesión. Para obtener más información, consulta Cómo unirse a una sesión.

El PublisherKit.PublisherListener.onStreamCreated(PublisherKit publisher, Stream stream) se llama cuando el editor comienza a transmitir a la sesión:

@Override
public void onStreamCreated(publisher, stream) {
   // The publisher started streaming.
}

Configuración de la velocidad de bits máxima para una transmisión

Puedes establecer la tasa de bits máxima para una transmisión publicada. Establecer la tasa de bits máxima puede ayudar a reducir el consumo de ancho de banda cuando un usuario se conecta desde una conexión con límite de datos. Consulta esta documentación.

Impedir que una editorial transmita en streaming

Puedes impedir que el editor transmita en directo a la sesión llamando a la función unpublish(PublisherKit publisher) del objeto Session:

    mSession.unpublish(mPublisher);

El PublisherKit.PublisherListener.onStreamDestroyed(PublisherKit publisher, Stream stream) cuando el editor deja de transmitir a la sesión:

@Override
public void onStreamDestroyed(publisher, stream) {
   // The publisher stopped streaming.
}

Obtener estadísticas sobre la transmisión de un editor

Para registrar métodos de devolución de llamada para los informes periódicos de estadísticas de audio y vídeo de un editor, llama a la función PublisherKit.setAudioStatsListener(listener) y PublisherKit.setVideoStatsListener(listener) métodos. Pasa objetos que implementen el PublisherKit.AudioStatsListener y PublisherKit.VideoStatsListener interfaces.

Las implementaciones de la PublisherKit.AudioStatsListener.onAudioStats(publisher, stats) y PublisherKit.VideoStatsListener.onVideoStats(publisher, stats) Los métodos se invocan periódicamente para proporcionar estadísticas de audio y vídeo del editor. A cada método se le pasan dos objetos: el editor y una matriz de objetos de estadísticas.

Para obtener estadísticas de flujo de bajo nivel, utilice la función PublisherKit.getRtcStatsReport() método. Esto proporciona informes de estadísticas de RTC para la transmisión multimedia.

Consulte guía del desarrollador de la observabilidad del cliente para obtener información detallada.

Probar el flujo de un editor

Puedes publicar un flujo de prueba y comprobar sus estadísticas de audio y vídeo para determinar el tipo de flujo (como alta resolución o sólo audio) que admite tu conexión.

Para obtener estadísticas de una transmisión publicada por el cliente local, debes utilizar una sesión que emplee el OpenTok Media Router (las sesiones con el modo multimedia (configurado como «enrutado»). A continuación, puedes utilizar el SubscriberKit.setAudioStatsListener(AudioStatsListener listener) y SubscriberKit.setVideoStatsListener(VideoStatsListener listener) métodos del objeto «Subscriber» para obtener estadísticas de audio y vídeo de la transmisión que publicas. Consulta este tema para más información.

El prueba-de-red-opentok repo incluye código de ejemplo para mostrar cómo utilizar las estadísticas de un flujo de prueba antes de publicarlo en una sesión.