Suscríbete: Gestión y eventos

Esta guía trata sobre la gestión del comportamiento de los suscriptores y cómo reaccionar ante los eventos que se producen durante la ejecución.

Gestión de flujos de suscriptores (React Native)

Detección de cambios en las dimensiones de una secuencia de vídeo

Las dimensiones del vídeo de una transmisión pueden variar si se modifica el tamaño de una transmisión publicada desde un dispositivo móvil (por ejemplo, debido a cambios en la orientación del dispositivo) o si se modifica el tamaño de la ventana de origen al compartir pantalla.

Cuando cambian las dimensiones del vídeo de una transmisión, el Session El objeto envía un streamPropertyChanged evento, con changedProperty ajustado a videoDimensions.

<OTSubscriber
  eventHandlers={{
    streamVideoDimensionsChanged: (event) => {
      console.log('stream video dimensions changed -- stream ID:', event.streamId);
      console.log('new dimensions:', event.width, 'x', event.height);
    },
  }}
/>

Configuración de la frecuencia de fotogramas y la resolución preferidas

Al suscribirse a una transmisión que utiliza el vídeo escalable función, puedes configurar preferredResolution a 'auto' para gestionar automáticamente la resolución de los vídeos de los suscriptores y optimizar el uso de la CPU y la red.

Para un control avanzado, configura la frecuencia de fotogramas y la resolución que prefieras para la transmisión a la que estás suscrito:

<OTSubscriber
  properties={{
    preferredFrameRate: 15,
    preferredResolution: { width: 640, height: 480 },
  }}
/>

Se trata de recomendaciones, no de órdenes. El Media Router selecciona la capa disponible más cercana que se adapte a las condiciones reales de la red del abonado. No tienen ningún efecto en sesiones retransmitidas, cuando el vídeo escalable está desactivado o cuando el códec negociado es H.264. Para conocer otras técnicas destinadas a reducir el consumo de recursos en sesiones de gran tamaño, consulta el Guía para la conexión con un único nodo.

Detección de flujos que abandonan una sesión

Cuando un flujo remoto abandona una sesión, el OTSubscriber El componente envía un streamDestroyed evento. El evento incluye detalles como: streamId, name, reason, hasAudio, hasVideoy videoType. Para obtener toda la información sobre el evento y su reason valores, véase el Suscríbete a la guía de diagnóstico.

<OTSubscriber
  eventHandlers={{
    streamDestroyed: (event) => {
      console.log('Stream stopped. Reason: ' + event.reason);
    },
  }}
/>

Representación personalizada de los abonados

Por defecto, OTSubscriber representa las vistas secundarias de los vídeos de los suscriptores. También puedes proporcionar una función de representación para controlar totalmente la representación mediante renderView:

<OTSubscriber
  renderView={(streamId) => (
    <View style={styles.subscriberTile}>
      <OTSubscriberView streamId={streamId} style={styles.video} />
    </View>
  )}
/>

Configuración de las propiedades de la transmisión

Establece las propiedades globales para todos los suscriptores a través de la subscriberProperties apoyar en OTSession, o configurar las propiedades de cada flujo mediante el properties apoyar en OTSubscriber. Para ver la lista completa de inmuebles disponibles, consulta la Referencia de la API de OTSubscriber.

// Global defaults for all subscribers in the session
<OTSession
  subscriberProperties={{
    subscribeToAudio: true,
    subscribeToVideo: true,
  }}
/>

// Per-stream override
<OTSubscriber
  properties={{
    subscribeToAudio: true,
    subscribeToVideo: false,
  }}
/>

Gestión de flujos de suscriptores (iOS Swift)

Gestiona suscriptores, maneja eventos y ajusta preferencias en iOS.

Detectar si el vídeo de un abonado está desactivado

func subscriberVideoDisabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
    print("subscriber video disabled.")
}

Posibles razones

  • OTSubscriberVideoEventPublisherPropertyChanged
  • OTSubscriberVideoEventQualityChanged
  • OTSubscriberVideoEventSubscriberPropertyChanged

Cuando se reanude el vídeo:

func subscriberVideoEnabled(_ subscriber: OTSubscriberKit, reason: OTSubscriberVideoEventReason) {
    print("subscriber video enabled.")
}

Obtener información sobre un arroyo

