---
title: roVideoPlayer
slug: develop/es/rovideoplayer
docTags: 
createdAt: 2025-03-11T07:07:18.733Z
---

Este objeto se utiliza para reproducir archivos de video (mediante la interfaz genérica *ifMediaTransport* ). Si el puerto de mensajes está configurado, el objeto enviará eventos del tipo *roVideoEvent*. Todas las llamadas de objeto son asíncronas. Es decir, la reproducción de video se maneja en un hilo diferente del script, y el script continuará ejecutándose mientras se reproduce el video. El video decodificado se escalará a la resolución de salida especificada por *roVideoMode*. El equivalente en JavaScript es usar elementos \<video> con [propiedades de BrightSign](docId\:PdYtB1wooQwKYvCD5fJmS).

Para mostrar video en una zona/ventana, debe llamar a `SetRectangle()`. En las versiones de firmware 6.0.x y posteriores, la compatibilidad con zonas está habilitada de forma predeterminada.

## ifVideoControl

**PlayStaticImage(filename As String) As Boolean**

Usa el decodificador de video para mostrar una imagen. En los modelos 4Kx42, XT3, XD3, HD4, XD4, XT4, XC5, XT5, XD5, HD5 y LS445, puede usar el decodificador de video para mostrar imágenes 4K.

**PlayStaticImage(parameters As roAssociativeArray) As Boolean**

Usa el decodificador de video para mostrar una imagen. La matriz asociativa pasada puede contener los siguientes parámetros:

- `Nombre de archivo`: El nombre del archivo de imagen
- `EncryptionAlgorithm`: El algoritmo de cifrado de archivos. Actualmente las opciones son "AesCtr" y "AesCtrHmac".
- `Clave de cifrado`: La clave para descifrar el archivo de imagen. Esta es una matriz de bytes compuesta por 128 bits de clave, seguidos por 128 bits de IV.

Consulte [esta página](docId\:z65qEZ0xwq9C70OBEgcYI) para obtener detalles sobre cómo mostrar imágenes cifradas.

:::hint{type="warning"}
El reproductor de video ya no acepta claves de cifrado AES "\{A|A}" (es decir, donde los 64 bits superiores e inferiores de la clave son idénticos).
:::

**SetViewMode(mode As String) As Boolean**

Configura la escala del video en relación con la ventana de video. La cadena pasada puede ser uno de los siguientes valores:

- `"Ajustar a escala"`: Escala el video para llenar la ventana. La relación de aspecto del video de origen se ignora, por lo que el video puede aparecer estirado/comprimido.
- `"LetterboxedAndCentered"`: Aplica bandas negras y centra la ventana. Se mantiene la relación de aspecto de la ventana de origen.
- `"FillScreenAndCentered"`: Escala el video para llenar la ventana. Se mantiene la relación de aspecto, por lo que el video puede aparecer recortado. Este es el comportamiento predeterminado.
- `"Centrado"`: Centra la ventana.

:::hint{type="info"}
Los modos de visualización dependen de que los archivos de video tengan marcas correctas de relación de aspecto, y algunos archivos pueden estar marcados incorrectamente.
:::

**SetRectangle(r As roRectangle) As Void**

Especifica la ubicación y las dimensiones de la ventana de video usando una instancia *roRectangle&#x20;*&#x70;asada.

**Ocultar() como booleano**

Oculta la ventana de video.

**Show() como Boolean**

Muestra la ventana de video.

**EnableSafeRegionTrimming(enable As Boolean) As Boolean**

**AdjustVideoColor(parameters As roAssociativeArray) As Boolean**

Ajusta la salida de video y gráficos del reproductor usando los siguientes parámetros, que pueden pasarse al método como una matriz asociativa: "brightness", "hue", "contrast", "saturation". Cada parámetro tiene un valor predeterminado de 0 y puede aceptar un rango de valores entre -1000 y 1000.

**EstablecerValorDeClave(keying\_settings As roAssociativeArray) As booleano**

Aplica una máscara a cada píxel en la ventana de video. Si el valor del píxel cae dentro del rango especificado de valores clave de crominancia y luminancia, el píxel aparecerá transparente, permitiendo que el video y los gráficos detrás de él se vean a través. Si el valor del píxel no cae dentro del rango especificado, el píxel no se modifica. Los valores clave de crominancia y luminancia se configuran usando enteros contenidos en la matriz asociativa pasada:

- `luma`
- `cr`
- `cb`

Cada valor entero se organiza de la siguiente manera:` [8 bits de máscara][8 bits de rango superior][8 bits de rango inferior]`. Por ejemplo, un valor 0xff8040 para luma enmascararía luma en 0xff (sin cambios) y luego aplicaría un rango de 0x40 a 0x80 para cambiar a alfa transparente. Tenga en cuenta que la incrustación por crominancia y luminancia funciona bien con formas y patrones simples, mientras que patrones complejos como cabello o césped no se enmascararán de manera efectiva.

**SetTransform(transform As String) As Boolean**

Aplica una de ocho transformaciones al plano de video. Este método funciona igual de bien con todas las fuentes de video (archivos, streams, entrada HDMI®) y se puede llamar por separado en múltiples instancias de *roVideoPlayer&#x20;*&#x20;. Las llamadas a este método solo surten efecto cuando se reproduce el siguiente archivo/fuente, y las transiciones a un video transformado no ocurren de forma fluida.

- `"identidad"`: Sin transformación (comportamiento predeterminado)
- `"rot90"`: Rotación de 90 grados en sentido antihorario
- `"rot180"`: Rotación de 180 grados en sentido antihorario
- `"rot270"`: Rotación de 270 grados en sentido antihorario
- `"espejo"`: Transformación de espejo horizontal
- `"mirror_rot90"`: Rotación reflejada de 90 grados en sentido horario
- `"mirror_rot180"`: Rotación reflejada de 180 grados en sentido horario
- `"mirror_rot270"`: Rotación reflejada de 270 grados en sentido horario

:::hint{type="info"}
Las coordenadas y dimensiones de la instancia de *roRectangle&#x20;*&#x71;ue contiene el video no se ven afectadas por la rotación.
:::

**GetFilePlayability(filename As String) As roAssociativeArray**

Devuelve un associative array que indica la capacidad de reproducción del archivo de video. Para las siguientes claves, un valor `"jugable"` indica que el componente es reproducible, mientras que un valor `"sin medios"` indica que no hay contenido multimedia; cualquier otro valor indica que el contenido multimedia no es reproducible.

- `audio`: El archivo de audio asociado con el video
- `video`: El archivo de video asociado con el video
- `archivo`: El archivo contenedor de video

**GetProbePlayability(probe\_string As String) As roAssociativeArray**

