roSyncManager
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.
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
regSec = CreateObject("roRegistrySection", "networking")
regSec.Write("ptp_domain", "0")
regSec.Flush()
RebootSystem()El equivalente en JavaScript es BSSyncManager .
Creación de objetos: El objeto roSyncManager se crea con un arreglo asociativo que representa un conjunto de parámetros.
CreateObject("roSyncManager", parameters as roAssociativeArray)El arreglo asociativo puede tener los siguientes parámetros:
- Dominio string: Un identificador que se utiliza para distinguir entre diferentes instancias de roSyncManager dentro 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 operen al mismo tiempo.
- MulticastAddress string: La dirección multicast a la que se comunican los mensajes de sincronización. La dirección predeterminada es "224.0.126.10".
- PuertoMulticast string: 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
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.
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 a 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 . 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 utilizando una clave ofuscada. Póngase en contacto con [email protected] 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 :
- líder int: Un indicador que indica si la unidad está en modo líder (1) o no (0)
- ip string: La dirección multicast a la que se comunican los mensajes de sincronización
- puerto int: El puerto multicast al que se comunican los mensajes de sincronización
- dominio int: El identificador de dominio utilizado para distinguir entre diferentes instancias de roSyncManager
Ejemplo
El siguiente script sincroniza la reproducción de video en las unidades líder y follower:
' 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)