El OTStream objeto incluye:

  • connection — El vínculo editorial
  • creationTime - Marca de tiempo
  • hasAudio - Bool
  • hasVideo - Bool
  • name — Nombre opcional de la transmisión
  • session — Sesión relacionada
  • streamId - Identificación única
  • videoDimensions - Tamaño CGS
  • videoType — Cámara, pantalla o personalizada

Puedes controlar las estadísticas con OTSubscriberKitNetworkStatsDelegate.

Véase el guía de observabilidad del cliente Para más información.

Configuración de la frecuencia de fotogramas y la resolución preferidas

Para flujos de vídeo escalables, puedes configurar:

  • SubscriberKit.preferredFrameRate
  • SubscriberKit.preferredResolution

Gestión de flujos de suscriptores (JavaScript)

Restringir la frecuencia de imagen de un flujo suscrito

También puedes limitar la frecuencia de fotogramas de la transmisión de vídeo de un suscriptor.

Para limitar la frecuencia de fotogramas de un abonado, llama a la función restrictFrameRate() método del objeto Subscriber, pasando como parámetro true:

subscriber.restrictFrameRate(true);

Pasa el balón a false y la frecuencia de fotogramas de la transmisión de vídeo no está limitada:

subscriber.restrictFrameRate(false);

Cuando se limita la frecuencia de fotogramas, el fotograma de vídeo del suscriptor se actualizará una vez por segundo o menos. Esta función solo está disponible en sesiones enrutadas. En las sesiones retransmitidas, llamar a este método no tiene ningún efecto.

La restricción de la frecuencia de imagen del abonado tiene las siguientes ventajas:

  • Reduce el uso de la CPU.
  • Reduce el ancho de banda de red que consume la aplicación.
  • Te permite suscribirte a más flujos simultáneamente.

La reducción de la frecuencia de fotogramas de un suscriptor no afecta a la frecuencia de fotogramas del vídeo en otros clientes. Para conocer otras técnicas destinadas a reducir el consumo de recursos en sesiones de gran tamaño, consulta el Guía para la conexión con un único nodo.

Detectar cuándo el audio de un suscriptor está bloqueado o desbloqueado

Algunos navegadores bloquean automáticamente la reproducción de audio hasta que el usuario interactúa con la página. Para obtener información completa sobre cómo gestionar el audio bloqueado, incluyendo cómo desactivar el botón de reproducción predeterminado y mostrar tu propia interfaz de usuario, consulta Visualización de un elemento de interfaz de usuario personalizado cuando el audio del abonado está bloqueado.

Además, el suscriptor incluye un isAudioBlocked() método que devuelve true si el audio está bloqueado o false si no es así.

Detectar si el vídeo de un abonado está desactivado

Cuando se desactiva el vídeo del suscriptor, el objeto «Subscriber» envía un videoDisabled Evento. Cuando el Media Router desactiva el vídeo de un suscriptor, es posible que desees ajustar la interfaz de usuario relacionada con dicho suscriptor.

El reason propiedad del videoDisabled El objeto de evento define el motivo por el que se desactivó el vídeo ('publishVideo', 'quality', o 'subscribeToVideo'). Para obtener una descripción completa de cada motivo, consulta el Suscríbete a la guía de diagnóstico. Antes de que el vídeo se desactive debido a quality, el suscriptor envía un videoDisableWarning evento. Para evitar que se desactive el vídeo de una retransmisión por motivos de calidad, consulta el Guía de soluciones alternativas de audio para suscriptores.

subscriber.on('videoDisableWarning', () => {
  showConnectionWarning(subscriber.id);
});

subscriber.on('videoDisableWarningLifted', () => {
  hideConnectionWarning(subscriber.id);
});

subscriber.on('videoDisabled', (event) => {
  if (event.reason === 'quality') {
    showVideoDisabledOverlay(subscriber.id);
  }
});

subscriber.on('videoEnabled', () => {
  hideVideoDisabledOverlay(subscriber.id);
});

Por defecto, el suscriptor muestra su propio indicador de vídeo desactivado cuando quality esa es la razón. Para sustituirla por tu propia interfaz de usuario, configura style.videoDisabledDisplayMode a 'off' en las opciones de suscripción. Para conocer el comportamiento específico de cada códec (por ejemplo, por qué las transmisiones H.264 no se ven afectadas por la alternativa basada en la calidad), consulta el Guía de códecs de vídeo.

