---
title: roSyncManager
slug: develop/es/rosyncmanager
docTags: 
createdAt: 2025-03-26T17:27:03.001Z
---

Este objeto proporciona capacidades de sincronización para videowalls y otras implementaciones que requieren una interacción estrechamente calibrada entre reproductores. roSyncManager maneja el tráfico de red para la sincronización líder/seguidor. Al usar Sync Manager en múltiples reproductores BrightSign, PTP debe habilitarse en los reproductores mediante sus registros, lo cual es una operación independiente (consulte el ejemplo y el texto correspondiente a continuación). PTP comparte efectivamente un reloj común entre todos los reproductores. Si solo se sincroniza en un único reproductor BrightSign, entonces PTP no es necesario, ya que el reloj local del reproductor BrightSign es común para los objetos que participan en la sincronización. Se permiten múltiples grupos de sincronización en la misma red local e incluso dentro del mismo videowall.

El objeto roSyncManager actualmente admite sincronización de video, imagen y ticker de desplazamiento. Los objetos roVideoPlayer y roImagePlayer dependen de los valores generados por los métodos ifSyncManager y roSyncManagerEvent para sincronizar la reproducción, mientras que el objeto roTextWidget simplemente requiere el nombre de dominio de la instancia de roSyncManager.

A partir de la versión de firmware 7.0, roSyncManager también admite sincronización Genlock (VSync con precisión de fotograma) a través de Ethernet. Para habilitar Genlock en un dominio de roSyncManager, pase el nombre de dominio al método roVideoMode.SetSyncDomain(). De lo contrario, el proceso para sincronizar la reproducción de video, imagen y ticker es el mismo.

:::hint{type="info"}
El objeto roSyncManager admite sincronización únicamente a través de redes Ethernet.
:::

Antes de usar roSyncManager en múltiples reproductores BrightSign, deberá establecer todos los reproductores BrightSign dentro del grupo en el mismo valor de dominio PTP. Para hacer esto, use el método roRegistrySection.Write() para establecer la clave `ptp_domain` de la sección “networking” en un valor entre 0 y 127. En general, los cambios en el registro solo surten efecto después de un reinicio, por lo que el servicio de sincronización PTP se iniciará en cada reproductor después de reiniciarse. Cualquier reproductor con el mismo valor de `ptp_domain` terminará teniendo el mismo reloj maestro PTP.

**Ejemplo**

```none
regSec = CreateObject("roRegistrySection", "networking")
regSec.Write("ptp_domain", "0")
regSec.Flush()
 
RebootSystem()
```

El equivalente en JavaScript es [BSSyncManager](docId\:TqFzr6uwOWkNzTqk9bVQ2) .

Creación de objetos: El objeto *roSyncManager&#x20;*&#x73;e crea con un arreglo asociativo que representa un conjunto de parámetros.

```none
CreateObject("roSyncManager", parameters as roAssociativeArray)
```

El arreglo asociativo puede tener los siguientes parámetros:

- `Dominio` <font color="#6554c0">string</font>: Un identificador que se utiliza para distinguir entre diferentes instancias d&#x65;*&#x20;roSyncManager&#x20;*&#x64;entro del mismo grupo de sincronización (es decir, dominio PTP). La cadena predeterminada es "BrightSign". Este parámetro permite que múltiples instancias de *roSyncManager&#x20;*&#x6F;peren al mismo tiempo.
- `MulticastAddress` <font color="#6554c0">string</font>: La dirección multicast a la que se comunican los mensajes de sincronización. La dirección predeterminada es "224.0.126.10".
- `PuertoMulticast `<font color="#6554c0">string</font>: El puerto multicast al que se comunican los mensajes de sincronización. El puerto predeterminado es "1539". 

## ifMessagePort

**SetPort(port As roMessagePort)**

Publica mensajes de tipo *roSyncManagerEvent* en el puerto de mensajes adjunto. Use estos mensajes para sincronizar la reproducción de *roVideoPlayer* y *roImagePlayer* .

## ifSyncManager

**SetAsLeader(leader\_mode As Boolean) As Boolean&#xA0;**

Especifica si la unidad está ejecutando la instancia líder de roSyncManager.

**Sincronizar(identifier As String, ms\_delay As Integer) As Object**

Transmite un mensaje con marca de tiempo a otros reproductores. Este método se utiliza solo en la unidad líder. El mensaje se retransmitirá cada segundo para permitir que las unidades seguidoras que se encienden tarde puedan ponerse al día. El mensaje de red contiene el ID de sincronización, así como el dominio y una marca de tiempo. La marca de tiempo se crea en el momento en que se llama a este método; sin embargo, puede compensarse pasando un valor ms\_delay distinto de cero, lo que permite establecer puntos de sincronización ligeramente en el futuro y dar al cliente suficiente tiempo para cambiar archivos de video y realizar otras acciones. El parámetro identifier permite que el script de la unidad líder pase un nombre de archivo u otro marcador útil a las unidades seguidoras como parte del mensaje de sincronización. Este método devuelve el mensaje que se envía para que el líder pueda acceder a la marca de tiempo. 

