Supported SMIL Features
Sections
SMIL Media Objects
- All media objects are supported except
<audio>— see Not supported below. - Scrolling text is supported via the
tickerelement (see the Ticker guide). - Src can be specified with relative path or absolute path. If relative path is specified smil player will combine it with actual path to smil file to get absolute one.
- Duration is specified in seconds, either with
sstring or without. Orindefinitestring.
Our changes/limitations
z-indexcan be specified directly on element (images, widgets, tickers — not videos, which render on the native video plane) — seez-index.
Example
<ref src="http://server/index.html" type="text/html" dur="indefinite" />
<video src="ad1.mpg" dur="5" />
<img src="https://some-server.com/ad2.jpg" dur="5s" />
SMIL Playlists
seq,par,exclandpriorityClassare supported. Deviations from the standard:exclrelies on itspriorityClasschildren for exclusivity (its ownbegin/repeatCountare ignored — wrap it in apar), the priorityClass defaults differ (see the Priority guide), andaudiois not played.
SMIL Scheduling
- All tags are supported and behave by standard specification.
Layout
- We are using layout by standard specification.
- Dimensions and positions can be specified by absolute value or by percentages which are computed from display resolution.
- region name is specified by
regionNameorxml:idattribute
Our changes/limitations
- we use region definition to specify if content in that region should be synchronized or not =
sync="true" - for triggers we use nested regions. See example below or our docs. But basically region has several nested regions, with dimensions derived from parent region and the trigger is dynamically assigned to one of the free nested regions. If none is free, trigger will be assigned to the first one.
fitvalues (fill/meet/meetBest/cover) are documented in full infit.
Example
<region regionName="bottom" left="0" top="1574" width="1080" height="346" z-index="2" sync="true" backgroundColor="#ffffff"/>
<region regionName="main" left="0" top="0" width="1080" height="1920" z-index="1" backgroundColor="#ffffff"/>
<region regionName="trigger" left="0" top="0" width="1080" height="1920" z-index="0" backgroundColor="#ffffff">
<region regionName="fullScreenTrigger" left="0" top="0" width="1080" height="1920" z-index="0" backgroundColor="#ffffff"/>
</region>
Interactivity
- For interactivity, we use functionality called triggers. Currently, we have keyboard, mouse/touch, widget-emitted,
nexmosphere RFID sensor, and sync failover triggers, plus network-driven dynamic playlists (
emitDynamic). - We handle triggers completely differently than the a-smil standard — see the Triggers overview.
Video input
- We do not use this functionality; you can specify video input by URL (relative or absolute), by stream URL, or by HDMI input URL — see Streams and Video Inputs.
Linking SMIL
- Not supported.
Screen on/off
- Not supported.
Sync Playback
- Handled differently, via an ACK-based coordination protocol. With
syncServerUrlconfigured the devices coordinate through a sync server (applet-synchronizer); without it they use local-network peer-to-peer.syncGroupNameis required. - The setup has several moving parts — see Playback Synchronization for the full walkthrough.
- Which media should be synced among devices is specified in the region definition (see the layout section). All content within such a region will be synchronized.
AnyTiles
- Not supported.
Pull mode
- We are using pull mode by standard specification.
Our changes/limitations
All <meta>-level update-control attributes (onlySmilUpdate, checkBeforePlay, checkAheadCount,
contentRefresh, smilFileRefresh, fallbackToPreviousPlaylist, timeOut, skipContentOnHttpStatus,
updateContentOnHttpStatus, skipPlaybackOnHttpStatus, defaultRepeatCount, defaultTransition,
reportFileLimit), the per-element update attributes (updateCheckUrl, updateCheckInterval,
allowLocalFallback), and the per-element playability gate (playCheckUrl, playCheckSkipOnError) are documented
in full in the <meta> Attribute Reference and the
Element Attribute Reference.
Example
<meta http-equiv="Refresh" content="10" onlySmilUpdate="true"/>
<meta http-equiv="Refresh" content="60" contentRefresh="120" smilFileRefresh="30" fallbackToPreviousPlaylist="true"/>
Prefetch
- We don't use this tag during SMIL processing.
Reporting
- We use our FrontApplet
command.dispatchfor reporting. It has to be allowed in smil file. - Enabling and endpoint configuration (
log/type/endpoint,reportUrl) are documented in the<meta>Attribute Reference and Applet Configuration Reference. Event and payload shapes are documented in Reporting Events & Payloads.
Example
<meta log="true" />
<meta log="true" type="manual" endpoint="https://custom.endpoint.com/reports"/>
Wallclock
- We are using wallclock by standard specification. See docs or tests in
playlistWallclock.spec.tsfor details.
Our changes/limitations
- only supported periodical attribute is
P1D(once a day).
Transition
- We are using transition by standard specification
Our changes/limitations
- supported transitions are
crossfade(images and widgets) andbillboard(images only) — see the Transitions guide. - transition name is specified by
transitionNameorxml:idattribute. - a playlist-wide default can be set with
defaultTransition.
Conditional play
- Conditional expressions are fully supported. Simple as well as nested ones. For more details see test files
conditionalSimple.specandconditionalAdvanced.spec
Our changes/limitations
<and>does not have to be encoded, you can use directly<,>adapi-prefix is not necessary in conditional attributes.
Not supported
<audio> playback
The
<audio>tag is not supported by signageOS SMIL Player. Audio elements are parsed and their files are downloaded into storage, but they are never played — playback silently skips them. The playback functionality is coded, but it's commented out due to interaction with the audio of videos. Avoid<audio>elements in production playlists; their files only consume bandwidth and device storage.
<audio src="music.mp3" />
Sound Volume Control (soundLevel)
The
soundLevelattribute is not implemented — it has no effect on playback volume for any media type.
<video src="ad1.mp4" soundLevel="20%" />
Video layering
- you cannot layer videos on top of each other