Devuelve un associative array que indica la capacidad de reproducción de la cadena probe. Para las siguientes claves, un valor `"jugable"` indica que el componente es reproducible, mientras que un valor `"sin medios"` indica que no hay contenido multimedia; cualquier otro valor indica que el contenido multimedia no es reproducible.

- `audio`: El archivo de audio asociado con el video
- `video`: El archivo de video asociado con el video
- `archivo`: El archivo contenedor de video

**GetStreamInfo() As roAssociativeArray**

Devuelve un associative array que contiene información sobre el video actual. Para recuperar metadatos sobre un archivo de video que no se está reproduciendo actualmente, utilice el método `ProbeFile()` en su lugar. El associative array puede contener los siguientes parámetros:

- `Fuente` <font color="#704ae0">string</font>: El URI del archivo de video
- `SrcAddress` <font color="#704ae0">string</font>: La dirección IP de origen del stream de video
- `Dirección de destino` <font color="#704ae0">string</font>: La dirección multicast en la que se transmite el stream IP. Este valor puede estar ausente si el servicio RTSP no ha redirigido el stream (en este caso, puede mostrarse la dirección IP del reproductor en su lugar).
- `Encapsulación` <font color="#704ae0">string</font>: La encapsulación del video. Este valor puede ser "ES" (elementary stream), "TS" (transport stream) o "UNKNOWN" para video en streaming.
- `Formato de audio` <font color="#704ae0">string</font>: El formato del archivo de audio
- `AudioSampleRate` <font color="#704ae0">int</font>: La frecuencia de muestreo de audio (en hercios)
- `Cantidad de canales de audio` <font color="#704ae0">int</font>: El número de canales de audio
- `Duración del audio` <font color="#704ae0">int</font>: La duración de la pista de audio (en milisegundos)
- `Formato de video` <font color="#704ae0">string</font>: El formato del archivo de video
- `VideoFramerate` <font color="#704ae0">int</font>: La velocidad de fotogramas del video (en fotogramas por segundo)
- `Profundidad de color de video` <font color="#704ae0">int</font>: La profundidad de color del video (en bits)
- `Ancho del video` <font color="#704ae0">int</font>: El ancho del video (en píxeles)
- `Altura del video` <font color="#704ae0">int</font>: La altura del video (en píxeles)
- `Relación de aspecto del video` <font color="#704ae0">float</font>: La relación de aspecto del video
- `Duración del video` <font color="#704ae0">int</font>: La duración del video (en milisegundos)
- `VídeoPreferido` <font color="#704ae0">int</font>: La pista de video preferida actual, según lo determinado por el método SetPreferredVideo()
- `Audio preferido` <font color="#704ae0">int</font>: La pista de audio preferida actual, según lo determinado por el método SetPreferredAudio()
- `Subtítulo preferido` <font color="#704ae0">int</font>: La pista de subtítulos preferida actual, según lo determinado por el método SetPreferredCaptions()
- `Programas` <font color="#704ae0">roArray</font>: Una lista de programas que forman parte del video. Cada entrada contiene el ID del programa, junto con índices de pistas de video, audio y subtítulos que forman parte del programa. Estas listas de pistas pueden utilizarse, junto con los parámetros `Vídeo`, `Audio`, y `Subtítulo` y los métodos `SetPreferred<>()` para escanear y seleccionar pistas. Cada entrada puede contener los siguientes parámetros:
  - `ProgramId` <font color="#704ae0">int</font>: El ID del programa
  - `Vídeo`  <font color="#704ae0">roArray</font>: Un índice de enteros correspondiente a las pistas de video que forman parte del programa
  - `Audio`  <font color="#704ae0">roArray</font>: Un índice de enteros correspondiente a las pistas de audio que forman parte del programa
  - `Subtítulo`  <font color="#704ae0">roArray</font>: Un índice de enteros correspondiente a las pistas de subtítulos que forman parte del programa. Para recuperar más información sobre una pista individual de video/audio/subtítulos, utilice el valor entero para buscar el índice asociado de `Vídeo`/`Audio`/`Subtítulo` (por ejemplo, `print streaminfo.subtitle[streaminfo.programs[0].subtitle[1]]`)
- `Vídeo` <font color="#704ae0">roArray</font>: Una lista de pistas de video que forman parte del video. Cada entrada de la lista es un arreglo asociativo con los siguientes parámetros:
  - `Relación de aspecto` <font color="#704ae0">float</font>: La relación de aspecto de la pista de video
  - `Nombre` <font color="#704ae0">string</font>: El nombre de la pista de video
  - `Ancho` <font color="#704ae0">int</font>: El ancho del video (en píxeles)
  - `Altura` <font color="#704ae0">int</font>: La altura del video (en píxeles)
  - `Profundidad de color` <font color="#704ae0">int</font>: La relación de aspecto de la pista de video
  - `Duración` <font color="#704ae0">int</font>: La duración de la pista de video (en milisegundos)
  - `Programa` <font color="#704ae0">int</font>: El ID del programa al que pertenece la pista de video
  - `FrameRate` <font color="#704ae0">float</font>: La velocidad de fotogramas de la pista de video
  - `Pid` <font color="#704ae0">int</font>: El identificador de paquete (PID) de la pista de video
  - `Formato` <font color="#704ae0">string</font>: El formato de la pista de video
- `Audio` <font color="#704ae0">roArray</font>: Una lista de pistas de audio que forman parte del video. Cada entrada de la lista es un arreglo asociativo con los siguientes parámetros:
  - `Nombre` <font color="#704ae0">string</font>: El nombre de la pista de audio
  - `Cantidad de canales` <font color="#704ae0">int</font>: El número de canales de audio
  - `Formato` <font color="#704ae0">string</font>: El formato de la pista de audio
  - `Pid` <font color="#704ae0">int</font>: El identificador de paquete (PID) de la pista de audio
  - `Programa` <font color="#704ae0">int</font>: El ID del programa al que pertenece la pista de audio
  - `Duración` <font color="#704ae0">int</font>: La duración de la pista de audio (en milisegundos)
  - `Frecuencia de muestreo` <font color="#704ae0">int</font>: La frecuencia de muestreo de audio (en hercios)
  - `Idioma` <font color="#704ae0">string</font>: Un código que especifica el idioma de la pista de audio (p. ej., "eng", "spa"). Los códigos de idioma se especifican en el estándar ISO 639-2.
- `Subtítulo` <font color="#704ae0">roArray</font>: Una lista de pistas de subtítulos que forman parte del video. Cada entrada de la lista es un arreglo asociativo con los siguientes parámetros:
  - `Idioma` <font color="#704ae0">string</font>: Un código que especifica el idioma de la pista de subtítulos (p. ej., "eng", "spa"). Los códigos de idioma se especifican en el estándar ISO 639-2.
  - `Programa` <font color="#704ae0">int</font>: El ID del programa al que pertenece la pista de subtítulos
  - `Pid` <font color="#704ae0">int</font>: El identificador de paquete (PID) de la pista de subtítulos
  - `Tipo` <font color="#704ae0">string</font>: El estándar de codificación de los subtítulos (p. ej., "CEA708", "DVB")

