Personalización de la interfaz de usuario — Windows
Estos son los ajustes que puedes realizar para personalizar la interfaz de usuario de los vídeos de OpenTok:
- Añadir un nombre a un flujo publicado
- Añadir un botón de silenciar para un editor
- Añadir un botón de silencio para un abonado
- Añadir un botón para activar la cámara del editor
- Ajuste de la interfaz de usuario cuando el vídeo está activado o desactivado
- Visualización de un elemento indicador cuando se archiva una sesión
- Ajuste de la interfaz de usuario en función de los niveles de audio
- Uso de un renderizador de vídeo personalizado
Añadir un nombre a un flujo publicado
Puedes especificar el nombre del editor llamando a la función name() método del objeto Publisher.Builder cuando crear una instancia del objeto Publisher:
publisher = new Publisher(Context.Instance,
renderer: publisherVideoRenderer,
name: "Bob's video",
capturer: capturer);
Puedes utilizar este nombre para identificar al cliente que publica el flujo. La clase Stream tiene un Name propiedad. Cuando tú suscribirse a un flujopuede mostrar este nombre en un elemento de la interfaz de usuario.
No introduzcas datos personales en el campo «nombre» del editor. — El nombre del editor puede quedar visible para los demás participantes de la sesión y también puede aparecer en la herramienta Inspector y en los registros internos de Vonage, por lo que nunca debes utilizar información confidencial o personal sin cifrar en el nombre del editor. Consulta las mejores prácticas de seguridad.
Añadir un botón de silenciar para un editor
No existe ningún elemento predeterminado de la interfaz de usuario para silenciar el micrófono del editor. Sin embargo, puede añadir un elemento, como un botón, que establezca la opción PublishAudio del objeto Publisher cuando el usuario haga clic en él. Establece la propiedad en false Para silenciar al editor:
publisher.PublishAudio = false;
Establece la propiedad en true para publicar audio.
publisher.PublishAudio = true;
Añadir un botón de silencio para un abonado
No existe ningún elemento predeterminado de la interfaz de usuario para silenciar el audio del abonado. Sin embargo, puedes añadir un elemento, como un botón, que active el SubscribeToAudio del objeto Suscriptor cuando el usuario hace clic en él. Establezca la propiedad en false para silenciar el audio:
subscriber.SubscribeToAudio = false;
Establece la propiedad en true para activar la reproducción de audio (si el flujo tiene audio):
subscriber.SubscribeToAudio = true;
Añadir un botón para activar la cámara del editor
No existe ningún elemento predeterminado en la interfaz de usuario para alternar la cámara utilizada por el editor. Sin embargo, puede añadir un elemento, como un botón, que establezca la opción VideoCapturer propiedad del objeto Publisher:
publisher.VideoCapturer = newCapturer;
Para más información, consulte Uso de un capturador de vídeo personalizado.
Ajuste de la interfaz de usuario cuando el vídeo está activado o desactivado
Cuando se desactiva el vídeo de un abonado, el objeto Subscriber envía un mensaje VideoDisabled evento. Cuando esto ocurre, puedes añadir un elemento de la interfaz de usuario (como un icono) para indicar que el vídeo se ha desactivado:
subscriber.VideoDisabled += Subscriber_VideoDisabled;
private void Subscriber_VideoDisabled(object sender, EventArgs e) {
// Display the video disabled indicator
}
Cuando se vuelve a activar el vídeo de un abonado, el objeto Subscriber envía un mensaje VideoEnabled evento. Cuando esto ocurra, puede eliminar un elemento de la interfaz de usuario (como un icono) que indique que el vídeo se ha vuelto a activar:
subscriber.VideoEnabled += Subscriber_VideoEnabled;
private void Subscriber_VideoEnabled(object sender, EventArgs e) {
// Display the video disabled indicator
}
En las sesiones que utilizan el OpenTok Media Router (sesiones con el modo de medios configurado en «enrutado»), la suscripción también puede enviar los siguientes eventos:
VideoDisableWarning— El OpenTok Media Router ha detectado que la calidad de la transmisión se ha deteriorado y el vídeo se desactivará si la calidad sigue empeorando.VideoDisableWarningLifted— El OpenTok Media Router ha determinado que la calidad de la transmisión ha mejorado hasta tal punto que la interrupción del vídeo no supone un riesgo inmediato.
También es posible que desee mostrar y eliminar una notificación de la interfaz de usuario (como un icono) cuando se envíen estos eventos.
Ten en cuenta que, al instanciar un objeto Publisher, se activa o desactiva la función de recambio de audio para el emisor y el receptor en la transmisión publicada. La función de recambio de audio desactiva el vídeo (tanto en el emisor como en el receptor) cuando las condiciones de la red o de la CPU no permiten la transmisión de vídeo. Véase Opción alternativa de audio (Windows).
Si activas la opción de audio alternativo del editor, el Publisher envía los siguientes eventos relacionados con el sistema de audio alternativo:
VideoDisabledVideoEnabledVideoDisableWarningVideoDisableWarningLifted
Puedes mostrar indicadores de la interfaz de usuario en respuesta a estos eventos.
Visualización de un elemento indicador cuando se archiva una sesión
Cuando un archivo de una sesión comienza a grabar (o si se conecta a una sesión que se está grabando), el objeto Session envía un mensaje ArchiveStarted evento. Cuando se detiene la grabación, el objeto Session envía un ArchiveStopped evento. Puedes añadir un elemento de la interfaz de usuario, como un icono que se muestre en la vista del editor, para indicar que se está grabando un vídeo:
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 de la interfaz de usuario en función de los niveles de audio
El Subscriber.AudioLevel y Publisher.AudioLevel Los eventos se envían a intervalos regulares con el nivel de audio del suscriptor y del emisor. Puedes utilizar el AudioLevel de los argumentos del evento para actualizar la visualización en un medidor de nivel de audio:
@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
}
Nota: El nivel de audio de un emisor no está disponible hasta que su transmisión se publique en una sesión. 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.
Por defecto, por razones de privacidad, cuando todos los editores están silenciados se detiene la captura de audio y se libera el micrófono. Esto significa que no habrá más actualizaciones del nivel de audio hasta que una instancia del editor vuelva a habilitar el audio. A partir de la versión 2.31.0 el editor se habilita con una propiedad para permitir que la captura de audio continúe mientras está silenciado.
Al crear una nueva instancia de «publisher», el desarrollador puede activar este comportamiento:
publisher = new Publisher.Builder(_context)
{
AllowAudioCaptureWhileMuted = true
}.Build();
Nota: Al activar este comportamiento, el micrófono se utilizará incluso cuando el editor esté silenciado.
Uso de un renderizador de vídeo personalizado
Por defecto, los editores utilizan un renderizador de vídeo predeterminado para Windows Presentation Foundation, definido por el SDK de OpenTok para Windows.
También puede especificar un renderizador para el vídeo creando una clase que implemente la interfaz IVideoRenderer. La interfaz incluye un RenderFrame(frame) que es llamado cuando un nuevo fotograma de vídeo está disponible. En tu implementación de este método, usa el objeto frame pasado al método para crear una imagen a renderizar. Además, al final de la implementación de este método, asegúrate de llamar al método Dispose() método del frame objeto, para evitar fugas de memoria.
Al instanciar un objeto Editor o Suscriptor, puede pasar el objeto renderizador de vídeo personalizado a la función Publisher() o Subscriber() constructor (como el renderer parámetro).