Compartir pantalla: Conceptos generales
Puede publicar un flujo que utilice una vista de vídeo de su pantalla (en lugar de una cámara) como fuente.
Un cliente conectado a la sesión puede suscribirse al flujo (y verlo) como si se suscribiera a un flujo que utiliza una cámara como fuente.
Publicar un flujo con una fuente de pantalla compartida
Para publicar un flujo de pantalla compartida, establece la propiedad videoSource de la propiedad prop de OTPublisher a "screen":
<OTPublisher
properties={{
videoSource: 'screen',
}}
/>
El flujo de pantalla compartida capturará vídeo de toda la vista de la aplicación. Por esta razón, es posible que desee desactivar los suscriptores en el cliente local al publicar un flujo de pantalla compartida (para evitar que aparezcan en el flujo publicado).
En videoSource del parámetro options del OT.initPublisher() define la fuente de vídeo del flujo que se va a publicar. Para compartir pantalla, establezca esta propiedad en "screen". En versiones anteriores del navegador, también se podía pasar en "application" o "window" para especificar un tipo de fuente de pantalla compartida. Sin embargo, en los navegadores actuales que soportan la compartición de pantalla, pasar cualquiera de estos valores resulta en el mismo comportamiento - el navegador muestra un cuadro de diálogo en el que el usuario final selecciona la fuente de compartición de pantalla (que puede ser toda la pantalla o una ventana específica). En Electron, la pantalla compartida captura toda la pantalla, sin pedir permiso al usuario.
El siguiente código muestra cómo publicar un flujo que utiliza la pantalla compartida como fuente:
<div id="publisher"></div>
<div id="screen-preview"></div>
<script>
OT.checkScreenSharingCapability(function(response) {
if(!response.supported || response.extensionRegistered === false) {
// This browser does not support screen sharing.
} else if (response.extensionInstalled === false) {
// Prompt to install the extension.
} else {
// Screen sharing is available. Publish the screen.
var publisher = OT.initPublisher('screen-preview',
{videoSource: 'screen'},
function(error) {
if (error) {
// Look at error.message to see what went wrong.
} else {
session.publish(publisher, function(error) {
if (error) {
// Look error.message to see what went wrong.
}
});
}
}
);
}
});
</script>
En caso de error, el gestor de finalización de OT.initPublisher() se le puede pasar un objeto de error con uno de los siguientes códigos de error:
- 1550 - "No se admite compartir pantalla".
- 1551 - "Compartir pantalla requiere un tipo pero no hay ninguna extensión registrada para tipo."
- 1552 - "Compartir pantalla requiere un tipo extensión, pero no está instalada".
Cuando se publica un flujo de pantalla compartida, se establecen los siguientes valores por defecto para los parámetros options del OT.initPublisher() método:
maxResolution-{ width: 1920, height: 1920 }mirror-falsefitMode-"contain"publishAudio-false
Además, los abonados al flujo resultante también utilizarán por defecto la función "contain" fitMode ajuste.
Para obtener información sobre maxResolution y fitModeconsulte las dos secciones siguientes.
Por defecto, vídeo escalable está desactivado para los flujos de pantalla compartida. Puede activar el vídeo escalable para los flujos de pantalla compartida configurando el parámetro scalableScreenshare para el OT.initPublisher() método. Nota: vídeo escalable para flujos de pantalla compartida es un beta característica.
Para utilizar la pantalla del dispositivo, en lugar de una cámara, como fuente de vídeo, utilice la clase PublisherKit para utilizar un capturador de vídeo personalizado. Para ver un ejemplo de código, consulta la actividad de compartir pantalla en el directorio de muestras del SDK.
Llame al setPublisherVideoType(PublisherKit.PublisherKitVideoType type) del objeto Publisher e introduzca PublisherKit.PublisherKitVideoTypePublisherKitVideoTypeScreen. Esto indica que el flujo publicado tiene una fuente de vídeo de pantalla compartida (en lugar de una cámara).
Antes de publicar un flujo de pantalla compartida que utilice el tipo de vídeo de pantalla en una sesión enrutada, debe llamar a la función setAudioFallbackEnabled(boolean enabled) para el objeto PublisherKit e introduzca false. De este modo se desactiva la función fallback de sólo audio, para que el vídeo no se caiga en los abonados. Véase El enrutador de medios de video de Vonage y los modos de medios.
Por defecto, vídeo escalable está desactivado para los flujos de pantalla compartida. Puede activar el vídeo escalable para flujos de pantalla compartida mediante la opción PublisherKit.Builder.scalableScreenshare() método.
Para utilizar la pantalla del dispositivo, en lugar de una cámara, como fuente de vídeo, utilice la clase PublisherKit para utilizar un capturador de vídeo personalizado. Para ver un ejemplo de código, consulte el proyecto Screen-Sharing en el directorio de muestras del SDK.
Fije el OTPublisherKit.videoType propiedad a OTPublisherKitVideoTypeScreen (definido en OTPublisherKitVideoType). Indica que el flujo publicado tiene una fuente de vídeo de pantalla compartida (en lugar de una cámara).
Antes de publicar una transmisión de pantalla compartida que utilice el tipo de video de pantalla en una sesión que utilice el Vonage Video Media Server, debes configurar la opción OTPublisherKit.audioFallbackEnabled a NO (false en swift). Esto deshabilita la función fallback de sólo audio, para que el vídeo no se caiga en los suscriptores. Véase El enrutador de medios de video de Vonage y los modos de medios.
Por defecto, vídeo escalable está desactivado para los flujos de pantalla compartida. Puede activar el vídeo escalable para flujos de pantalla compartida mediante la opción OTPublisherKitSettings.scalableScreenshare propiedad. Nota: vídeo escalable para flujos de pantalla compartida es un beta característica.
Para utilizar la pantalla del dispositivo, en lugar de una cámara, como fuente de vídeo, utilice la clase PublisherKit para utilizar un capturador de vídeo personalizado. Para ver un ejemplo de código, consulte el proyecto Screen-Sharing en el directorio de muestras del SDK.
Fije el OTPublisherKit.videoType propiedad a OTPublisherKitVideoTypeScreen (definido en OTPublisherKitVideoType). Indica que el flujo publicado tiene una fuente de vídeo de pantalla compartida (en lugar de una cámara).
Antes de publicar una transmisión de pantalla compartida que utilice el tipo de video de pantalla en una sesión que utilice el Vonage Video Media Server, debes configurar la opción OTPublisherKit.audioFallbackEnabled a NO (false en swift). Esto deshabilita la función fallback de sólo audio, para que el vídeo no se caiga en los suscriptores. Véase El enrutador de medios de video de Vonage y los modos de medios.
Por defecto, vídeo escalable está desactivado para los flujos de pantalla compartida. Puede activar el vídeo escalable para flujos de pantalla compartida mediante la opción OTPublisherKitSettings.scalableScreenshare propiedad. Nota: vídeo escalable para flujos de pantalla compartida es un beta característica.
Para utilizar la pantalla del dispositivo, en lugar de una cámara, como fuente de vídeo, tendrá que implementar una función capturador de vídeo personalizado.
A continuación se muestra un ejemplo que define un capturador de vídeo personalizado para implementar la compartición de pantalla (utilizando la pantalla en lugar de una cámara como fuente de vídeo):
Fije el VideoSourceType del objeto Editor a OpenTok.VideoSourceType.Screen. Esto indica que el flujo publicado tiene una fuente de vídeo de pantalla compartida (en lugar de una cámara).
Por defecto, vídeo escalable está desactivado para los flujos de pantalla compartida. Puede activar el vídeo escalable para flujos de pantalla compartida mediante la opción Publisher.Builder.ScalableScreenshare propiedad.
Nota: vídeo escalable para flujos de pantalla compartida es un beta característica.
Determinar el tipo de vídeo ("pantalla" o "cámara") para un flujo
Puede suscribirse a una transmisión que utilice una fuente de vídeo de pantalla compartida del mismo modo que se suscribe a una transmisión que utiliza una cámara como fuente. Consulte Suscripción a flujos.
Puede detectar que un flujo es un flujo de pantalla compartida, comprobando la opción videoType del objeto de evento en la OTSession streamCreated evento. Para un flujo de pantalla compartida, esta propiedad se establece en "screen":
<OTSession
applicationId="the API key"
sessionId="the session ID"
token="the token"
eventHandlers={{
streamCreated: event => {
console.log(event.videoType, 'stream created', event.streamId);
}
}}>
{ /* ... */ }
</OTSession>
El objeto OTSession envía un evento streamPropertyChanged cuando cambian las dimensiones de la transmisión de otro cliente. Esto puede suceder cuando el cliente de publicación cambia el tamaño de una ventana compartida (como una ventana del navegador en una aplicación que utiliza el SDK del cliente web de Vonage Video). La propiedad changedProperty del objeto de evento se establece en "videoDimensions". Las propiedades stream.height y stream.width del objeto de evento son el nuevo ancho y alto del video.
<OTSession
applicationId="the API key"
sessionId="the session ID"
token="the token"
eventHandlers={{
streamPropertyChanged: event => {
console.log(event.stream.streamId, 'stream property', event.changedProperty, 'changed:', event.stream.height, event.stream.width);
}
}}>
{ /* ... */ }
</OTSession>
Puede utilizar las dimensiones de vídeo y los detalles de videoType de las secuencias para ajustar el tamaño o las dimensiones de sus suscriptores correspondientes en la interfaz de usuario. Para obtener más información sobre cómo personalizar el diseño de los abonados en la interfaz de usuario, consulte Suscripción a flujos.
El objeto Stream contiene un videoType propiedad. Puede tener uno de los siguientes valores
"camera"- un flujo de vídeo estándar que utiliza una cámara como fuente de vídeo"screen"- un flujo de vídeo de pantalla compartida"custom"- un flujo publicado por un cliente web que utiliza un elemento HTML VideoTrack como fuente de vídeoundefined- un flujo es sólo de voz (véase el Guía sólo de voz)
Esta propiedad puede cambiar si un flujo publicado desde un dispositivo móvil cambia de un tipo de vídeo de cámara a uno de pantalla compartida. Cuando cambia el tipo de vídeo, el objeto Session envía un comando streamPropertyChanged evento.
El siguiente código se suscribe a streams y los añade a diferentes elementos contenedores HTML DIV, en función del tipo de vídeo:
<div id="people"></div>
<div id="screens"></div>
<script>
session.on('streamCreated', function(event) {
var subOptions = {insertMode: 'append'};
if(event.stream.videoType === 'screen') {
session.subscribe(event.stream, 'screens', subOptions);
} else {
session.subscribe(event.stream, 'people', subOptions);
}
});
</script>
El objeto Stream contiene un videoType propiedad. Puede establecerse a uno de los siguientes valores, definidos en el enum Stream.StreamVideoType:
StreamVideoTypeCamera- un flujo de vídeo estándar que utiliza una cámara como fuente de vídeoStreamVideoTypeScreen- un flujo de vídeo de pantalla compartidaStreamVideoTypeCustom- un flujo publicado por un cliente web que utiliza un elemento HTML VideoTrack como fuente de vídeo.
El objeto Stream contiene un videoType propiedad. Puede establecerse a uno de los siguientes valores, definidos en el enum OTStreamVideoType:
OTStreamVideoTypeCamera- un flujo de vídeo estándar que utiliza una cámara como fuente de vídeoOTStreamVideoTypeScreen- un flujo de vídeo de pantalla compartidaOTStreamVideoTypeCustom- un flujo publicado por un cliente web que utiliza un elemento HTML VideoTrack como fuente de vídeo
El objeto Stream contiene un videoType propiedad. Puede establecerse a uno de los siguientes valores, definidos en el enum OTStreamVideoType:
OTStreamVideoTypeCamera- un flujo de vídeo estándar que utiliza una cámara como fuente de vídeoOTStreamVideoTypeScreen- un flujo de vídeo de pantalla compartidaOTStreamVideoTypeCustom- un flujo publicado por un cliente web que utiliza un elemento HTML VideoTrack como fuente de vídeo
El objeto Stream contiene un VideoSourceType propiedad. Puede establecerse en uno de los siguientes valores, definidos en la propiedad OpenTok.VideoSourceType enum:
Camera- un flujo de vídeo estándar que utiliza una cámara como fuente de vídeoScreen- un flujo de vídeo de pantalla compartidaCustom- un flujo publicado por un cliente web que utiliza un elemento HTML VideoTrack como fuente de vídeo.
Suscribirse a flujos de pantalla compartida
El objeto Stream contiene un videoType propiedad. Puede tener uno de los siguientes valores
"camera"- un flujo de vídeo estándar que utiliza una cámara como fuente de vídeo"screen"- un flujo de vídeo de pantalla compartida"custom"- un flujo publicado por un cliente web que utiliza un elemento HTML VideoTrack como fuente de vídeoundefined- un flujo es sólo de voz (véase el Guía sólo de voz)
Esta propiedad puede cambiar si un flujo publicado desde un dispositivo móvil cambia de un tipo de vídeo de cámara a uno de pantalla compartida. Cuando cambia el tipo de vídeo, el objeto Session envía un comando streamPropertyChanged evento.
El siguiente código se suscribe a streams y los añade a diferentes elementos contenedores HTML DIV, en función del tipo de vídeo:
<div id="people"></div>
<div id="screens"></div>
<script>
session.on('streamCreated', function(event) {
var subOptions = {insertMode: 'append'};
if(event.stream.videoType === 'screen') {
session.subscribe(event.stream, 'screens', subOptions);
} else {
session.subscribe(event.stream, 'people', subOptions);
}
});
</script>
Puede suscribirse a una transmisión que utilice una fuente de vídeo de pantalla compartida del mismo modo que se suscribe a una transmisión que utiliza una cámara como fuente. Consulte Suscripción a flujos.
Puede suscribirse a una transmisión que utilice una fuente de vídeo de pantalla compartida del mismo modo que se suscribe a una transmisión que utilice una cámara como fuente. Consulte Suscripción a secuencias en Swift.
Puede suscribirse a una transmisión que utilice una fuente de vídeo de pantalla compartida del mismo modo que se suscribe a una transmisión que utilice una cámara como fuente. Consulte Suscripción a secuencias en Objetivo-C.
Puede suscribirse a una transmisión que utilice una fuente de vídeo de pantalla compartida del mismo modo que se suscribe a una transmisión que utiliza una cámara como fuente. Consulte Suscripción a flujos.