**GetStreamStatistics() As roAssociativeArray**

Devuelve un array asociativo que contiene estadísticas asociadas con el flujo IP. El array asociativo contiene los siguientes parámetros:

:::hint{type="info"}
Todos los contadores se restablecen cada vez que se llama a PlayFile(). Las claves de audio no se incluirán en el array asociativo si no hay audio en el flujo.
:::

- `Tasa de bits` <font color="#704ae0">int</font>: La tasa de bits del video
- `NumDisplayed` <font color="#704ae0">int</font>: El número de fotogramas de video mostrados. Esto se basa en la frecuencia de actualización del monitor.
- `NumUnderflowed` <font color="#704ae0">int</font>: El número de veces que el FIFO de video tuvo un subdesbordamiento. Esto normalmente indica que el [tamaño del búfer](docId:0Tioy9PJdGG4G25yGBnib) debe aumentarse.
- `NumDecodeErrors` <font color="#704ae0">int</font>: El número de fotogramas de video con errores de decodificación
- `NumDecoded` <font color="#704ae0">int</font>: El número total de fotogramas de video decodificados
- `NumAudioDecoded` <font color="#704ae0">int</font>: El número total de fotogramas de audio decodificados
- `NumAudioDecodeErrors` <font color="#704ae0">int</font>: El número de fotogramas de audio con errores de decodificación
- `NumAudioDummy` <font color="#704ae0">int</font>: El número total de fotogramas de audio faltantes. Este valor se incrementará cuando falte un fotograma de audio o una marca de tiempo sea incorrecta. A menudo se registrarán un par de fotogramas cuando comience la transmisión.
- `NumAudioUnderflows` <font color="#704ae0">int</font>: El número de veces que el FIFO de audio tuvo un subdesbordamiento. Esto normalmente indica que el [tamaño del búfer](docId:0Tioy9PJdGG4G25yGBnib) debe aumentarse.
- `FotogramasPorSegundo` <font color="#704ae0">int</font>: La velocidad de fotogramas del video (en fotogramas por segundo)
- `Vídeo entrelazado` <font color="#704ae0">int</font>: Indica si los fotogramas de video son entrelazados o progresivos
- `HardwareDecode` <font color="#704ae0">bool</font>:  Indica si el reproductor está utilizando aceleración por hardware o no. Esto siempre es verdadero para los reproductores Series 4, pero los reproductores Series 5 pueden informar falso si el reproductor no puede usar aceleración por hardware para el medio. La decodificación por software no se recomienda y solo se utiliza cuando el reproductor no puede usar aceleración por hardware para un archivo multimedia.

:::hint{type="info"}
Tenga en cuenta que GetStreamStatistics() solo devuelve datos válidos después de que el evento PLAYING se haya enviado a un script.
:::

**GetCrc() como entero**

Devuelve el CRC de las señales Y y Cb como un único entero. Este método permite al script comparar dos momentos en la salida de la ventana de video: si los valores devueltos difieren, entonces la salida no es idéntica.

**SetPreferredVideo(description As String) As Boolean**

Selecciona un flujo de video de la entrada de video según los parámetros de la cadena pasada.

**SetPreferredAudio(descripción As String) As Boolean**

Selecciona un flujo de audio de la entrada de video según los parámetros de la cadena pasada.

**SetPreferredCaptions(description As String) As Boolean**

Selecciona un flujo de datos de la entrada de video según los parámetros de la cadena pasada.

**SetOpacity(opacity As Integer) As Boolean**

El rango de opacidades va de 0 a 255 (totalmente transparente a totalmente opaco).

## ifMediaTransport

**PlayFile(source As Object) As Boolean**

Reproduce un archivo de video o una entrada HDMI. Para reproducir un archivo, pase una cadena que especifique el nombre y la ruta del archivo. Para reproducir una entrada HDMI, pase una instancia de *roVideoInput&#x20;*.

**PlayFile(parameters As roAssociativeArray) As Boolean**

Reproduce video utilizando los parámetros pasados como una matriz asociativa. Todas las configuraciones especificadas con este método son transitorias: solo durarán durante la reproducción del archivo/stream. Para especificar configuraciones persistentes, utilice el método `SetProperties()` o los métodos "Set" equivalentes (`SetTransform()`, `SetViewMode()`, etc.).

- `Retardo de audio`: Un retraso controlable por el usuario para el audio en milisegundos.
- `Decodificador`: El decoder\_hint utilizado por el modo mosaico para sugerir qué [decodificador](docId\:f0DvNrbDpvGOzlRVB29gd)  utilizar.
- `EncryptionAlgorithm`: El algoritmo de cifrado que se utilizará para la [reproducción cifrada](docId\:OSZbyfPamAsbWnD6w7JSh) &#x20;
- `Clave de cifrado`: La clave de cifrado que se utilizará para la [reproducción cifrada](docId\:OSZbyfPamAsbWnD6w7JSh) &#x20;
- `FadeInLength`: La duración (en milisegundos) del fundido de entrada al comienzo del medio
- `FadeOutLength`: La duración (en milisegundos) del fundido de salida al final del medio
- `Nombre de archivo`: El nombre/ruta de un archivo que se utilizará para la reproducción
- `LoopMode`: El modo de bucle para la reproducción multimedia. Consulte la entrada de `SetLoopMode()` para obtener una lista de valores aplicables.
- `NoForceCapture`: Un valor booleano. Si es true, la captura de video a DRAM se omite cuando no se requiere conversión de frecuencia de cuadros. Esto reduce la latencia de decodificación a visualización, pero introduce las siguientes limitaciones:
  - Los valores de Transform distintos de "identity" no funcionarán.
  - Es posible que las capturas de pantalla no sean correctas.
- `NoReordering`: Mejora la latencia, pero deshabilita la reproducción de B-slices
- `Precargar`: Inicia la reproducción pausada al comienzo.
- `ProbeString`: Utilizado por BrightSign Author para proporcionar una sugerencia de sondeo que puede acelerar el inicio del stream en algunos casos.
- `StreamFadeIn`: La duración (en milisegundos) del fundido de entrada de audio/video para streams. Esto funciona independientemente de [HWZ "fade"](docId\:PdYtB1wooQwKYvCD5fJmS).
- `Transformar`: La rotación del video. Consulte la entrada de `SetTransform()` para obtener una lista de valores aplicables.
- `Retraso de video`: Un retraso controlable por el usuario para el video en milisegundos.
- `Modo de vista`: El modo de visualización de la ventana de video. Consulte la entrada de `SetViewMode()` para obtener una lista de valores aplicables.
- `ZIndex`: Controla el z-index de las capas de video.