Obtener estadísticas de abonados (Web)

El getStats() El método de un objeto «Subscriber» te proporciona información sobre la transmisión del suscriptor. Para ver la lista completa de campos disponibles, consulta el Suscríbete a la guía de diagnóstico.

El siguiente código registra los índices de pérdida y las velocidades de bits cada segundo:

window.setInterval(() => {
  subscriber.getStats((error, stats) => {
    if (error) {
      console.error('Error getting subscriber stats:', error.message);
      return;
    }
    if (stats.video) {
      console.log('video bitrate:', stats.video.bitrate, 'bps');
      const total = stats.video.packetsLost + stats.video.packetsReceived;
      console.log('video packet loss ratio:', total > 0 ? stats.video.packetsLost / total : 0);
    }
    if (stats.audio) {
      console.log('audio bitrate:', stats.audio.bitrate, 'bps');
    }
  });
}, 1000);

Para obtener estadísticas de un flujo publicado por el cliente local, debes utilizar una sesión enrutada y configurar el testNetwork opción de true Al suscribirte:

const subscriber = session.subscribe(stream, 'container', {
  testNetwork: true,
});

Para obtener estadísticas más detalladas sobre la transmisión, utiliza subscriber.getRtcStatsReport(). Para obtener una descripción completa de todos los campos disponibles, consulta el Guía de observabilidad para clientes.

Configuración de la frecuencia de imagen y la resolución preferidas (Web)

Al suscribirse a una transmisión que utiliza el vídeo escalable función, puedes configurar preferredResolution a 'auto' para gestionar automáticamente la resolución de los vídeos de los suscriptores y optimizar el uso de la CPU y la red. Para obtener una explicación detallada sobre cómo funcionan estas indicaciones, los valores admitidos y las limitaciones, consulta el Guía de vídeo escalable.

