Serviio - free DLNA media server for Windows, Mac and Linux

Media Streaming Server

About Us

Serviio is developed by Petr Nejedly, who currently lives in London and works as a freelance Java consultant.

Serviio uses some open-source libraries without which it would not have been possible. I would like to thank all the people who contributed to them.

Apps

Serviio has a growing ecosystem of related applications. These are maintained mostly by third-party developers and are in no way related to Serviio, other that using its API.

Media browsers

Serviio Pro enables to access its content not only via DLNA-powered client devices, but via a simple and secure API (as in the case of MediaBrowser). That enables developers to write applications providing remote access to your files, e.g. over 4G/5G mobile network.

serviigo-logo.pngServiiGo

Developer: Will Lunniss
Web site: https://willlunniss.bitbucket.io/serviigo/
Requirements: Serviio Pro



ServiiGo lets you browse and stream all the media stored on your Serviio server to your android device.

Unlike DLNA based apps, ServiiGo uses a new API built into Serviio Pro that also works over the internet. This means you can now access your media using 4G/5G mobile networks and WiFi hotspots away from home.

Designed with small phones up to large tablets in mind, and optimised to work with the way that Serviio delivers content, ServiiGo is the way to access your media on the go.

get_it_on_play_logo_large.png

serviigo-1.png

Console replacements

Serviio provides API for management of the server component. Developers can therefore leverage this functionality to implement tools that can replace or complement Serviio Console.

serviidroid-logo.png ServiiDroid

Developer: Will Lunniss
Web site: https://willlunniss.bitbucket.io/serviidroid/


ServiiDroid is an android version of the Serviio console. ServiiDroid allows you to manage and configure your Serviio server, directly from your android device.

This is especially useful if you run Serviio on a NAS, home server, or desktop located in a different room to your TV as it lets you make quick changes without leaving your sofa.

get_it_on_play_logo_large.png

serviidroid-1.png

Supported system properties

Serviio includes a set of system properties that will enable you to further configure the system. For a help on how to add or change values of these properties, read F.A.Q.