Estos parámetros se utilizan específicamente para streaming:

- `AudioFifoSize`: Establece el tamaño de FIFO de audio (ACDB).
- `StreamBufferSize`: Tamaño del búfer de entrada de demux (en bytes).
- `StreamJitter`: El umbral de jitter para el stream en milisegundos. Si la temporización de los paquetes entrantes supera este valor, entonces el STC del stream se volverá a centrar para mantenerse sincronizado.
- `LatenciaDeTransmisión`: La cantidad de desviación (en milisegundos) respecto al valor de latencia predeterminado: por ejemplo, un valor de -500 reducirá la latencia en medio segundo; un valor de 500 aumentará la latencia en medio segundo; y un valor de 0 especificará la latencia predeterminada. Especificar un valor negativo no cambiará el tamaño del búfer; en su lugar, dará al búfer menos tiempo para llenarse antes de que comience la reproducción. Los valores utilizables se extienden aproximadamente hasta -750, aunque este valor puede diferir según el entorno de red. Reducir demasiado la latencia provocará interrupciones evidentes en la reproducción.
- `StreamLowLatency`: Modo de baja latencia para streams RTSP. Establecer este parámetro en True logrará la menor latencia posible para un stream, pero con una tasa de bits máxima reducida.
- `StreamMaxBitrate`: Establece la tasa de bits máxima permitida (en bytes) para la reproducción adaptativa (HLS).
- `Intervalo de sondeo de transmisión`: Proporciona un control preciso de la frecuencia con la que se sondean los streams (se verifica si se congelan)
- `StreamProbe`: El tipo de sondeo del stream. Este parámetro puede establecerse en "deep" (para incluir dimensiones de video, frecuencia de muestreo de audio, etc.) o "shallow".
- `StreamTimeout`: Detiene la búsqueda del stream después de este período de tiempo (en milisegundos).
- `StreamTrace`: Activa la depuración del stream
- `StreamUsePcrClock`: Utiliza el PCR recuperado como base de tiempo para protocolos de stream no reconocidos. Esto debe seleccionarse cuando se utiliza un componente externo de GStreamer donde los PCR llegan en el momento correcto de manera similar a RTP o UDP.
- `URL`: La URL del stream de video que se utilizará para la reproducción
- `VideoFifoSize`: Establece el tamaño FIFO del video (VCDB).

Estos parámetros son solo para MJPEG:

- `Escala de grises`: Booleano. Establece el stream MJPEG en escala de grises.
- `Rotar`: 0, 90, 180 o 270 grados. Si es posible, utilice `Transformar` en su lugar.

Estos parámetros se utilizan para establecer el valor de keying del video (consulte la entrada [EstablecerValorDeKeying()](docId\:OSZbyfPamAsbWnD6w7JSh) para obtener más detalles)

- `CbKey`
- `CrKey`
- `LumaKey`

Estos parámetros se utilizan para [reproducir video cifrado](docId\:OSZbyfPamAsbWnD6w7JSh):

- `EncryptionAlgorithm`
- `Clave de cifrado`

Estos parámetros se utilizan para analizar [streams preferidos](docId\:OSZbyfPamAsbWnD6w7JSh):

- `Audio preferido`
- `Subtítulos preferidos`
- `VídeoPreferido`

Estos parámetros se utilizan junto con el objeto [roSyncManager](docId\:YtmejVa-nfNTUfLxDTnEW) para sincronizar la reproducción:

- `SyncDomain`
- `SyncId`
- `SyncIsoTimestamp`

Estos parámetros se utilizan para la reproducción [multipantalla](docId\:OSZbyfPamAsbWnD6w7JSh) :

- `Altura de múltiples pantallas`
- `AnchoMultiventana`
- `MultiscreenX`
- `MultiscreenY`
- `Altura de origen`
- `Ancho de origen`
- `SourceX`
- `SourceY`

**DropErrorFrames() As Boolean**

Configura si se deben mostrar los frames con errores o descartarlos (lo que puede provocar pausas). De forma predeterminada, estos errores se muestran en reproductores Series 4 y anteriores. En reproductores Series 5 y posteriores, los errores están ocultos de forma predeterminada. El rendimiento de la ocultación de errores (extrapolación entre frames correctos) varía entre plataformas. Este método está disponible a partir de BOS 9.1.137.

**SetProperties(parameters As roAssociativeArray) As Boolean&#x20;**

Establece propiedades persistentes para la reproducción de video. Estas propiedades pueden reemplazarse temporalmente mediante los parámetros en una llamada a `PlayFile()` . Consulte la entrada de [PlayFile()](docId\:OSZbyfPamAsbWnD6w7JSh) para obtener una lista de los parámetros disponibles.

**GetProperties() As roAssociativeArray**

Devuelve las propiedades actuales de reproducción de video como un arreglo asociativo. Consulte la entrada de [PlayFile()](docId\:OSZbyfPamAsbWnD6w7JSh) para obtener una descripción de los parámetros.

**SetPropertiesString(parameters As String) As Boolean**

Establece propiedades persistentes para la reproducción de video mediante una lista separada por comas. Estas propiedades pueden reemplazarse temporalmente mediante los parámetros en una llamada a `PlayFile()` . Consulte la entrada de [PlayFile()](docId\:OSZbyfPamAsbWnD6w7JSh) para obtener una lista de los parámetros disponibles.

**Ejemplo**

:::BlockQuote
vp = CreateObject("roVideoPlayer")
vp.SetPropertiesString("Transform=rot90,StreamLowLatency=true")&#x20;
:::

**GetPropertiesString() As String**

Devuelve las propiedades actuales de reproducción de video como una cadena (p. ej., `"<clave>=<valor>, <clave>=<valor>"`). Consulte la entrada de [PlayFile()](docId\:OSZbyfPamAsbWnD6w7JSh) para obtener una descripción de los parámetros.

**SetPlaybackSpeed(speed como Float) como Boolean**

Modula la velocidad de reproducción del video, utilizando el valor float 1.0 como velocidad de reproducción estándar. Para avanzar rápidamente el video, pase un valor mayor que 1.0; para rebobinar el video, pase un valor negativo. Un valor entre 0 y 1.0 reproducirá el video en cámara lenta.

**PreloadFile(parameters As roAssociativeArray) As Boolean**

Consulte la entrada de [PlayFile()](docId\:OSZbyfPamAsbWnD6w7JSh) para obtener una descripción de los parámetros.

**Play() como booleano**

Reproduce el archivo o flujo actualmente cargado.

**Stop() como booleano**

Detiene la reproducción del archivo o flujo actualmente cargado.

**StopClear() As Boolean**

Detiene la reproducción de video y borra el archivo o flujo actualmente cargado.