Conjunto preferredResolution y preferredFrameRate en las opciones que pasas a Session.subscribe() (o utiliza Subscriber.setPreferredResolution() y Subscriber.setPreferredFrameRate() (una vez te hayas suscrito):

// Set at subscribe time using 'auto' (recommended)
const subscriber = session.subscribe(stream, 'container', {
  preferredResolution: 'auto',
});

// Or set explicitly after subscribing
subscriber.setPreferredResolution({ width: 1280, height: 720 });
subscriber.setPreferredFrameRate(30);

// Downgrade for a thumbnail tile
subscriber.setPreferredResolution({ width: 320, height: 240 });
subscriber.setPreferredFrameRate(7);

Gestión de flujos de abonados (Android)

Gestione suscriptores, maneje eventos y ajuste preferencias en Android.

Detectar si el vídeo de un abonado está desactivado

Cuando el vídeo está desactivado:

override fun onVideoDisabled(subscriber: SubscriberKit, reason: String) {
    // Video disabled
}

Cuando se reanude el vídeo:

override fun onVideoEnabled(subscriber: SubscriberKit, reason: String) {
    // Video resumed
}

El reason Este parámetro explica por qué se produjo el cambio.

Obtener información sobre un arroyo

El Stream El objeto proporciona:

  • getConnection() - Objeto de conexión
  • getCreationTime() - Fecha de creación
  • hasAudio() - Booleano
  • hasVideo() - Booleano
  • getName() - Nombre de la corriente
  • getStreamId() - Identificación única
  • getVideoHeight() - Altura en píxeles
  • getVideoWidth() - Anchura en píxeles
  • getVideoType() - Cámara, pantalla compartida o personalizada

También puedes controlar las estadísticas:

  • setAudioStatsListener()
  • setVideoStatsListener()
  • setMediaLinkStatsListener()
  • getRtcStatsReport()

Configuración de la frecuencia de fotogramas y la resolución preferidas

Para flujos de vídeo escalables, puedes establecer preferencias:

  • SubscriberKit.setPreferredFrameRate()
  • SubscriberKit.setPreferredResolution()

Gestión de flujos de abonados (Windows)

Gestiona los suscriptores, gestiona los eventos y modifica las preferencias en Windows.

Detectar si el vídeo de un abonado está desactivado

El OpenTok Media Router puede dejar de enviar vídeo si las condiciones de la red empeoran.

El suscriptor sigue recibiendo el audio, si está disponible.

Cuando el vídeo está desactivado, el Subscriber envía un VideoDisabled evento:

subscriber.VideoDisabled += Subscriber_VideoDisabled;

public void Subscriber_VideoDisabled(object sender)
{
    // Display a user interface notification.
}

Cuando se reanude el vídeo:

subscriber.VideoEnabled += Subscriber_VideoEnabled;

public void Subscriber_VideoEnabled(object sender)
{
    // Video resumes for the subscriber.
}

Es posible que desee ajustar la interfaz de usuario en respuesta a estos eventos.

Obtener información sobre un arroyo

El Stream expone las siguientes propiedades:

  • Connection — El vínculo editorial
  • CreationTime - Fecha de creación del flujo
  • HasAudio - Si el flujo tiene audio
  • HasVideo - Si el flujo tiene vídeo
  • Name - Nombre de la corriente
  • Id - ID único del flujo
  • Height - Altura del vídeo en píxeles
  • Width — Ancho del vídeo en píxeles
  • VideoSourceType - Cámara, pantalla compartida o fuente personalizada

Posible VideoSourceType valores:

  • VideoSourceType.StreamVideoTypeCamera
  • VideoSourceType.StreamVideoTypeScreen
  • VideoSourceType.StreamVideoTypeCustom

Estadísticas de seguimiento

Utilice estos eventos para supervisar las estadísticas del flujo:

  • Subscriber.AudioStatsUpdated
  • Subscriber.VideoStatsUpdated
  • Subscriber.MediaLinkStatsUpdated

Para recuperar estadísticas RTC de bajo nivel:

subscriber.GetRtcStatsReport();

Configuración de la frecuencia de fotogramas y la resolución preferidas

Para los flujos que utilizan la función de vídeo escalable, configure:

  • Subscriber.PreferredFramerate
  • Subscriber.PreferredResolution

Gestión de flujos de suscriptores (Linux)

Gestiona los suscriptores, organiza eventos y modifica las preferencias en Linux.

Cómo detectar cuándo el vídeo de una transmisión está desactivado

El on_stream_has_video_changed función de devolución de llamada de la otc_session_callbacks se llama cuando cambia la disponibilidad de vídeo de un flujo.

El stream El parámetro es un puntero a un otc_stream struct.

Úsalo:

otc_stream_get_id(stream)

para recuperar el ID del flujo.

Obtener información sobre un arroyo

Utiliza las siguientes funciones para obtener información sobre el flujo:

  • otc_stream_get_connection() — Devuelve la conexión de publicación
  • otc_stream_get_creation_time() — Devuelve la marca de tiempo de creación del flujo
  • otc_stream_has_audio() - Si el flujo está publicando audio
  • otc_stream_has_video() - Si el flujo está publicando vídeo
  • otc_stream_has_audio_track() — Si la transmisión tiene pista de audio
  • otc_stream_has_video_track() — Si la transmisión tiene una pista de vídeo
  • otc_stream_get_name() - Devuelve el nombre del flujo
  • otc_stream_get_id() - Devuelve el identificador único del flujo
  • otc_stream_get_video_height() - Devuelve la altura del vídeo en píxeles
  • otc_stream_get_video_width() — Devuelve el ancho del vídeo en píxeles
  • otc_stream_get_video_type() - Devuelve el tipo de flujo de vídeo

Tipos de vídeo posibles:

  • OTC_STREAM_VIDEO_TYPE_CAMERA
  • OTC_STREAM_VIDEO_TYPE_SCREEN

Estadísticas de seguimiento

Utilice estas funciones de devolución de llamada de abonado:

  • on_audio_stats()
  • on_video_stats()
  • on_media_link_stats()

Para obtener estadísticas de bajo nivel del RTC, utiliza:

otc_subscriber_get_rtc_stats_report()

Configuración de la frecuencia de fotogramas y la resolución preferidas

Para las secuencias que utilizan la función de vídeo escalable, puedes establecer la frecuencia de imagen y la resolución preferidas utilizando:

  • otc_subscriber_set_preferred_framerate()
  • otc_subscriber_set_preferred_resolution()