Properties for Serviio (server)

  • serviio.home - path to Serviio installation location
  • ffmpeg.location - path of FFmpeg executable
  • dcraw.location - path of dcraw executable
  • plugins.location - path to a location that included 'plugins' folder (repository for online plugin files, by default it's ${serviio.home}/plugin)
  • plugins.check - if set to 'false', Serviio will not perform continuous checks for new or updated plugin files
  • derby.system.home - path to the library database root folder (by default it's ${serviio.home}/library)
  • serviio.boundAddr - bound IP address for the UPnP communication (has priority to whatever is set in the console)
  • serviio.remoteHost - forced IP address of where to bind the REST server (for remote console)
  • dbURL - URL of the Serviio database (by default it uses ${derby.system.home} )
  • serviio.socketBuffer - size of network socket buffer (bytes)
  • serviio.advertisementDuration - UPnP device advertisement interval (in seconds, default is 180)
  • serviio.defaultTranscodeFolder - default transcoding folder (can be changed in the console later); must exist otherwise we revert to the user's temp folder
  • serviio.fixedPointEncoders - if present Serviio will use optimized fixed-point FFmpeg encoders (where possible); useful for less powerful systems
  • serviio.onlineContentTimeout - number of seconds to wait for online content to respond to media requests; default is 60
  • serviio.useNetworkTOS - if set to 'true', Serviio will use TOS bits during network communication, which should improve network performance for some network cards / drivers / operating systems
  • serviio.cdsAnonymousAccess - if set to 'true', applications using Serviio CDS API (incl. MediaBrowser) will not require user authentication; default is 'false'
  • serviio.libraryPollerFrequency - defines the frequency [minutes] of polling cycles when a POLLER mechanism is used for the shared folder scanning; defaults to 1 minute
  • serviio.useQSVAcceleration - when present, Serviio will try to use Intel QSV HW acceleration if the used FFmpeg bundles it
  • serviio.useNVidiaAcceleration - when present, Serviio will try to use Nvidia HW acceleration if the used FFmpeg bundles it
  • serviio.hdThumbnailResolution - specifies the dimension (width in pixels) to be used for HD thumbnails; defaults to 320
  • serviio.cdsHttpPort - port number to use for the CDS API (incl. MediaBrowser); defaults to 23424
  • serviio.cdsHttpsPort - port number to use for the secure (SSL) CDS API (incl. MediaBrowser); defaults to 23524

Online content management

Serviio supports the viewing of public online content, in the form of RSS/Atom feeds, live streams and other web resources. As there are a lot of web sites that publish their media feeds it is relatively easy to get the content on your device via Serviio.

There is no one-eat-all solution to add online content from a website to Serviio. You will have to

  • get a feed URL, if the website publishes one (and possibly install a related plugin, e.g. YouTube)
  • or install a web resource plugin (if there is one available for your preferred web site) and follow the plugin's documentation for adding content URLs
  • or get a live stream URL, that is the URL of the actual audio/video stream, not a website URL that has a video player on it

For examples of interesting online content head to the forums.

Supported content

Online feeds

Online feeds can include links to image, audio or video files. In the case of image and audio files, it is usually easy for Serviio to get this content, because the actual files are linked in the feed. In the case of video files, some web sites provide feeds with media links, most of them will publish feeds linking to a page with a video player though (e.g. YouTube). In that case you will have to install a plugin (if it's available).

Note: Only static online content is supported in feeds. If you have a feed including live streams do not use that otherwise you are facing running out of disk space.

Live streams

Serviio supports live audio and video streams. These can be internet radio stations, SHOUTCast streams, live TV station broadcasts and similar. Supported protocols include http, mmsh, mmst, rtp, rtsp, apple http.

A typical stream URL might look like:

  • http://someserver/stream
  • mms://123.123.123.123/
  • rtsp://somedomain.com/content

The live stream URL has to be the URL of the actual audio/video media stream, not the website that holds an embedded player showing the stream. For those case you will need a plugin (if available).

Note: You can make sure the stream URL is correct by trying to play it in a desktop player, like VLC.

You can also stream your PC desktop via this functionality, with the help of VLC or similar software that can produce your desktop stream. More information is on the wiki.

Web resources

Most of the time web content is not offered in the form of feeds. This type of resource includes any online content that is available in a non-structured feed (e.g. audio/video streaming websites) and requires a special Web resource plugin. Depending on the plugin implementation it will enable you to access any online content from a web site or any arbitrary URL.

Online resource plugins

Online resource plugins are simple programs written in Groovy language. Their only use is to parse provided feed URLs (those relevant to the plugin's online resource) and work out where the online files are stored.

NOTE: Plugins by themselves do not offer any online content, you still have to tell Serviio the feed URL.

Once copied to the Serviio's plugins directory, the plugin is registered and related resources can be indexed for Serviio to play. To register a new plugin with Serviio you have to copy the plugin file (.groovy) to Serviio's plugins directory. This directory is located under Serviio's installation directory.

You can also provide plugins.location system property to Serviio server which must point to a location that includes 'plugins' folder, in a case you would like to store the plugins elsewhere.

We very much encourage developers to write plugins for new web resources. To help you there is a simple guide on how to write plugins.

Serviio is not distributed with any plugins, please go to the forums to get your copy, request a new one or contribute your own.

Adding online resources to the library

To add online content to your Serviio library, open the console and select Library / Online sources in the menu. Click Add button and select the Source Type (feed, live stream, web resource). Make sure to get this right otherwise your content will not appear or will not play correctly.

online_resource_type.png

Now enter Source URL, and type of media the resource provides. You can optionally enter Display name (value showed on the device when browsing, defaults to either feed name or source URL) and Thumbnail URL (only available for live streams, includes address of an image you want to see when browsing the live stream on your device).

online_resource_stream.png

The easier option is to use a ServiioLink, which will prefill all the above fields for you.

Another option is to import online resource file (as previously exported by clicking the Export button). That will add resources from the export .sob file to your Console.

It may take a few minutes (depending on your internet speed and number of items in the resource) before you can play the content.

Some interesting online content is referenced in the forum.

Available online content usually changes with time, including new content every hour/day/month/etc. That's why Serviio doesn't store the information in its database and why after a restart it will retrieve that feed information again. You can also set the feed cache expiry interval in the console which defines time after which Serviio parses the resource again and checks it for any changes. Alternatively you can force refreshing each individual source.

Subtitles support

Serviio supports delivering external or embedded subtitles to all devices.

Subtitles delivery types

Some of the devices support subtitles out-of-the box, delivered as a text file. Some devices do not have any support for subtitles and require them to be burned into the video stream (hardsubs), thus effectively transcoding the video with the text on the screen.

Note, that when burning subtitles in the stream are enabled, you might experience high CPU usage and possibly playback issues (depending on your hardware). This method is not suitable for low powered NAS devices. Also note that (if on Linux) you will need at least FFmpeg 1.1.1 with libASS to fully utilize Serviio's subtitles support.

Subtitles configuration

If your subtitle file includes accented characters the best bet is to convert them to UTF-8 (which should work for both, softsubs and hardsubs). Serviio, however, gives you the option to try to detect the file encoding. You can also specify the file's character encoding manually, so that it renders correctly on the video stream. Enter the character encoding to the Subtitle character encoding field (e.g. cp1256 for Arabic). You can find available encodings in the libiconv page.

Subtitle file types

A subtitle file can be stored either externally - next to the video file, or can be embedded inside the video file (usually MKV). You can also enable automatic online subtitle downloading. In the case of embedded subtitles, Serviio first extracts the data from the video file and then processes the same way as in the case of an external subtitles file.

Serviio supports these subtitle formats:

  • SubRip (.srt)
  • MicroDVD (.sub)
  • SSA/ASS (.ssa, .ass)
  • SAMI (.smi)
  • VTT (.vtt)
  • MOV open text (embedded)
  • DVD subtitles (embedded, only as hardsubs)
  • HDMV_PGS (embedded, only as hardsubs)
  • IDX/SUB (bitmap, only as hardsubs)

When using an external subtitles file, it has to named with the same name as the video file, except the extension, e.g.:

  • my_movie.avi
  • my_movie.srt

You can also specify the language, e.g.:

  • my_movie.avi
  • my_movie_en.srt
  • my_movie-de.sub
  • my_movie(fra).srt
  • my_movie.cz.srt

Subtitle file selection

There are some rules on how Serviio detects the appropriate subtitle file. Note, that you can enter your preferred language codes, separated by a comma and ordered by preference, on the Languages tab in the console.

External files

For an external file to be recognized, it has to follow the above file name stucture. If you provide one or more language codes (e.g. cze,cz) it will look for files with the language codes in the name, by the language preference (my_movie_cze.srt, my_movie-cz.sub). If no such file exists, it'll try to get the default one (my_movie.srt).

If you don't have a preferred language code set up, it will only look for the default subtitle file (my_movie.srt).

In a case the external (srt) subtitles are not displayed, the file might be corrupted or not suitable for viewing on your device. You might try fixing it with SrtWiz.

You can also force a subtitle file to side-step the language rules. Simply put the word forced into the file name, like:

  • my_movie.avi
  • my_movie.forced.srt
  • my_movie-de.forced.sub
  • my_movie(fra).forced.srt
  • my_movie.cz.forced.srt
The forced subtitle will be selected no matter what your language preference is.

Embedded files

A video file of a certain format (e.g. MKV) may have one or more subtitle tracks embedded inside. If enabled, Serviio will extract one of the tracks into a subtitle file and deliver (as a text (where possible) or hardsubs). For a track to be recognized, it has to have a language tag, be one of the supported types an you have to define preferred language code(s) to match these tracks.

The easiest method of finding out the language code of the embedded subtitle track is executing the bundled ffmpeg tool like this:

ffmpeg -i name_of_the_video_file

Embedded subtitle tracks in FFmpeg output

WARNING: Embedded text-based subtitles might not work for some (large) files, due to the time needed to extract them. It's even more true if the file is stored on a remote drive.

Online subtitles

When enabled, Serviio uses OpenSubtitles.org to try to look up subtitles for all your video files. It is advisable (but not strictly necessary) to register on their site and use the credentials in Serviio in order to avoid certain search limitations.

Online Subtitles configuration

Selecting external file vs. embedded subtitle file vs. online subtitles

In the case a video has all, a matching external subtitle file as well as a matching embedded track and online subtitles, the external file has the highest priority, then the embedded subtitle and then the online subtitle.

On the Go

Access your files anywhere with Pro edition. Use MediaBrowser or one of the Apps to enjoy your content over the Internet.

Control with your voice

You can control Serviio just with your voice and Alexa device. Simply say what you want to watch and let the magic begin.