Usar complementos y analizadores
Esta página describe cómo usar dos funciones avanzadas de BrightSign Author: plugins de autorun personalizados y scripts de analizador. Estas instrucciones asumen cierto nivel de familiaridad con BrightScript. Esta no es una guía completa para escribir scripts personalizados para BrightSign Author; su propósito es proporcionar una descripción general y prácticas recomendadas para escribir esos scripts.
Plugins
Los plugins le permiten agregar extensiones de script a un autorun de presentación estándar. Por ejemplo, puede usar plugins para cambiar valores de variables, extraer información de un archivo .txt, .csv, .xml, o .json para mostrarlo en pantalla, cambiar el contenido de una lista de reproducción o modificar cómo responde la presentación a entradas externas.
Los plugins tienen dos beneficios principales sobre los autoruns personalizados:
- Pueden insertarse fácilmente en múltiples presentaciones, incluidas versiones nuevas y antiguas de la misma presentación.
- No dependen de una determinada versión de autorun o firmware, lo que reduce considerablemente la complejidad asociada con la actualización de implementaciones personalizadas de BrightScript.
Plugins de Autorun
Para designar uno o más plugins personalizados en BrightSign Author:
- Si usted es usuario de BrightSign Author Plus, cargue su plugin al servidor mediante la carga de contenido (consulte Contenido > Scripts). Si usted es usuario de BrightSign Author, vaya directamente al paso 2 para agregar un plugin a la presentación.
- Adjúntelo a su presentación (consulte Configuración de la Presentación > Plugin de Script).
- Si es necesario, consulte Evento de mensaje del plugin para activar cambios de estado.
Consulte la página de GitHub de BrightSign para ejemplos de plugins de BrightSign Author y Author Plus.
Estructura del Plugin
Los scripts de plugin deben incluir una función de inicialización con la forma <plugin_name>_Initialize(). Las acciones que toman mucho tiempo no deben realizarse en la rutina de inicialización, porque las acciones en la rutina son sincrónicas. En su lugar, inicie un temporizador que será capturado por el controlador de eventos del plugin poco después de que se ejecute la rutina y ejecute allí el segmento de código más largo. Por ejemplo, en lugar de descomprimir un archivo en la rutina de inicialización, hágalo mediante el controlador de eventos del plugin con un temporizador iniciado en la rutina.
A la función de inicialización se le pasan tres parámetros:
- msgPort como objeto
- userVariables como objeto
- o como objeto: Esta es la matriz asociativa .bsp del autorun. Se requiere que la función de inicialización devuelva una matriz asociativa.
Para procesar eventos, el script del plugin debe proporcionar una función ProcessEvent() que sea miembro de la matriz asociativa devuelta por la función de inicialización descrita anteriormente. A la función ProcessEvent() se le pasa un único objeto de evento. Luego, la función devuelve un valor Boolean que indica si el autorun debe continuar procesando el objeto de evento o no: la función devolverá True si maneja el evento y el autorun estándar no debe continuar procesando el evento.
La matriz asociativa que define el objeto también debe incluir una entrada objectName que defina el nombre del objeto.
El siguiente es un ejemplo de un archivo de plugin de script llamado pizza.brs:
Function pizza_Initialize(msgPort As Object, userVariables As Object, bsp As Object)
print "pizza_Initialize - entry"
print "type of msgPort is ";type(msgPort)
print "type of userVariables is ";type(userVariables)
PizzaBuilder = newPizzaBuilder(msgPort, userVariables, bsp)
return PizzaBuilder
End Function
Function newPizzaBuilder(msgPort As Object, userVariables As Object, bsp as Object)
PizzaBuilder = { }
PizzaBuilder.msgPort = msgPort
PizzaBuilder.bsp = bsp
PizzaBuilder.userVariables = userVariables
PizzaBuilder.objectName = "PizzaBuilder_object"
PizzaBuilder.ProcessEvent = pizza_ProcessEvent
return PizzaBuilder
End Function
Function pizza_ProcessEvent(event As Object)
print "pizza_ProcessEvent - entry"
print "type of m is ";type(m)
print "type of event is ";type(event)
' swallows timer events - telling the autorun not to process them
if type(event)= "roTimerEvent" then
return true
else
return false
endif
End FunctionRecibir un Mensaje de Plugin
El siguiente código de ejemplo muestra cómo escribir un script que recibe un comando de Enviar mensaje de plugin desde el autorun. Este código escucha un mensaje enviado al plugin llamado “Pizza” y luego imprime el mensaje. Este ejemplo usa salida de depuración en lugar de sentencias print. Las sentencias print solo aparecen en la consola serial, mientras que las sentencias de depuración aparecen en el registro del sistema.
Function pizza_ProcessEvent(event As Object)
m.bsp.diagnostics.printdebug("@@ pizza_ProcessEvent - entry")
m.bsp.diagnostics.printdebug("@@ type of m is " +type(m))
m.bsp.diagnostics.printdebug("@@ type of event is " +type(event))
if type(event) = "roAssociativeArray" then
if type(event["EventType"]) = "roString"
if event["EventType"] = "SEND_PLUGIN_MESSAGE" then
if lcase(event["PluginName"]) = "pizza" then 'the plugin name is case sensitive'
pluginMessage$ = event["PluginMessage"]
m.bsp.diagnostics.printdebug("@@ received pluginMessage " + pluginMessage$)
return true
endif
endif
endif
endif
return false
End FunctionEnviar un mensaje de plugin
El siguiente código de ejemplo muestra cómo escribir un script que envía una cadena de mensaje para activar un evento de Mensaje de plugin.
print "pizza_ProcessEvent - entry"
print "type of m is ";type(m)
print "type of event is ";type(event)
if type(event) = "roTimer" then
pluginMessageCmd = CreateObject("roAssociativeArray")
pluginMessageCmd["EventType"] = "EVENT_PLUGIN_MESSAGE"
pluginMessageCmd["PluginName"] = "Pizza"
pluginMessageCmd["PluginMessage"] = "toppings"
m.msgPort.PostMessage(pluginMessageCmd)
return true
endif
return false
End FunctionAnalizadores
Los analizadores pueden realizar muchas de las mismas funciones personalizadas que los plugins (por ejemplo, extraer información de un archivo .txt, .csv, .xml, o .json para mostrarlo en pantalla o cambiar el contenido de una lista de reproducción); sin embargo, en lugar de activarse mediante un comando o asociarse a un evento, los analizadores se asocian con una fuente de datos descargada o un archivo en la tarjeta microSD. Esto significa que cualquier función que se active por un evento debe escribirse como un plugin, no como un analizador.
Un analizador no necesita trabajar exclusivamente con los datos de la fuente asociada a él. Una vez que el analizador comienza a ejecutarse, puede usarlo para eliminar un archivo del almacenamiento, enviar un comando UDP o descargar otra fuente o archivo.
Scripts de analizador - RSS
Los scripts de analizador le permiten manipular conjuntos de datos de fuentes RSS entrantes. Puede crear scripts de analizador RSS para una amplia variedad de funciones del sistema y de presentación. Puede designar un analizador para una fuente RSS en BrightSign Author (Contenido compatible).
El archivo del analizador debe tener una extensión .brs.
Los siguientes parámetros se pueden usar con una subrutina de analizador RSS:
- xmlFileName$: El nombre del archivo XML. Este valor es proporcionado por el autorun.
- elementosPorÍndice: Un arreglo de descripciones. El script debe completar este arreglo si el objeto Live Text está usando el “índice de elemento” para mostrar elementos de esta fuente.
- itemsByTitle: Un arreglo asociativo de títulos y descripciones. El script debe completar este arreglo si un objeto Live Text está usando el “título de elemento” para mostrar elementos de esta fuente.
- userVariables: Un arreglo asociativo de User Variables actuales (que son proporcionadas por el autorun). Esto se proporciona en caso de que quiera analizar o modificar las User Variables.
La siguiente pieza de código de ejemplo se puede usar para analizar texto RSS:
xml = CreateObject("roXMLElement")
if not xml.Parse(ReadAsciiFile(xmlFileName$)) then
print "xml read failed"
else
if type(xml.channel.item) = "roXMLList" then
index% = 0
for each itemXML in xml.channel.item
itemsByIndex.push(stri(index%) + " - " + itemXML.description.GetText())
index% = index% + 1
next
endif
endif
end SubScripts de analizador - MRSS
Puede usar un script para analizar fuentes que no sean MRSS y proporcionar los datos en un formato que pueda ser utilizado por Fuentes Media RSS en BrightSign Author.
Para designar un analizador para una fuente MRSS en BrightSign Author, vaya a Configuración de la presentación > Contenido compatible > Fuentes de datos.
El archivo del analizador debe tener una extensión .brs.
Los siguientes parámetros se pueden utilizar con una subrutina de analizador MRSS:
- fileName$: El nombre del archivo de feed que se analizará. Este valor lo proporciona el autorun de la presentación.
- artículos: Una matriz de matrices asociativas que representan elementos MRSS que serán reproducidos por los estados Media RSS Feed. Esta matriz está vacía al entrar en la subrutina del analizador y el script debe completarla. Cuando la subrutina del analizador finalice, el autorun proporcionará los datos de la matriz a los estados Media RSS Feed para su reproducción. Consulte la sección Especificación de la matriz de elementos a continuación para obtener una lista de parámetros de matrices asociativas.
- metadatos: Una matriz asociativa que contiene elementos de metadatos opcionales pertenecientes a toda la lista de reproducción/feed.
Especificación de la matriz de elementos
El script del analizador debe agregar matrices asociativas a la matriz artículos; cada matriz asociativa representa un único elemento multimedia que se reproducirá. El orden de los elementos en la matriz especifica el orden de reproducción.
Cada matriz asociativa consta de uno o más pares clave-valor. Todos los valores deben ser cadenas, incluidos los valores numéricos. La siguiente tabla describe los pares clave-valor aceptados:
Clave | Valor | Ejemplo | Notas |
|---|---|---|---|
url | Una URL de descarga para el archivo | brightsign.biz/images/myfeedpic1.jpg | Obligatorio: el elemento se ignorará si este valor no está presente. |
mediano | video | image | audio | document | "video" | Sugerido: si los valores mediano y tipo no están presentes, el valor de mediano tendrá el valor predeterminado "image". |
tipo | video/*, audio/*, image/*, text/html, application/widget | "video/*" | Sugerido: si los valores mediano y tipo no están presentes, el valor de tipo tendrá el valor predeterminado "image/*". |
duración | La duración de visualización en segundos | "30" | Opcional: este valor se aplica solo a imágenes y no tiene efecto en otros tipos de medios. Si no se especifica, este valor tendrá el valor predeterminado "15". |
título | El valor para el campo MRSS Title | "myfeedpic1" | Opcional |
descripción | El valor para el campo MRSS Description | "$5.99" | Opcional |
tamaño | El tamaño del archivo en bytes | "942061" | Opcional |
guid | Un valor único para el archivo | "ab05caf" | Opcional – Cuando este valor cambia, el reproductor volverá a descargar el archivo. |
mrssCustomFields | Un arreglo asociativo de pares clave-valor arbitrarios | {key1:"custom field A", key2:"custom field B"} | Opcional – Use este arreglo asociativo para incluir campos MRSS personalizados. |
Especificación de metadatos
El objeto metadatos es un arreglo asociativo vacío cuando se entra en la subrutina del analizador. Este arreglo asociativo puede aceptar pares clave-valor opcionales que representan propiedades para todo el feed. Todos los valores deben ser cadenas, incluidos los valores numéricos. La siguiente tabla describe los pares clave-valor aceptados:
Clave | Valor | Ejemplo | Notas |
|---|---|---|---|
título | Un título para el feed | "myfeed1" | |
ttl | El tiempo de vida en minutos | "5" | Representa cuánto tiempo se almacenará el feed (independientemente de si lo usa la presentación o no) antes de actualizarse. El usuario también establecerá un Intervalo de actualización al agregar el feed de datos a la presentación; si se especifica el valor ttl , la presentación utilizará el menor de los dos valores para determinar la frecuencia de actualización. |