Media Watcher – EAS Configuration
EAS output system
Install and configuration
with Media Watcher
About | Description |
Revision | 1.2 |
History | 25/06/2021 |
Authors | Peter Eszlari, Jerry Clark |
Installation overview
- Install the latest TOGMediaWatcher-rxxxxx-windows-installer.exe
- Install a renderer, RT_OEM_DLL-4.6.4 or Tog_4.6.4. The oldest version that is supported with EAS: r25565.
- Configure the TOGMediaWatcher shortcut in the installation folder to load the configuration file: RTSWconfTOGMediaWatcher.conf
- Edit the configuration file according to the guide below
- Prepare 2 directory locations in your system:
- One that is accessible by both the Dasdec machine and MediaWatcher.
This will be the Dasdec output and MediaWatcher input.
- One that is accessible by both MediaWatcher and the renderer DLL or Tog.
This cannot be the exact same as folder a) but it can be a subfolder of that.
- Configure the Dasdec machine in correspondence to MediaWatcher file formats and folder locations.
- Prepare an RT Project with the appropriate graphic script and assets
MediaWatcher configuration via conf file
MediaWatcher will only work correctly if it starts up with a conf file set. A basic conf file will be produced by the installer and placed here:
RTSWconfTOGMediaWatcher.conf
This will have to be edited, see the configuration details below. The best way to run the conf file is to make the application shortcut pass the parameter to the executable.
- Right-click on the TOGMediaWatcher shortcut icon in the RTSW folder
- Click on Properties
- Edit the Target line by adding –conf and the full path to the conf file:
- –conf “C:UserstogDesktopRTSWconfTOGMediaWatcher.conf”
- Press Apply then Ok
EAS specific configuration details in the conf file:
- Please see Appendix B for example usage of these parameters.
Input/Output directories:
<inputDirectory> : All the alert files will be delivered to this location by the Dasdec machine so this has to be set the same as the output directory of Dasdec.
<outputDirectory> : MediaWatcher will move the audio files here from its inputDirectory. In this case the RT graphic script will play the audio file directly from here.
NOTE: This is only if the alert file does not specify a separate location for the incoming audio file. This might be a configuration option in Dasdec. In that case the file will be kept there and will be read from there by the renderer.
This will be specified in the EAS alert file by this code:
EAS.AUDIO.FILE.PATH.
See more details at the EAS codes section of this document.
MOS communication settings
MOS settings will correspond to the values in the DLL/Tog preferences:
<mosId>Tog</mosId> : <ncsId>Tog</ncsId> <encoding>unicode</encoding> <timeout>120</timeout> |
IP addresses and ports
Please set the DLL/Tog machine(s) thus:
For a single rendering machine:
<hosts>192.168.100.89;10540;10541</hosts> |
Multiple renderers can have the same port settings:
<hosts>10.163.0.145;10540;10541 10.163.0.146;10540;10541</hosts> |
For multiple DLL channels on each renderer multiple pair of ports will be set on the same IP:
<hosts>10.163.0.145;10540;10541 10.163.0.145;10550;10551 10.163.0.147;10540;10541 10.163.0.147;10550;10551</hosts> |
EasFIPSCodes
<EasFIPSCodes> are area codes in the EAS alert file that will determine whether the alert is intended for the geographical broadcast area of interest. E.g.: 008041
Make sure this code matches the EAS.FIPS code in the alert files. This might be pre-configured in the Dasdec preferences so only area-specific alerts will be sent to MediaWatcher.
NOTE: If this section is empty or missing MediaWatcher will accept all FIPS codes.
Multiple codes can be separated by [~]:
<EasFIPSCodes>008041~502089</EasFIPSCodes> |
Plugin
<plugin> is the plugin that will be used to process the files arriving in the InBox. In this case the required plugin is TMWImportEAS:
<plugin>TMWImportEAS</plugin> |
Setting the Duration of the Graphic
The duration of the graphic is normally set as the value (in seconds) of the EAS.VIDEO.DURATION alert code sent in the EAS alert text file.
If for some reason this alert code is not present in the EAS alert text file then <FallbackEasTXDuration> can be used to provide a duration:
<FallbackEasTXDuration>45</FallbackEasTXDuration>
RTSW recommends that this parameter is always set to a sensible value.
<ForceEasTXDuration> can be used to force the duration to be a set value in seconds. To force the duration to be 40 seconds use:
<ForceEasTXDuration>40</ForceEasTXDuration>
The EAS alert text file
The text file delivered by Dasdec must be named: EAS_NET_ALERT. The destination location of this file will have to be the MediaWatcher <inputDirectory>. These will be configured both in Dasdec and in the MediaWatcher conf file.
The alert file will have alert codes and their values formatted as in this example:
EAS.DURATION = ’13’ EAS.TYPE = ‘DMO’ EAS.TYPE.SEVERITY = ‘WARNING’ |
EAS codes processed by MediaWatcher
EAS.ALERT_EVENT.TYPE : EAN or NPT values signify a Live Alert. Any other value is not considered a live alert.
The only effect of this is that in case of a live alert MediaWatcher will ignore audio and pass an empty AudioFile string to TickerEAS.
EAS.TYPE.SEVERITY |
Alert severity – This will drive the colour of the ticker plinth.
Options: ADVISORY, TEST, WATCH, WARNING, EMERGENCY
Plinth colours:
- PlinthRed: emergency and test
- PlinthGreen: warning
- PlinthBlue: watch and advisory
NOTE: for this to work all corresponding assets must exist in the RT project and be configured correctly. The actual colours of the ticker can be changed as long as the asset-names remain the same. See the RT Project section for more details.
EAS.DURATION:
Determines alert duration in seconds. This value is passed on to the TickerEAS script running in the renderer, a user code will process it and when this duration time has passed it will take off the alert graphics and audio.
EAS.TEXT, EAS.HEADLINE, EAS.DESCRIPTION, EAS.INSTRUCTION:
These are alert texts that will be added to TickerContents to display on the renderer output.
EAS.FIPS:
Area codes in the EAS alert file that will determine whether the alert is intended for the geographical broadcast area of interest.
Example: 008041
This might be pre-configured in the Dasdec preferences so that only area-specific alerts will be sent to MediaWatcher.
EAS.AUDIO.FILE.PATH:
Might be configurable in Dasdec, the default is empty or ‘.’
If not empty or ‘.’ then the Dasdec box will transfer the file to this path. Otherwise it will be transferred together with the text alert file and MediaWatcher will move the file into its <outputDirectory>. In both cases MediaWatcher will send the final location of the file to the DLL or Tog.
EAS.AUDIO.FILE :
Name of the file with extension. The name must start with “eas_audio” which might be configurable in Dasdec.
NOTE: Dasdec has to be configured to output the audio file in a standard .wav format, mono or stereo and with a sample rate of 48000 Hz.
RT Project
The RT project will have specific requirements to work with the MediaWatcher EAS system.
Project files and assets needed:
GMScripts/Template/TickerEAS.rb GMScripts/Template/TickerEAS.assets GMScripts/Template/TickerEAS.manifest GMData/Materials/PlinthBlue.mat GMData/Materials/PlinthGreen.mat GMData/Materials/PlinthRed.mat GMData/Shaders/PlinthBlue.sha GMData/Shaders/PlinthGreen.sha GMData/Shaders/PlinthRed.sha GMData/States/PlinthBlue.sta GMData/States/PlinthGreen.sta GMData/States/PlinthRed.sta |
- The project must have a graphic named TickerEAS, an example will be attached to this document.
- TickerEAS must have a method named bringOn
- brinOn will have these exact inputs set: TickerContents, Duration, PlinthShader, AudioFile
- bringOn will have the Source Type set as MOS Parameter
- The TickerContents input will accept some string data (the alert text)
- The PlinthShader input will accept one of these exact values: PlinthRed, PlinthBlue, PlinthGreen , and there will be some appropriate assets created to respond to them.
- The AudioFile will be a file path (string).
- TickerEAS must have a method named takeOff
- TickerEAS must have a clockNode in the scenegraph.
- On the clockNode enable Running
- Add a step Animator to the beginning of bringOn to drive the Display field
- Add a step Animator to the end of takeOff to drive the Display field
- TickerEAS must have a method that brings on audio, might be named bringOnAudio.
- The bringOnAudio method will have an AudioNode with a StartSound step animator to start playing the audio file. A step animator cannot be placed on the timeline sooner than frame-2.
- In the bringOnAudio method set the AudioNode Volume path animator from 0-100 to turn up the wav volume and the appropriate InputGroupVolume(1-4) from 100-0 to turn down the program volume. The path should be comfortably long, perhaps 5-20 frames.
- TickerEAS must have a method that takes off audio, might be named takeOffAudio.
- This will have the same path animators for the same AudioNode as bringOnAudio but all flipped to reverse the effect of that method.
- Will have a StopSound step animator at the end to stop wav file reading.
- TickerEAS must have user code added, see the code examples below.
- In bringOn a code will call the takeOff method after the input Duration value has passed.
- In bringOn and takeOff a code will call bringOnAudio and takeOffAudio respectively, based on whether the script has received an audio filename input from MediaWatcher or not.
User code in bringOn for Ticker Duration:
@clock.setEnable(false) @clock.setTimeResetStart(“00:00:00:00″) @clock.setEnable(true) @clock.clearEvents() @clock.addEvent(_Duration*1000,0,”takeOff”) |
User code for audio in bringOn:
$AudioFile = _AudioFile if ($AudioFile != “”) self.runMethod(“bringOnAudio”,data) End |
User code for audio in takeOff:
if ($AudioFile != “”) self.runMethod(“takeOffAudio”,data) End |
Appendix A
MOS transfer log
If MOS debug is set in the DLL or Tog preferences a successful transfer will look like this:
2020-12-17T16:05:21.184: DEBUG – MOS:RxMosStart <mos> <mosID>Tog</mosID> <ncsID>Tog</ncsID> <mosTOGCommand> <objID>1</objID> <command>PLAYMETHOD</command> <parameter> <name>NAME</name> <value>bringOn</value> </parameter> <parameter> <name>TickerContents</name> <value>A broadcast or cable system has issued A PRACTICE/DEMO WARNING for the following counties or areas: El Paso, CO; at 9:15 AM on FEB 6, 2020 Effective until 9:30 AM. Message from DASDEC. </value> </parameter> <parameter> <name>PlinthShader</name> <value>PlinthGreen</value> </parameter> <parameter> <name>Duration</name> <value>40</value> </parameter> <parameter> <name>AudioFile</name> <value>C:UserstogDesktopRTSWTOGMediaWatcheroutbox/eas_audio.wav</value> </parameter> </mosTOGCommand> </mos> RxMosEnd |
Appendix B
A TOGMediaWatcher.conf file example:
<tOGMediaWatcher> <home>C:UserstogDesktopRTSW</home> <clearWorkingOnLoad>false</clearWorkingOnLoad> <exitWhenEmpty>false</exitWhenEmpty> <processOneFile>false</processOneFile> <numberBackupDays>0</numberBackupDays> <checkFileHasChanged>false</checkFileHasChanged> <numberLogBackups>0</numberLogBackups> <logDatabaseStatements>false</logDatabaseStatements> <allDownloadsFirst>false</allDownloadsFirst> <inBox> <name>EAS</name> <inputDirectory>C:UserstogDesktopRTSWTOGMediaWatcherinbox</inputDirectory> <outputDirectory>C:UserstogDesktopRTSWTOGMediaWatcheroutbox</outputDirectory> <hosts>192.168.100.31;10540;10541 192.168.100.31;10542;10543 192.168.100.31;10544;10545</hosts> <FallbackEasTXduration>45</FallbackEasTXduration> <plugin>TMWImportEAS</plugin> </inBox> </tOGMediaWatcher> |
Appendix C
TickerEAS.rb graphic script example
#encoding: UTF-8 ####################################################### # # TOG-3D Graphics: tOG-3D 4.6.4_r25565_64 # # Fri Jan 15 12:01:48 2021 # # This file is automatically generated. Only add code # to those sections marked startUserBlock()/endUserBlock() # ####################################################### class TickerEAS < Gm::GMScript def initialize(rootNode) def Construct(data) # TickerEAS_OBJ Construct # TickerEAS_OBJ Initialisation # TickerEAS_OBJ Set # TickerEAS_OBJ Links # Node Events # TickerEAS_OBJ Stage 2 Initialisation # Save Links to Nodes above Object Nodes # Save Explicit Script Variables # Construct Block self.startBlock(“Construct.block1”) # Set Objects Initialised # Save Events # Set Current Method/Block def Main(data) self.startBlock(“Main.block1”) def bringOn(data) self.startBlock(“bringOn.block1”) self.startBlock(“bringOn”) self.startUserBlock(false) @clock.clearEvents() $AudioFile = _AudioFile self.startUpdateBlock(false) self.startClipBlock(true) def bringOnAudio(data) self.startBlock(“bringOnAudio.block1”) def cueGraphic(data) self.startBlock(“cueGraphic”) def takeOff(data) self.startBlock(“takeOff”) def takeOffAudio(data) self.startBlock(“takeOffAudio.block1”) |