Welcome to the Serviio Wiki. This space is intended to store community knowledge about Serviio and it's various setups. You can post and update working installation tutorials, startup scripts and similar.

Serviio Plugins

Serviio plugins provide access to online sources such as Youtube or Regional Catchup TV services (e.g. BBC Iplayer). A DLNA client will be able to browse these streams in a similar fashion to local movies and music.

This feature was made available as part of Serviio 0.6, the plugins plugins announcement page describes the feature in some detail as well as this wiki page.

Serviio doesn't include any plugins as part of the install but you can…

From version 0.6.1 Serviio supports plugins for RSS/Atom feeds and other Web Resources. Note some feeds that link directly to media require no plugin at all!

Plugins help Serviio locate the exact location of the media streams as the feed often links to html pages rather than the stream.

Installation

  1. Download the plugin
  2. Copy the plugin to the plugins folder (eg to /usr/bin/serviio-0.6.2/plugins on linux)
  3. Configure Serviio with at least one url to an RSS feed. This is done using the serviio console using the Online Sources Tab which is found on the Library tab.

After up to 5 mins the streams should be available to view. On the DLNA client look for a new folder called “Online Sources”

Development

Read the Guide to plugin development

Online content is usually served via http or rtmp protocol. The former is very easy to consume. The latter is mostly used by Adobe Flash servers and used in many online video services and FFmpeg compiled with libRTMP is necessary for playback. Some rtmp streams require swf verification (not implementing that usually means the stream is cut after a period of time, like 1 minute).

Feed item URLs can expire with time, if that is the case you will have to provide the expiry date so that Serviio can re-run the URL extraction when that happens and get a valid URL when necessary. You can also define whether the content is a live stream or static content.

  • Look at existing plugins, there may be a plugins that can be adapted with only minor changes
  • The plugins can be largely tested outside of serviio (to speed up development).
    • Look at Youtube.groovy's main method, this acts like a unit test.
      • test1: does this plugin correctly identifies feeds it can and can't handle
      • test2: when given a link from an rss item, does the plugin correctly determine the media?
  • Once the tests above pass it's time to install the plugin and do some final testing

A plugin can be tested outside of groovy by running:

On Windows:
groovy -cp “C:\Program Files (x86)\Serviio\lib\serviio.jar;C:\Program Files (x86)\Serviio\lib\slf4j-api.jar;C:\Program Files (x86)\Serviio\lib\slf4j-log4j12.jar;C:\Program Files (x86)\Serviio\lib\log4j.jar” “C:\Program Files (x86)\Serviio\plugins\CNN.groovy”

I suggest to create a MS-DOS batch file (ex: ” PluginsTest.bat” ) with following content, then drag&drop the groovy over the batch file (%1 variable will be replaced by groovy file path):

@echo off
@ set ServiioPath="C:\Program Files (x86)\Serviio"
@echo "Testing %1 plugin"
%GROOVY_HOME%\bin\groovy.exe -cp "%ServiioPath%\lib\serviio.jar;%ServiioPath%\lib\slf4j-api.jar;%ServiioPath%\lib\slf4j-log4j12.jar;%ServiioPath%\lib\log4j.jar;%ServiioPath%\lib\org.restlet.jar" "%1"
@pause

On Linux:
From your serviio install folder (eg /usr/bin/serviio-0.6.2) and with a s4c.groovy file installed in plugins:

groovy -cp lib/serviio.jar:lib/slf4j-api.jar:lib/slf4j-log4j12.jar:lib/log4j.jar:lib/org.restlet.jar plugins/S4c.groovy

And of course you can use the Plugin development forum if you get stuck

Logging

Logging is configured through conf/log4j.xml. You could change the priority of all packages to DEBUG but this is very verbose.

I've found adding the following gives me useful additional info for plugin development:

 <category name="org.serviio.external">
    <priority value="DEBUG"/>
 </category>
 <category name="org.serviio.upnp.webserver">
    <priority value="DEBUG"/>
 </category>
 <category name="org.serviio.renderer">
    <priority value="DEBUG"/>
 </category>
 <category name="org.serviio.delivery">
    <priority value="DEBUG"/>
 </category>
 <category name="org.serviio.library.online">
   <priority value="DEBUG"/>
 </category>
Print/export