El mensaje de sincronización se envía a través de todas las redes disponibles (incluyendo WiFi), pero las unidades seguidoras utilizarán solo el primer mensaje recibido. Los mensajes PTP, que son utilizados por el firmware durante la sincronización, se envían únicamente a través de Ethernet.

:::hint{type="info"}
Debido a que la sincronización puede implicar que las unidades seguidoras busquen ponerse al día con la reproducción de una unidad líder, recomendamos usar el formato de contenedor MOV/MP4 más eficiente al sincronizar archivos de video. Los archivos Transport Stream (MPEG-TS) también son compatibles, pero deben comenzar con una marca de tiempo de presentación (PTS) de 0. Los archivos Program Stream (MPEG-PS) no son compatibles.
:::

Actualmente, hay dos objetos que pueden aceptar parámetros de sincronización: La llamada roVideoPlayer.PlayFile() acepta los parámetros proporcionados por los mensajes SyncManagerEvent, mientras que las llamadas roImagePlayer.DisplayFile() y roImagePlayer.PreloadFile() aceptan `SyncIsoTimestamp` en un array asociativo. Para sincronizar la reproducción de imágenes, un objeto roImagePlayer simplemente retrasará el hilo de transición antes de ejecutar la transición. Si hay una llamada separada para` DisplayFile()`, entonces la transición se cancelará y la imagen se mostrará inmediatamente (como con llamadas no sincronizadas de `DisplayFile()`).

**SetEncryptionEnable(enable As Boolean, key As Dynamic) As Boolean**

Habilita o deshabilita el cifrado de los mensajes de *roSyncManager&#xA0;*&#x61; través de la red. Este método devuelve `verdadero` si se realiza correctamente y `falso` si falla.

La`  clave  `puede especificarse como una cadena o un objeto *roByteArray&#xA0;*. Alternativamente, puede no suministrarse un valor de `clave` , en cuyo caso se utiliza una clave generada pseudoaleatoriamente. Establecer `habilitar` en `falso` y suministrar una `clave` al mismo tiempo hará que este método falle. 

El cifrado está disponible (y habilitado de forma predeterminada) en OS8 y versiones posteriores. Tenga en cuenta el siguiente comportamiento en entornos con versiones mixtas:

- Las unidades follower que tienen el cifrado habilitado pueden ingerir mensajes de sincronización no cifrados desde una unidad líder. Una vez que una unidad follower recibe paquetes cifrados, ya no aceptará paquetes no cifrados de una unidad líder, a menos que el cifrado se deshabilite explícitamente utilizando este método.
- Las unidades follower que tienen el cifrado deshabilitado (o no admiten cifrado) no pueden ingerir mensajes cifrados desde una unidad líder. Por lo tanto, si un grupo de sincronización incluye versiones mixtas de OS, la unidad líder siempre debe tener una versión más antigua de OS que las unidades follower.

**SetEncryptionEnableWithObfuscatedKey(obfuscated\_key As String) As Boolean**

Habilita el cifrado de los mensajes de *roSyncManager&#xA0;*&#x75;tilizando una clave ofuscada. Póngase en contacto con [support@brightsign.biz](mailto\:support@brightsign.biz) para obtener más información sobre cómo generar una clave para la ofuscación y almacenarla en el reproductor.

**GetCurrentConfig() As roAssociativeArray**

Devuelve los parámetros de configuración actuales para la instancia de *roSyncManager&#xA0;*:

- `líder` <font color="#6B21A8">int:</font> Un indicador que indica si la unidad está en modo líder (1) o no (0)
- `ip` <font color="#6B21A8">string: </font> La dirección multicast a la que se comunican los mensajes de sincronización
- `puerto` <font color="#6B21A8">int: </font>El puerto multicast al que se comunican los mensajes de sincronización
- `dominio` <font color="#6B21A8">int</font>: El identificador de dominio utilizado para distinguir entre diferentes instancias d&#x65;*&#xA0;roSyncManager&#xA0;*

## Ejemplo

El siguiente script sincroniza la reproducción de video en las unidades líder y follower:

```javascript
' Create a sync manager with default address and port.
aa1=CreateObject("roAssociativeArray")
aa1.Domain = "BS1"
s=CreateObject("roSyncManager", aa1)
p=CreateObject("roMessagePort")
s.SetPort(p)

' Create a video player - we're going to play a seamlessly looped file
v=CreateObject("roVideoPlayer")
v.SetLoopMode(True)

' THIS SECTION IS ONLY DONE BY THE LEADER
' We're the leader unit - send out a synchronize event saying that we're starting.
' playback 1000ms from now
s.SetLeaderMode(True)
msg = s.Synchronize("Blah1", 1000)

' THIS SECTION IS ONLY DONE BY THE FOLLOWER
' We're a follower unit, and we're sitting waiting for a sync message.
msg=Wait(4000, p)

' EVERYONE DOES THE REST
aa=CreateObject("roAssociativeArray")
aa.Filename = "Text_1.mov"
aa.SyncDomain = msg.GetDomain()
aa.SyncId = msg.GetId()
aa.SyncIsoTimestamp = msg.GetIsoTimestamp()

v.PlayFile(aa)
```

