eyeUNIFYexec

 

Introduction

The eyeUNIFYexec (“executor”) module implements the executor interface defined by the eyeUNIFYcore and is accessible via SOAP. Its purpose is to process various channels (e.g. RTSP stream, VNC connection or capture card input) and show them on a display or a display wall.

The executor can be configured to spawn different processes for different channel types. It positions and resizes these processes, or rather their corresponding windows. If the executor is configured with unify-aware programs, even more features like cropping or arbitrary resizing of windows on a distributed video wall (comprising independent processing units) become possible.

The executor adopts the security standards which are available in the eyeUNIFYcore. A simple login can protect from unwanted access. TLS/SSL can be used to encrypt the data on the wire.

Configuration

There are two configuration files: config.xml & processes.xml. The former holds the main configuration about the service and network specific settings. The latter is used to set up the program paths which should be used by the executor.

The default settings in config.xml should work in most cases. You may need to change the network settings if you have more than one network interface. You can configure a grid-width and -height in case this executor runs on a multi-display machine. The default configuration looks like this:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="executor.name">UNIFYexec</entry>
<entry key="executor.description">UNIFYexec reference implementation</entry>

<!--
If "interface" is set, the "interfacename" will be ignored.
Else if "interface" is empty and "interfacename" has a valid interface name,
the first available address will be used (IPv4/IPv6 according to "preferv6").
Else InetAddress.getLocalHost() will be used. This will most likely work
well on Windows, but not on Linux.
-->
<entry key="executor.config.net.interface"></entry>
<entry key="executor.config.net.interfacename">eth0</entry><!--ignored if interface is set-->
<entry key="executor.config.net.preferv6">off</entry>
<entry key="executor.config.net.port">8081</entry>
<entry key="executor.config.net.tls">off</entry><!--on/off-->
<entry key="executor.config.net.tls.port">8444</entry>
<entry key="executor.config.net.tls.keystore"></entry>
<entry key="executor.config.net.tls.alias"></entry>
<entry key="executor.config.net.tls.storepass"></entry>
<entry key="executor.config.net.tls.keypass"></entry><!--same as storepass if empty-->

<entry key="executor.config.service.devicepath">/UnifyDevice</entry>
<entry key="executor.config.service.executorpath">/UnifyExecutor</entry>
<entry key="executor.config.service.username"></entry>
<entry key="executor.config.service.password"></entry>
<entry key="executor.config.grid.width">1</entry>
<entry key="executor.config.grid.height">1</entry>
</properties>

 

The processes.xml contains all the necessary program paths. A sample configuration is:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

<properties>
<entry key="executor.rtsp">vlc</entry>
<entry key="executor.vnc">vncviewer</entry>
<!--entry key="executor.rgbinput">...</entry-->

<entry key="executor.process.vlc">C:\Program Files (x86)\VideoLAN\VLC\vlc.exe {url-with-login}</entry>
<entry key="executor.process.vlc.cropenabled">false</entry>
<entry key="executor.process.vlc.multiscreenallowed">true</entry>

<entry key="executor.process.vlc_linux">/usr/bin/vlc {url-with-login}</entry>
<entry key="executor.process.vlc_linux.cropenabled">false</entry>
<entry key="executor.process.vlc_linux.multiscreenallowed">true</entry>

<entry key="executor.process.vncviewer">C:\Program Files\vncviewer\tvnviewer.exe -host={address} -port={port} -password={password} -scale=auto{options}</entry>
<entry key="executor.process.vncviewer.nomenu">-showcontrols=no</entry>
<entry key="executor.process.vncviewer.cropenabled">false</entry>
<entry key="executor.process.vncviewer.multiscreenallowed">true</entry>
</properties>

The existence of an entry in this file with a key of the form “executor.<channel-type>” means that this executor supports this type of channel. The value of the entry must be the name of a program configuration below. In this example the channel type rtsp is configured to use the vlc program definition. The vlc definition is configured with the absolute path to the vlc executable. This works also on Linux but the absolute path would look a bit different.

The cropenabled and multiscreenallowed settings tell the executor if the configured program has support for cropping and if it is allowed to span multiple executor instances (i.e. on a distributed video wall). These settings mostly make sense on unify-aware programs and should be set to false otherwise. The placeholders in curly braces will be substituted with meaningful values at runtime.