**Pausa(parameters As roAssociativeArray) As Boolean**

Pausa el archivo de video o flujo. Este método acepta un arreglo asociativo opcional que contiene el siguiente parámetro:

- `SyncIsoTimeStamp`: La marca de tiempo para pausar video sincronizado. Este valor es proporcionado por el método `roSyncManager.Synchronize()` en la unidad líder y el método `roSyncManagerEvent.GetIsoTimeStamp()` en la(s) unidad(es) seguidora(s).

**Resume(parameters As roAssociativeArray) As Boolean**

Reanuda un archivo de video o flujo pausado. Este método acepta un arreglo asociativo opcional que contiene el siguiente parámetro:

- SyncIsoTimeStamp: La marca de tiempo para reanudar video sincronizado. Este valor es proporcionado por el método `roSyncManager.Synchronize()` en la unidad líder y el método `roSyncManagerEvent.GetIsoTimeStamp()` en la(s) unidad(es) seguidora(s).&#x20;

**SetLoopMode(mode As Dynamic) As Boolean&#x20;**

Especifica el modo de bucle para la reproducción multimedia. Este método también puede aceptar una de las siguientes cadenas:

- `"NoLoop"`: El bucle está deshabilitado en todos los casos. Este es el comportamiento predeterminado, que permite la reproducción de múltiples archivos en una lista de reproducción, con interrupciones perceptibles entre el final y el inicio del archivo.
- `"AlwaysLoop"`: El video se reproduce en bucle sin interrupciones si es posible; de lo contrario, se reproduce en bucle con interrupciones.
- `"SeamlessLoopOrNotAtAll"`: El video se reproduce en bucle sin interrupciones si es posible; de lo contrario, no se reproduce en bucle en absoluto.
- `"LoopButNotSeamless"`: El video se reproduce en bucle con interrupciones.

Como alternativa, este método puede aceptar un argumento Boolean:&#x20;

- `verdadero`: Un único archivo multimedia se reproducirá en bucle sin interrupciones si es posible. Si el archivo de video no puede reproducirse en bucle sin interrupciones, entonces el video se reproducirá en bucle con interrupciones.&#x20;
- `falso`: El bucle está deshabilitado en todos los casos. Este es el comportamiento predeterminado, que permite la reproducción de múltiples archivos en una lista de reproducción, con pausas perceptibles entre el final y el inicio del archivo.

:::hint{type="info"}
Los eventos Media End solo se envían si el bucle continuo está deshabilitado, o si el modo está configurado en `"SeamlessLoopOrNotAtAll"` y el archivo no puede reproducirse en bucle continuo.
:::

**AddEvent(user\_data As Integer, time\_in\_ms As Integer) As Boolean**

Agrega un desencadenador que generará un `roVideoEvent` cuando alcance el tiempo especificado. Los datos del usuario se pasarán con el evento y se pueden recuperar usando el método `roVideoEvent.GetData()` Consulte la sección [Eventos de código de tiempo de video](docId\:OSZbyfPamAsbWnD6w7JSh) a continuación para obtener más detalles.

**ClearEvents() As Boolean**

Elimina todos los eventos de código de tiempo que se hayan agregado mediante el método `AddEvent()` .

**GetEvents() As roArray**

Devuelve un arreglo de eventos de código de tiempo agregados a la instancia de *roVideoPlayer&#x20;*&#x6D;ediante el método `AddEvent()` . Cada entrada del arreglo consiste en un arreglo asociativo con los siguientes valores:

- `id`: El `user_data` del evento (como un Integer)
- `marca de tiempo`: La marca de tiempo (en milisegundos)

**PlayEx(a As Object) As Boolean**

Este objeto ha quedado obsoleto. Sugerimos usar el método `PlayFile()` para la reproducción de video.

**GetPlaybackPosition() como entero**

Devuelve la cantidad de tiempo que el archivo actual o flujo IP ha estado reproduciéndose (en milisegundos). Si `SetLoopMode()` está configurado como true, el valor no se restablecerá cuando la reproducción vuelva al inicio. Si la reproducción en bucle o el flujo IP continúan sin interrupción durante aproximadamente 25 días, el valor se desbordará y se volverá negativo.

**GetDuration() como entero**

Devuelve la duración total de reproducción (en milisegundos) del archivo actual.

**Seek(position As Integer) As Boolean**

Busca la posición especificada en el archivo de audio/video (medida en milisegundos). Si el archivo se está reproduciendo actualmente, continuará reproduciéndose; de lo contrario, permanecerá en pausa después de la búsqueda. Este método solo admite el contenedor de video MP4/MOV; todos los formatos de audio estándar son compatibles.

**SetFade(parameters As roAssociativeArray) As Boolean**

Atenúa tanto el video como el audio cuando se llama al método. Cuando se completa la atenuación, un objeto `roVideoEvent` con el valor `18 – Desvanecimiento` se publicará en el puerto de mensajes. Este método acepta un arreglo asociativo, que actualmente solo puede contener un parámetro:

- `FadeOutLength`: La duración de tiempo (en milisegundos) durante la cual el audio/video se atenúa.

**ProbeFile(filename As String) As roAssociativeArray**

Devuelve un arreglo asociativo que contiene metadatos sobre el archivo de video especificado. Para recuperar metadatos sobre un archivo que se está reproduciendo actualmente, use el método `GetStreamInfo()` en su lugar. El arreglo asociativo devuelto puede contener los siguientes parámetros:

- `Fuente`: El URI del archivo
- `Encapsulación`: La encapsulación del video
- `Formato de audio`: El formato del archivo de audio
- `AudioSampleRate`: La frecuencia de muestreo de audio (en hercios)
- `Cantidad de canales de audio`: El número de canales de audio
- `Duración del audio`: La duración de la pista de audio (en milisegundos)
- `Formato de video`: El formato del archivo de video
- `Profundidad de color de video`: La profundidad de color del video (en bits)
- `Ancho del video`: El ancho del video (en píxeles)
- `Altura del video`: La altura del video (en píxeles)
- `Relación de aspecto del video`: La relación de aspecto del video
- `Duración del video`: La duración del video (en milisegundos)

## ifZorderControl

**ToFront() como booleano**

Coloca la capa de video de la instancia *roVideoPlayer&#x20;*&#x64;elante del otro reproductor de video.

**ToBack() As Boolean**

Coloca la capa de video de la instancia *roVideoPlayer &#x20;*&#x64;etrás del otro reproductor de video.

:::hint{type="info"}
Esta función no está disponible en los reproductores HD/LS, que solo admiten un único reproductor de video. Para obtener más información sobre el orden de las capas de video en relación con la capa gráfica, consulte la entrada *roVideoMode.SetGraphicsZOrder()&#x20;*.
:::

## ifAudioControl

