Transmisiones de publicación — Windows

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

Un objeto Publisher se utiliza para capturar un flujo de audio y vídeo desde el micrófono y la cámara del sistema para utilizarlo en una sesión de OpenTok. También puedes utilizar un Publisher para publicar un compartir pantalla transmisión de vídeo.

Puede crear un Publisher básico llamando a la función Publisher() pasando la instancia de la aplicación 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);
}

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

De forma predeterminada, el Publisher utiliza el capturador de vídeo predeterminado, que emplea el micrófono y la cámara predeterminados del sistema como fuentes de audio y vídeo para la transmisión publicada. Esto viene definido por el VideoCapturer del SDK de OpenTok.

Puede definir un objeto capturador de vídeo específico para que lo utilice el editor. Este objeto captura vídeo de una fuente de vídeo (como una cámara) y tiene ajustes para el vídeo (como la frecuencia de imagen y la resolución).

Puedes utilizar el VideoCapturer.EnumerateDevices() Método para enumerar los dispositivos de captura de vídeo (cámaras) del sistema. Devuelve una lista de objetos `VideoDevice`. La clase `VideoDevice` incluye una serie de CreateVideoCapturer() para instanciar un objeto VideoCapturer que utilice el dispositivo de vídeo:

  • VideoCapturer.CreateVideoCapturer(format) — Crea un objeto `VideoCapturer` utilizando la configuración definida por un objeto `VideoFormat`.
  • VideoCapturer.CreateVideoCapturer(width, height, fps) - Crea un objeto VideoCapturer con la resolución definida por la directiva width y height y con la frecuencia de imagen definida por fps parámetro.
  • VideoCapturer.CreateVideoCapturer(resolution, fps) - Crea un objeto VideoCapturer con la resolución definida por la directiva resolution parámetro y con la frecuencia de fotogramas definida por el fps parámetro. La dirección OpenTok.VideoCapturer.Resolution define los valores utilizados por el resolution parámetro: Low (320x240 píxeles), Medium (640 × 480 píxeles), High (1280x720 píxeles), y High1080p (1920 x 1080 píxeles).

El capturador de vídeo utiliza la resolución soportada en el sistema más cercana a la resolución que especifiques.

De forma predeterminada, los editores utilizan un renderizador de vídeo predeterminado para Windows Presentation Foundation, definido por la clase `VideoRenderer` del SDK de OpenTok para Windows. También puedes especificar un renderizador para el vídeo creando una clase que implemente la interfaz `IVideoRenderer`. Puedes utilizar un renderizador de vídeo personalizado; consulta Uso de un renderizador de vídeo personalizado.

El siguiente código crea un Publisher que utiliza el capturador de vídeo predeterminado del sistema con la resolución establecida en 720p (VideoCapturer.Resolution.High) y la frecuencia de imagen fijada en 30 fotogramas 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);
}

Nota: En las sesiones que utilizan 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 pasar otros parámetros opcionales del Publisher() constructor para definir ajustes personalizados para la transmisión publicada:

  • name - El nombre del vídeo del editor. El Stream.Name La propiedad de una transmisión publicada por este emisor se establecerá en este valor (en todos los clientes).
  • hasAudioTrack — Si se debe incluir una pista de audio en la transmisión publicada. El valor por defecto es true.
  • hasVideoTrack — Si se debe incluir una pista de audio en la transmisión publicada. El valor por defecto es true.
  • stereo — Si se desea habilitar el audio estéreo en la transmisión publicada. El valor por defecto es false. Ajústelo a true para reproducir el audio de un micrófono estéreo.

También puede cambiar la fuente de audio utilizada por el editor. O también puedes crear un controlador de audio personalizado para uso de todos los editores y abonados.

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.

Nota: La clase OpenTok.Publisher y OpenTok.VideoCapturer implementan la interfaz System.IDisposable. Asegúrese de llamar a la clase Dispose() de estos objetos para liberar sus recursos cuando ya no necesites el objeto (por ejemplo, cuando se elimina el Editor o cuando se cierra la aplicación o la ventana).

Publicar un flujo

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

session.Publish(publisher);

Este código supone que session es un objeto Session, que publisher es un objeto Publisher y que el cliente se ha conectado a la sesión. Para más información, véase Cómo unirse a una sesión.

El Publisher envía el StreamCreated cuando el editor comienza a transmitir a la sesión:

publisher.StreamCreated += Publisher_StreamCreated;
session.Publish(publisher);
private void Publisher_StreamCreated(object sender, Publisher.StreamEventArgs e)
{
    Console.WriteLine("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(publisher) del objeto Session:

session.unpublish(mPublisher);

El Publisher envía el StreamCreated cuando el editor comienza a transmitir a la sesión:

publisher.StreamCreated += Publisher_StreamDestroyed;
session.Publish(publisher);
private void Publisher_StreamDestroyed(object sender, Publisher.StreamEventArgs e)
{
    Console.WriteLine("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, configura un controlador de eventos para el Publisher AudioStatsUpdated y VideoUpdated eventos. Para obtener estadísticas de conexión entre pares a bajo nivel, utiliza el Publisher.GetRtcStatsReport() método.

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.

A continuación, puede suscribirse al flujo y utilizar la función Subscriber.AudioStatsUpdated y Subscriber.VideoStatsUpdated para obtener estadísticas de audio y vídeo del flujo que publiques.