Consult&#x65;*&#xA0;*[roAudioPlayer](docId\:uahm5F-PtkhyhasSdolkL) para obtener documentación sobre *ifAudioControl*.

## ifAudioAuxControl

**MapStereoOutputAux(mapping As Integer) As Boolean**

**SetVolumeAux(a As Integer) As Boolean**

**SetChannelVolumesAux(channel\_mask As Integer, b As Integer) As Boolean&#xA0;**

**SetAudioOutputAux(audio\_output As Integer) As Boolean&#xA0;**

**SetAudioModeAux(audio\_mode As Integer) As Boolean**

**SetAudioStreamAux(stream\_index As Integer) As Boolean**

**SetUsbAudioPortAux(a As Integer) As Boolean**

## ifUserData

**EstablecerDatosUsuario(user\_data como objeto)**

Establece los datos de usuario que se devolverán cuando se generen eventos.

**GetUserData() como objeto**

Devuelve los datos de usuario que se establecieron previamente mediante `SetUserData()`. Devolverá Invalid si no se han establecido datos.

## ifIdentity

**GetIdentity() As Integer**

:::hint{type="info"}
La interfaz *siIdentidad&#x20;*&#x68;a quedado obsoleta. Recomendamos utilizar la interfaz *ifUserData &#x20;*&#x65;n su lugar.
:::

## ifMessagePort

**SetPort(port As roMessagePort)**

Publica mensajes de tipo *roVideoEvent&#x20;*&#x65;n el puerto de mensajes adjunto.

## Eventos de Timecode 

Puede utilizar el método `AddEvent()` para agregar activadores para eventos *roVideoEvent* , que generarán el valor `12 – Golpe de código de tiempo` en los tiempos de milisegundos especificados en un archivo de video. Utilice el método *roVideoEvent.GetData()&#x20;*&#x70;ara recuperar los datos de usuario pasados con `AddEvent()`.

El siguiente script de ejemplo utiliza eventos de timecode. El script imprime 2, 5 y 10 a los 2 segundos, 5 segundos y 10 segundos del video, respectivamente. El "msg" se aproxima a una precisión de fotograma.

:::CodeblockTabs
Example

```typescript
v = CreateObject("roVideoPlayer")
p = CreateObject("roMessagePort")
v.SetPort(p)
 
ok = v.AddEvent(2, 2000) ' Add timed events to video
ok = v.AddEvent(5, 5000)
ok = v.AddEvent(10, 10000)
ok = v.AddEvent(100, 100000)
ok = v.PlayFile("SD:/C5_d5_phil.vob")
 
waitloop:
msg = Wait(0,p) ' Wait for all events
if msg.GetInt() = 8 then stop ' End of file
if msg.GetInt() <> 12 goto waitloop      ' I only care about time events
print msg.GetData() ' Print out index when the time event happens
goto waitloop
```
:::

## Reproducción de video en múltiples pantallas 

Los métodos `PreloadFile()` y `PlayFile()` pueden utilizarse junto con *roSyncManager&#x20;*&#x20; para extender una imagen a través de múltiples pantallas en una matriz o mostrar partes de un video en ventanas.

El siguiente script de ejemplo utiliza el método `PreloadFile()` para la visualización en múltiples pantallas:

:::CodeblockTabs
Example

```typescript
v=CreateObject("roVideoPlayer")
a=CreateObject("roAssociativeArray")
a["Filename"] = "test.ts"
a["MultiscreenWidth"] = 3
a["MultiscreenHeight"] = 2
a["MultiscreenX"] = 0
a["MultiscreenY"] = 0
v.PreloadFile(a)
...
...
v.Play()
```
:::

Los valores de `AnchoMultiventana` y `Altura de múltiples pantallas` especifican el ancho y la altura de la matriz de múltiples pantallas. Por ejemplo, 3x2 sería 3 pantallas de ancho y 2 de alto. `MultiscreenX` y `MultiscreenY` especifican la posición de la pantalla actual dentro de esa matriz. En el caso anterior, en promedio solo se dibuja 1/6 del video en cada pantalla (aunque el modo de vista sigue aplicándose), por lo que, dependiendo de la forma del video, puede tener barras negras en las pantallas laterales. De esta manera, es relativamente sencillo para un reproductor de video mostrar parte de una imagen según su posición en la matriz multipantalla.

`PreloadFile()` realiza todo el trabajo preliminar para prepararse para reproducir el clip de video especificado, incluida la detención de la reproducción del archivo de video anterior. La llamada a "Play" inicia la reproducción. Esto es útil para sincronizar video entre múltiples reproductores, ya que todos pueden prepararse para reproducirse y luego comenzarán a reproducirse inmediatamente cuando se emita el comando "Play". Esto reduce las latencias de sincronización.

Los siguientes son los valores predeterminados de los parámetros:

- `AnchoMultiventana`= 1
- `Altura de múltiples pantallas`= 1
- `MultiscreenX`= 0
- `MultiscreenY`= 0

Este script usa `PlayFile()` para mostrar una parte de un video. Esto muestra una porción en ventana del archivo de video *test.ts* comenzando en las coordenadas SourceX, SourceY, y con un tamaño de SourceWidth por SourceHeight. La configuración de `SetViewMode()` sigue respetándose como si se estuviera mostrando el archivo completo.

:::CodeblockTabs
Example

```typescript
v=CreateObject("roVideoPlayer")
a=CreateObject("roAssociativeArray")
a["Filename"] = "test.ts"
a["SourceX"] = 100
a["SourceY"] = 100
a["SourceWidth"] = 1000
a["SourceHeight"] = 500
v.PlayFile(a)
```
:::

### Multipantalla con modo vertical

Para crear una matriz multipantalla en modo vertical, llame a `SetTransform("rot90")` o `SetTransform("rot270")` antes de llamar a `PlayFile()`.

Este script crea una pantalla multipantalla en modo vertical de 2x1:

:::CodeblockTabs
Example

```typescript
v1=CreateObject("roVideoPlayer")
v1.SetViewMode("LetterboxedAndCentered")
r=CreateObject("roRectangle", 0, 0, 1920, 1080)
v1.SetRectangle(r)
v1.SetTransform("rot90")

aa1=CreateObject("roAssociativeArray")
aa1.MultiscreenWidth = 2
aa1.MultiscreenHeight = 1
aa1.MultiscreenX = 1
aa1.MultiscreenY = 0
aa1.Filename = "example.mp4"
v1.PlayFile(aa1)
```
:::

## Escaneo de canales RF

El método `PlayFile()` puede utilizarse para funcionalidades de escaneo y manejo de canales similares a *roChannelManager*. Para usar `PlayFile()` para el escaneo de canales, pase un *roAssociativeArray&#x20;*&#x63;on los siguientes parámetros posibles:

- VirtualChannel
- RfChannel
- SpectralInversion
  - INVERSION\_ON
  - INVERSION\_OFF
  - INVERSION\_AUTO
- ModulationType
  - QAM\_64
  - QAM\_256
  - QAM\_AUTO
  - 8VSB
- VideoCodec
  - MPEG1-Video
  - MPEG2-Video
  - MPEG4Part2-Video
  - H264
  - H264-SVC
  - H264-MVCAVSC
- AudioCodec
  - MPEG-Audio
  - AAC
  - AAC+
  - AC3AC3+DTS
- VideoPid
- AudioPid
- PcrPid

Los parámetros `Canal virtual` y `RfChannel` deben estar presentes para que `PlayFile()` explore correctamente. Si especifica solo estos parámetros, el reproductor explorará el canal RF para detectar una señal QAM/ATSC e intentará recuperar el canal virtual especificado de los resultados. Los resultados de esta acción se almacenan en caché para que las llamadas posteriores a `PlayFile()` requieran mucho menos tiempo. Proporcionar los parámetros `SpectralInversion` y/o `ModulationType` acelerará aún más el proceso de exploración.

Si se proporcionan todos los parámetros, no se requiere exploración y el reproductor puede sintonizar el canal inmediatamente. Si falta uno o más de los parámetros opcionales, el reproductor debe analizar los metadatos del flujo de transporte para encontrar los valores apropiados para los parámetros `Canal virtual` y `RfChannel` proporcionados.

## Descifrado de video 

El objeto *roVideoPlayer&#x20;*&#x20;puede utilizarse para reproducir archivos o flujos de audio/video que hayan sido cifrados usando AES. 

:::hint{type="info"}
El descifrado de streaming requiere la versión de firmware 6.2.x y actualmente solo es compatible con el protocolo UDP y el protocolo HTTP (cuando HTTP se combina con un flujo de transporte MPEG2). Si utiliza un flujo de transporte MPEG2 multicast UDP, uno de los flujos elementales debe proporcionar el PCR al reproductor.
:::

La matriz asociativa pasada al método `PlayFile()` puede aceptar dos parámetros para el descifrado de archivos:

- `EncryptionAlgorithm`: El algoritmo de cifrado del archivo. Las siguientes son las opciones actuales:
  - "AesCtr": El algoritmo AES en modo CTR
  - "AesCtrHmac": El algoritmo AES en modo CTR con HMAC
  - "TsAesEcb": El algoritmo AES en modo ECB (por ejemplo, con un Harmonic Prostream). Este algoritmo se utiliza para cifrado/descifrado de streaming.
  - "TsAesEcbRrt": El algoritmo AES en modo ECB (por ejemplo, con un Harmonic Prostream) con terminación residual trasera. Este algoritmo se utiliza para cifrado/descifrado de streaming. Disponible desde la versión 9.1.164 en todos los reproductores excepto LS3, HD3, HS3, HO3, XD3, XT3, LS4, HS4 y HD4.
  - "TsAesCbcRbt": El algoritmo AES en modo CBC con terminación de bloque residual. Este algoritmo se utiliza para cifrado/descifrado de streaming.
  - "TsAesCbcCbt": El algoritmo AES en modo CBC con terminación de bloque claro. Este algoritmo se utiliza para cifrado/descifrado de streaming.
- `Clave de cifrado`: Una matriz de bytes compuesta por 128 bits de clave. Si el algoritmo de cifrado es AES-CTR o AES-CTR-HMAC, a esto le siguen 128 bits de IV.

:::hint{type="info"}
Póngase en contacto con *support\@brightsign.biz* para obtener más información sobre cómo generar una clave para ofuscación y almacenarla en el reproductor.
:::

:::hint{type="warning"}
El reproductor de video ya no acepta claves de cifrado AES "\{A|A}" (es decir, donde los 64 bits superiores e inferiores de la clave son idénticos).
:::

:::CodeblockTabs
Example

```typescript
v = CreateObject("roVideoPlayer")
aa=CreateObject("roAssociativeArray")
aa.filename = "wall-sync2.mp4"
aa.encryptionalgorithm = "AesCtr"
aa.encryptionkey = CreateObject("roByteArray")
aa.encryptionkey.fromhexstring("01030507090b0d0f00020406080a0c0e00000000000000000000000000000000")


v.PlayFile(aa)
```
:::

## Flujos preferidos

Si varios flujos de video, audio o datos están encapsulados en la entrada de video, puede utilizar los métodos `SetPreferredVideo()`, `SetPreferredAudio()` y `SetPreferredCaptions()` para determinar qué flujo usar. Por ejemplo, si un video puede contener pistas de audio en inglés y español, puede llamar a `SetPreferredAudio()` para especificar que se debe reproducir la pista en español si existe, y que el video use inglés de forma predeterminada en caso contrario.

Los flujos preferidos se eligen haciendo coincidir los patrones de las cadenas pasadas con la descripción textual del flujo:

1. La cadena pasada es una lista de plantillas separadas por punto y coma.
2. Cada plantilla es una lista de patrones separados por comas.
3. Cada patrón es un par `[field_name]=[field_value]` que se compara directamente con la descripción del flujo.

**SetPreferredVideo(description As String) As Boolean**

Cada plantilla en la cadena de descripción de video pasada puede contener los siguientes patrones:

- `pid=[integer]`: El identificador de paquete (PID) del flujo de video que desea mostrar
- `program=[entero]`: El número de programa del flujo de video
- `codec=[video_codec]`: El códec de video preferido, que puede ser cualquiera de los siguientes:
  - `MPEG1`
  - `MPEG2`
  - `MPEG4Part2`
  - `H263`
  - `H264`
  - `VC1`
  - `H265`
- `width=[integer]`: El ancho de video preferido
- `altura=[entero]`: La altura de video preferida
- `aspect=[float(x.yy)]`: La relación de aspecto preferida del flujo de video como un número de punto flotante con dos dígitos fraccionarios.
- `profundidaddecolor=[entero]`: La profundidad de color preferida del video.

Ejemplo:

:::BlockQuote
"pid=7680, codec=H264, width=1280, height=720, aspect=1.78, colordepth=8;"
:::

**SetPreferredAudio(descripción As String) As Boolean**

Cada plantilla en la cadena de descripción pasada puede contener los siguientes patrones:

- `pid=[integer]`: El identificador de paquete (PID) del flujo de audio que desea reproducir
- `program=[entero]`: El número de programa del flujo de audio
- `codec=[audio_codec]`: El códec de audio preferido, que puede ser cualquiera de los siguientes:
  - `MPEG`
  - `MP3`
  - `AAC`
  - `AAC-PLUS`
  - `AC3`
  - `AC3-PLUS`
  - `DTS`
  - `PCM`
  - `FLAC`
  - `Vorbis`
- `channels=[entero]`: El número preferido de canales de audio (de 1 a 8)
- `freq=[frecuencia]`: La frecuencia de muestreo preferida de la pista de audio, que puede ser cualquiera de las siguientes:
  - `32000`
  - `44100`&#x20;
  - `48000`
- `idioma=[language]`: Un código que determina el idioma preferido de la pista de audio (p. ej. eng, spa). Los códigos de idioma están especificados en el estándar ISO 639-2.
- `type=[audio_type]`: El tipo de audio preferido, que puede ser uno de los siguientes:
  - `Audio principal`
  - `Efectos limpios`
  - `Personas con discapacidad auditiva`
  - `Comentarios para personas con discapacidad visual`

Ejemplo:

:::BlockQuote
"pid=4192, codec=AC3, channels=5, freq=48000, lang=eng, type=Main audio;"
:::

**SetPreferredCaptions(description As String) As Boolean**

Cada plantilla en la cadena de descripción pasada puede contener los siguientes patrones:

- `pid=[integer]`: El identificador de paquete (PID) del flujo de subtítulos que desea reproducir
- `type=[subtitle_type]`: El estándar de codificación de los subtítulos. Este valor puede ser uno de los siguientes:
  - `CEA708`: Si el estándar CEA-708 no está presente, subtitle\_type usará por defecto CEA-608 (si está presente).
  - `CEA608`
  - `DVB`
- `idioma=[language]`: Un código que determina el idioma preferido de los subtítulos (p. ej. eng, spa). Los códigos de idioma están especificados en el estándar ISO 639-2.
- `service=[integer]`: El número de servicio preferido del flujo de subtítulos

Ejemplo:

:::BlockQuote
"pid=0, type=Cea708, lang=eng service=1;"
:::

### Reglas de coincidencia de patrones

Tenga en cuenta las siguientes reglas al hacer coincidir plantillas con descripciones de flujos de video, audio o subtítulos:

- Para que una plantilla coincida con una descripción de flujo, cada patrón dentro de la plantilla debe coincidir.
- Se utilizará la primera plantilla listada que coincida con la descripción del flujo (si existe alguna).
- Una cadena de plantilla vacía coincidirá con cualquier descripción de flujo.
- Todas las comparaciones de valores no distinguen entre mayúsculas y minúsculas.
- Los valores numéricos deben coincidir exactamente con la descripción del flujo (sin ceros a la izquierda). Por ejemplo, el patrón `pid=016` nunca coincidirá con el valor PID del flujo de 16.
- Para indicar negación lógica, aplique el signo de exclamación "!" al inicio de un patrón. Por ejemplo, especificar `SetPreferredVideo("!codec=H265"`) coincidirá solo con flujos que no estén codificados usando H.265.
- Aplique el símbolo de mayor que ">" antes de un entero para indicar que, para una coincidencia exitosa, el valor en la descripción del flujo debe ser *mayor que&#x20;*&#x65;l valor que sigue al símbolo. Por ejemplo, especificar `SetPreferredVideo("width=<1921,height=<1081"`) coincidirá solo con videos que no sean mayores que full-HD.
- Aplique el símbolo de menor que "\<" antes de un entero para indicar que, para una coincidencia exitosa, el valor en la descripción del flujo debe ser *menor que&#x20;*&#x65;l valor que sigue al símbolo.

### Ejemplos de coincidencia de patrones

Los siguientes ejemplos ilustran algunos de los comportamientos de coincidencia de patrones descritos anteriormente:

- La siguiente lista de plantillas contiene tres patrones: `lang=eng`, `lang=spa`, y una plantilla vacía. El primer patrón especifica un canal en inglés; si el canal en inglés no existe, el segundo patrón especifica un canal en español. El tercer patrón especifica cualquier otro canal si los dos primeros no existen (la plantilla vacía coincide con cualquier cosa).

:::BlockQuote
SetPreferredAudio("lang=eng;lang=spa;;")
:::

- Dado que la siguiente lista de plantillas está vacía, no se especifican subtítulos. Esto puede usarse para deshabilitar completamente los subtítulos.

:::BlockQuote
SetPreferredCaptions("")
:::

- La siguiente lista de plantillas contiene una plantilla vacía. Dado que una plantilla vacía coincide con cualquier cosa, se reproducirá el primer flujo de video encontrado. Este es el comportamiento predeterminado de todos los atributos.

:::BlockQuote
SetPreferredVideo(";")
:::

- La siguiente lista de plantillas especifica un flujo de audio de 48KHz si existe uno; de lo contrario, no se reproducirá ningún flujo de audio. Observe que la lista no termina correctamente con un punto y coma; en este caso, el punto y coma se agrega implícitamente.

:::BlockQuote
SetPreferredAudio("freq=48000")
:::

- La siguiente lista de plantillas contiene dos plantillas. Tenga en cuenta que todos los patrones dentro de una plantilla deben coincidir con la descripción del flujo para que toda la plantilla coincida. En este ejemplo, se prefiere una pista en inglés codificada con AAC; una pista en inglés codificada con MP3 se designa como la segunda opción; y se elegirá cualquier pista si ninguna de las plantillas coincide.

:::BlockQuote
SetPreferredAudio("codec=aac,lang=eng;codec=mp3,lang=eng;;")
:::

## Ejemplos

El siguiente script selecciona un programa de un video y establece pistas de video y audio preferidas para la reproducción:&#x20;

:::CodeblockTabs
Example

```typescript
v1 = CreateObject("roVideoPlayer")
v1.PlayFile("example.ts")
si = v1.GetStreamInfo()


' Pick the program
prog = si.Programs[2].ProgramId
v1 = CreateObject("roVideoPlayer")

' Select the program
v1.SetPreferredVideo("prog=" + prog.ToStr() + ";")
v1.SetPreferredAudio("prog=" + prog.ToStr() + ";")

' Play the stream/file
v1.PlayFile("example.ts")
```
:::

Este script habilita solo HDMI-4 a 3840x2160x60p:

:::CodeblockTabs
Example

```typescript
mode=CreateObject("roVideoMode")
sm = CreateObject("roArray", 1, 1)
sm[0] = CreateObject("roAssociativeArray")
sm[0].name = "HDMI-4"
sm[0].video_mode="3840x2160x60p"
sm[0].transform="normal"
sm[0].display_x=0
sm[0].display_y=0
sm[0].enabled=true
mode.SetScreenModes(sm)

' Play full screen video with audio going to HDMI-4
rect = createobject("roRectangle",0,0,3840,2160)
output = createObject("roAudioOutput", "hdmi:4")
vplayer = createobject("roVideoPlayer")
vplayer.setrectangle(rect)
vplayer.setcompressedaudiooutputs(output)
vplayer.playfile("Example.mp4")
```
:::

