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.

Transcoding configuration

Transcoding configuration is set up per renderer profile in profiles.xml. There are three types of transcoding. General transcoding of files (Transcoding element), additional transcoding of online files (OnlineTranscoding element) and transcoding used for burning-in subtitles (HardSubsTranscoding element).

Generally, a local file is transcoded if there is a Transcoding or HardSubsTranscoding configuration for it. An online file is transcoded if there is an OnlineTranscoding or (local) transcoding matching it. Generic profile doesn't transcode any local media files, unless they require hardsubs transcoding. Serviio comes with some profiles per-defined but it really is up to the community to create their own configurations for different devices.

Inheritance

Transcoding definitions have a particular rules for inheritance. In the case of OnlineTranscoding and HardSubsTranscoding, if the block is present in the parent profile and child profile doesn't have one, the whole block is inherited. This is not the case with (local) Transcoding block, which is never inherited as a whole.

Each Video or Audio element within a transcoding configuration (both local and online) can be marked for inheritance via forceInheritance attribute. If that is present the particular configuration part will be added to the child's transcoding configuration (with lowest priority, i.e. at the end of configuration list).

An example of transcoding inheritance


    <Profile id="1">
      <Transcoding (A)>
        <Video (A)>
      </Transcoding (A)>
      <OnlineTranscoding (A)>
        <Video (A)>
      </OnlineTranscoding (A)>
      <HardSubsTranscoding (A)>
        <Video (A)>
      </HardSubsTranscoding (A)>
    </Profile>

    <Profile id="2" extendsProfileId="1">
      <Transcoding (B)>
        <Video (B)>
      </Transcoding (B)>
    </Profile>

This will result in profile 2 having it's own local transcoding config (B) and parent's OnlineTranscoding and HardSubsTranscoding config (A).


    <Profile id="1">
      <Transcoding (A)>
        <Video (A) forceInheritance="true">
      </Transcoding (A)>
      <OnlineTranscoding (A)>
        <Video (A)>
      </OnlineTranscoding (A)>
      <HardSubsTranscoding (A)>
        <Video (A)>
      </HardSubsTranscoding (A)>
    </Profile>

    <Profile id="2" extendsProfileId="1">
      <Transcoding (B)>
        <Video (B)>
      </Transcoding (B)>
      <OnlineTranscoding (B)>
        <Video (B)>
      </OnlineTranscoding (B)>
      <HardSubsTranscoding (B)>
        <Video (B)>
      </HardSubsTranscoding (B)>
    </Profile>

This will result in profile 2 having it's own local transcoding config (B) and additional Video config (A) added to it. It'll also have its own OnlineTranscoding and HardSubsTranscoding config (B) without any input from the parent's OnlineTranscoding / HardSubsTranscoding.

Setting up local transcoding

Transcoding configuration is defined in profiles.xml file, per renderer profile. These are the available elements to use:

Transcoding - parent of transcoding configuration

Video transcoding

Video - defines video transcoding definitions; can be one or more, with the elements order being taken in consideration (the first definition that matches a file is used)

Attributes:

  • targetContainer - compulsory; name of container to transcode into; possible values: asf, mpeg (MPEG2PS), mpegts (MPEG2TS), applehttp (HLS)
  • targetVCodec - optional; name of video codec to transcode into or omit this attribute to keep the video stream as it is; possible values: mpeg2video (MPEG2), wmv2 (WMV9), h264
  • targetACodec - optional; name of audio codec to transcode into or omit this attribute to keep the audio stream as it is; possible values: aac, ac3, mp2, mp3, lpcm, wmav2
  • maxVBitrate - optional; max. video bitrate [kbit/sec] or omit to keep the same quality
  • aBitrate - optional; audio bitrate [kbit/sec] to use when transcoding audio track, default is 192
  • aSamplerate - optional; audio sample rate [Hz] to use when transcoding audio track, default is 48000
  • forceVTranscoding - optional; if true, the video stream will always be transcoded even in cases when in could just be rewrapped; default is false
  • forceStereo - optional; if true, audio transcoding involves forcing number of channels to 2; default is false
  • maxWidth - optional; limits transcoded video width to this value. It will cause video transcoding (similar to forceVTranscoding)
  • maxHeight - optional; limits transcoded video height to this value. It will cause video transcoding (similar to forceVTranscoding)
  • DAR - optional; forces the output video to the given display aspect ratio; possible values: 16:9, 4:3, 3:2, 21:9
  • forceSquarePixels - optional; forces the output video to have square pixels (SAR 1:1)
  • forceInheritance - optional; defines whether this transcoding configuration is inherited by child profile

Matches - specifies which media files will fall into a transcoding configuration and will therefore be processed by the transcoding engine; can be one or more, with the elements order being taken in consideration (the first matcher that fits a file is used)

Attributes:

  • container - compulsory; name of container; possible values: * (any), asf (WMV), mpeg (MPEG2PS), mpegts (MPEG2TS), mp4 (MPEG4, MOV), mjpeg, mpegvideo (MPEG1), mpjpeg, matroska (MKV), avi, flv, wtv, ogg, 3gp, rtp, rtsp, applehttp, rm (RealMedia)
  • vCodec - optional; name of video codec of the original file or omit to transcode any video codec in the container; possible values: mpeg2video, mpeg1video, wmv2, mpeg4, msmpeg4, h263, h264, h265, vc1, mjpeg, flv, vp6, vp8, vp9, theora, dvvideo, rv, svq1, svq3, cinepak
  • aCodec - optional; name of audio codec of the original file or omit to transcode any audio codec in the container; possible values: aac, ac3, eac3, mp3, mp2, lpcm, wmav2, wmapro, dca (DTS), dts-hd, flac, vorbis, truehd, amrnb, real, speex, opus
  • profile - optional; H264 profile (in a case of H264 video stream); possible values: baseline, c_baseline, main, extended, high, high_422, high_444, high_10
  • levelGreaterThan - optional; H264 level (in a case of H264 video stream, in combination with profile attribute); possible values: level number, e.g. 4, 4.1, 5, etc.
  • ftypNotIn - optional; a comma separated list of mp4 major brands (ftyp)
  • vFourCC - optional; a comma-separated list of FourCC video codec codes to match against
  • squarePixels - optional; if true, matches videos with SAR (sample/pixel aspect ratio) of 1:1
  • aMultichannel - optional; if true, matches videos with multichannel (more than 2 channels) audio
  • widthGreaterThan - optional; matches videos that have width in pixels more than the provided value
  • heightGreaterThan - optional; matches videos that have height in pixels more than the provided value

Audio transcoding

Audio - defines audio transcoding definitions; can be one or more, with the elements order being taken in consideration (the first definition that matches a file is used)

Attributes:

  • targetContainer - compulsory; name of container to transcode into; possible values: lpcm, mp3
  • aBitrate - optional; audio bitrate [kbit/sec] to use for transcoding, default is 192
  • aSamplerate - optional; audio sample rate [Hz] to use when transcoding audio track, default is 48000
  • forceInheritance - optional; defines whether this transcoding configuration is inherited by child profile

Matches - specifies which media files will fall into a transcoding configuration and will therefore be processed by the transcoding engine; can be one or more, with the elements order being taken in consideration (the first matcher that fits a file is used)

Attributes:

  • container - compulsory; name of container; possible values: * (any), mp4, asf, mp3, mp2, lpcm, flac, ogg, flv, rtp, rtsp, adts, wv, mpc, ape, dsf
  • codec - optional; codec of the audio stream; possible values: alac, wmalossless, wmapro

Image transcoding

Image - defines image transcoding definitions; can be one or more, with the elements order being taken in consideration (the first definition that matches a file is used)

Attributes:

  • forceInheritance - optional; defines whether this transcoding configuration is inherited by child profile

Matches - specifies which media files will fall into a transcoding configuration and will therefore be processed by the transcoding engine; can be one or more, with the elements order being taken in consideration (the first matcher that fits a file is used)

Attributes:

  • container - compulsory; name of container; possible values: jpeg, raw
  • subsampling - optional; chroma subsampling; possible values: YUV444, YUV422, YUV420, YUV411

Setting up online transcoding

Online transcoding configuration is defined in profiles.xml file, per renderer profile and is inherited from parent profile (as a whole). These are the available elements to use:

OnlineTranscoding - parent of online transcoding configuration. It includes the same sub element (with the exception of Matches) as transcoding above.

Attributes:

keepStreamOpen - optional; specifies whether transcoded stream should be kept open for a period of time for possible future incoming requests; default true

Matches - Includes the same attributes as Matches of respective local audio/video Matches elements, with the addition of:

Attributes:

  • contentType - optional; type of online content; possible values: vod (non-live-stream online content), live (live stream), any; default is 'any'

Setting up hardsubs transcoding

Hardsubs transcoding configuration is defined in profiles.xml file, per renderer profile and is inherited from parent profile (as a whole). These are the available elements to use:

HardSubsTranscoding - parent of hardsubs transcoding configuration. It includes a single Video element (with the same attributes as local Transcoding). The Video element doesn't include any matches sub-elements, as it matches all content by default.

Examples of transcoding configurations

There are two way how to get content your device doesn't support to play on it:

  • rewrapping (remuxing) the data streams into a different container
  • transcoding data streams using a different codec

Rewrapping media files

If the device supports audio or video stream but not the container file it's much better to set up only remuxing the streams into a different container. That will result in low CPU usage and no quality loss of the streams. Example might be remuxing MKV file with H264 video and aac audio into mpeg2ts file. The audio and/or video streams stay the same, only the container changes.

Example of a light-weight transcoding (only audio track) configuration is below. This configuration is not CPU intensive, because audio transcoding doesn't require much resources and the video stream is reused as is (no targetVCodec is defined).


<Transcoding>   
 <Video targetContainer="mpegts" targetACodec="lpcm">
  <Matches container="matroska" aCodec="dca"/>
 </Video>
</Transcoding>

It means: transcode matroska files with DTS audio track into MPEG2 TS with LPCM track, but keep the video stream whatever it is (probably H264). All other matroska files will be played in their native format.

Transcoding media files

Sometimes remuxing is not the option. It is the case mainly when the audio/video stream codec is not supported by the player at all. The stream(s) will have to be transcoded (possible quality loss) into a different format. This also involves a lot of CPU time, especially when handling HD content. An example might be transcoding MPG4 with H264 video content into ASF container including WMV9 video.


<Transcoding>
 <Video targetContainer="asf" targetVCodec="wmv2" targetACodec="wmav2" maxVBitrate="15360">
  <Matches container="matroska" />
  <Matches container="mpeg" />
  <Matches container="mpegvideo" />
 </Video>
</Transcoding>

This example means: transcode all mpeg1, mpeg2ps and matroska files into asf file with wmv video codec, wma audio codec and max. video bitrate of 15360 kbit/sec.

By adding the following snippet we also define mpeg2ts files with aac audio codec (video codec doesn't matter) to use another target file format:


<Video targetContainer="mpeg" targetVCodec="mpeg2video" targetACodec="ac3">
  <Matches container="mpegts" aCodec="aac"/>
</Video>

F.A.Q.

Generic

Installation

Configuration

Console


My device doesn't see Serviio

This could be caused by you having multiple network cards / interfaces on the machine and Serviio using wrong one. Select the right network card in the 'Bound IP address' field in Network Settings section in the console or pass the system variable serviio.boundAddr including the Serviio server's IP address when starting the server.

Also make sure that TCP port 8895 and UDP 1900 are open in your firewall.

If you are on a Linux based OS, make sure you set up multicast routes properly.

If on Windows, you can push the Serviio service down in starting order.

There have been problems with some routers' IGMP settings. Turning IGMP proxy off resolved the issue.


How to start/stop/restart the Serviio service on Windows

Serviio (by default) runs as a Windows service on Windows machines and is started automatically when the machine boots up. Locate the Serviio service and perform the operation you require (click Start, click Run, type services.msc, and then click OK)


How to start/stop/restart the Serviio service on OSX

Serviio (by default) runs as a daemon (run by root) on OSX machines and is started automatically when the machine boots up. You can run these commands in Terminal to perform the commands:

  • start the server

    sudo launchctl load -F /Library/LaunchDaemons/org.serviio.server.plist

  • stop the server

    sudo launchctl unload /Library/LaunchDaemons/org.serviio.server.plist


How to uninstall Serviio on OSX

To uninstall Serviio from your OSX machine, you have to stop the Serviio daemon, stop the Serviio-Console application. Remove the ServiioConsole from your Applications folder. Then remove the server by executing these commands in Terminal:

sudo rm -rf /Library/Application\ Support/Serviio
sudo rm /Library/LaunchDaemons/org.serviio.server.plist
rm -rf ~/Library/Application\ Support/Serviio-Console-Wrapper


Where is Serviio installed

Serviio is installed, by default, in these locations

  • Windows - c:\Program Files\Serviio
  • OSX - /Library/Application Support/Serviio

My Windows Serviio service doesn't start for a user with no password

To run the Windows service under a user with no password you have to change the default security setting in Windows:

  1. Open Local Security Policy under Control panel / Administrative tools
  2. Select Security Settings / Local Policies / Security Options
  3. Find policy Accounts: Limit local account use of blank passwords to console logon only
  4. Change its value to Disabled

If you have a Home edition of Windows, the above settings will not be available. You will have to edit your registry instead (using regedit.exe), although it is recommended for experienced users only. Find key

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\LimitBlankPasswordUse

and change its value from 1 to 0.

Alternatively you can run the service under another user or the Local System account (it might cause problems with file sharing and FFmpeg execution) or change your current user to have a password.


My files (on remote drive) are not scanned

Make sure the user that runs Serviio server/service has got access to the shared folders. If you are on Windows, check that the user running the Windows service has got access. To run the service as a different user go to Services (from the Windows Control Panel → Administrative Tools or typing "Services.msc" in the Run command on Start menu), select Serviio, right-click -> Properties, Log On tab, enter the user's details and restart the service.

To access a NAS device the exact same set of credentials must be created on the NAS device. The Windows credentials must be a local user and not a domain user. The user must have "Run As Service" rights. The remote path must be entered as a UNC path in the Serviio Console (e.g. \\server\folder)), mapped drive letters will not work since the user running the Serviio service is not aware of your mapped drives.


Cannot share a folder on external drive or Downloads folder (OSX Catalina)

OSX Catalina introduced tight security constraints for software running on your Mac. This results in you having to manually allow Serviio access to your resources. If you want to add a shared folder that is now restricted (e.g. Downloads, Desktop, a remote drive), follow these steps:

  • go to the Serviio console, add a Shared folder and click Browse (you will not see the restricted folders at this moment)
  • in your operating system, go to System Preferences -> Security & Privacy -> Provacy -> Full Disk Access
  • there should be an unselected java entry (this is Serviio)
  • click the lock at the bottom, enter your password and select the checkbox
  • go back to the Serviio console, add a Shared folder and click Browse (you should now see all your folders and remote drives)


My files with accents in their names are not detected

If you are on a Linux based OS, make sure your system locale / default character set is set to UTF-8. Examples on how to make this work for Linux are provided in the forum here and here.


What to do when playback stutters

The quality of media streaming may depend on a few main variables

  • the quality of your home network - wired network is always preferable, especially for streaming HD videos. If you are on a wireless network, make sure the signal is strong, the device is located within a reasonable distance of the router, and that the WiFi channel you are using is being used by as few of your neighbours as possible. It is also always a good idea to invest in a quality router, designed for high bitrate operation.
  • the power of the computer running Serviio - this only relates to transcoded videos, which might require considerable resources from your PC to be able to play smoothly, especially CPU. If your computer has multi-core CPU, you can assign additional CPU cores to the transcoder in the console.
  • the way the file has been encoded - some high quality video files might be 'too much' for your device with its limited processing power and memory and you might experience stuttering in fast moving scenes

Are there other Console User Interfaces available?

Apart from the Serviio Console, you can now use a few others.


Why my videos don't appear in Movies or Series category?

If you can see your videos in the Folders category, but not in Series or Movies category, it's due to the descriptive metadata being missing. Make sure you name your file according to the rules and also confirm the metadata exists on one of the online databases.


Some files won't play on Linux

It is possible the file needs to be transcoded. Check your Serviio log file for any FFmpeg errors. Make sure your FFmpeg is up-to-date, ideally built from sources provided on the Download page.

You might find some information on how to build FFmpeg on the Wiki.


How do I watch a video from a website?

Serviio supports watching online videos and listening to online audio files. You can add live stream addresses, RSS feeds (for example your favourite podcasts) or content from complex websites, like YouTube. You will have to install plugins for some feeds and all the complex websites in order to access the content.


Can I access the Console or MediaBrowser via HTTPS?

You can access the Console securely on

https://localhost:23523/console

You can access the MediaBrowser securely on

https://localhost:23524/mediabrowser

You will need to make sure that you have these ports open in your firewall (Serviio will not do that automatically for you).

Please note that viewing video over https in MediaBrowser is extremely CPU intensive and you might experience stuttering.


How to upgrade Serviio to the latest version?

If you are upgrading to the latest version and want to keep all your settings and media library entries, do not uninstall your current Serviio version - a simple installation over the current one will do.

Windows
  1. Simply run the installer and use the same installation location of your current version
Linux
  1. Stop Serviio server and console
  2. remove all folders inside the installation folder, apart from library and plugins
  3. copy files from the Serviio installation archive over the current installation
OSX
  1. Simply run the installer and use the same installation location of your current version

Note: This only works for upgrading, not downgrading.


How to setup Serviio Pro for access from the internet

You have to setup your router to enable access you your Serviio server from outside your network. Follow the setup guide.


How to access the console from a different machine than the server

Simply open your favourite web bowser and enter this URL:

http://server_ip_address:23423/console

Make sure that port 23423 is open on the server machine.


How to pass system properties to Serviio

System properties are provided to the server in the form of -D<property_name>=<property_value>.

Windows
  • If you use the Windows service to run the server edit file user.vmoptions (located in the config directory) and add the property there (each property per new line)
  • If you use serviio.bat to run the server edit the file and add the variable to JAVA_OPTS property.
Linux

Edit file serviio.sh and add the variable to JAVA_OPTS property.

OSX

Edit file /Library/Application Support/Serviio/bin/serviio.sh and add the variable to the executable command.


What do the colored dots in renderers list mean?

These represent the status of devices on your network. Green means the device is currently on. Red means the device is currently off. Amber means the device doesn't provide the means to figure out whether it's on or not.


I get an error when starting the Console on Windows XP/Vista

The executable ServiioConsole.exe is only supported on Windows 7 and newer. If you are on an older system, you can still access the console by using your favourite browser and going to

http://localhost:23423/console

Editing renderer profiles

Serviio includes the possibility to add / edit renderer profiles . This gives the users the means to make Serviio work with their rendering devices (e.g. TV) that is not yet officially supported by the latest release. This little guide should help users to add a new renderer profile ("profile" from now on).

Basics

Profiles definition is stored in file config/profiles.xml in the Serviio installation directory. It is a simple XML file which you can edit in any text editor or even better in a XML editor (where you can facilitate schema validation).

If you want to have your profile changes persisted across upgrades, you can add new profiles to a file config/user-profiles.xml. All the syntax and rules described below apply to this file as well.

The process of getting the changes into effect is following:

  1. edit profiles.xml
  2. restart Serviio server; this means restarting the actual Serviio server process, e.g. Windows service or Linux/OSX process, not just the UPnP server via the console buttons
  3. assign your profile to your device (IP) in the console and Save the setting
The basic structure of profiles.xml is following:


<Profiles>
  <Profile id="[profile_id]" name="[name of profile]" extendsProfileId="[id_of_parent_profile]"
           alwaysEnableTranscoding="[true/false]">
    <ContentDirectoryMessageBuilder/>
    <Detection/>
      <UPnPSearch>
        <FriendlyName>[regex]</FriendlyName>
        <ModelName>[regex]</ModelName>
        <ModelNumber>[regex]</ModelNumber>
        <ProductNumber>[regex]</ProductNumber>
        <Server>[regex]</Server>
        <Manufacturer>[regex]</Manufacturer>
      </UPnPSearch>

      [and/or]

      <HttpHeaders>
         <HTTP_header_name>[regex]</HTTP_header_name>
      </HttpHeaders>
    </Detection>     
    <ProtocolInfo/>     
    <DeviceDescription>       
      <FriendlyName/>       
      <ModelName/>   
      <ModelNumber/>  
      <ExtraElements/>
    </DeviceDescription>     
    <ResourceTransportProtocolHandler/>
    <ContentDirectoryDefinitionFilter/>
    <H264LevelCheck/>
    <MediaFormatProfiles>
       <MediaFormatProfile mime-type="[mime_type]" name="[DLNA_format_profile_name]"/>       

       [... more profiles ...]

    </MediaFormatProfiles>
    <Transcoding>
        <Video targetContainer="[container]" targetVCodec="[video_codec]" targetACodec="[audio_codec]"
               maxVBitrate="[bit_rate]">
            <Matches container="[container]" vCodec="[video_codec]" aCodec="[audio_codec]"/>

            [... more file matches ...]

         </Video>

         <Audio targetContainer="[container]">
            <Matches container="[container]"/>

            [... more file matches ...]

         </Audio>
  
         <Image>
            <Matches container="[container]"/>

            [... more file matches ...]

         </Image>

        [... more transcoding definitions ...]

    </Transcoding>
    <OnlineTranscoding>
        
        [... the same as Transcoding ...]
  
    </OnlineTranscoding>
    <GenericTranscoding>
        <Video> ... </Video>
    </GenericTranscoding>
    <AutomaticImageRotation />
    <LimitImageResolution />
    <Subtitles>
        <SoftSubs mime-type="[mime_type]" type="[srt/vtt]" character-encoding="utf-8"/>
        <HardSubs>
            <BitmapBased supported="true"/>
            <TextBased supported="true">
               <RequiredFor container="*"/>
               [... more RequiredFor ...]
            </TextBased>
        </HardSubs>                  
    </Subtitles>
    <ThumbnailsResolution/>
    <AllowChunkedTransfer forced="true"/>
  </Profile>

  [... more profiles ...]

</Profiles>

In order to add a new profile you'll have to add a new <Profile> block to the file and restart Serviio.

Inheritance

Profiles in Serviio are based on inheritance. It means that Profile B can inherit from Profile A and only change or add certain values. The remaining values will be retained from the parent Profile A. Please note that not all the values are inherited (e.g. transcoding, see below).

Generic Profile (id=1) should be used as a parent for most other profiles. This profile defines values that follow relevant specifications and doesn't include any transcoding definitions for local content. These are the values that are inherited can be "overwritten" in the child profiles:

  • ContentDirectoryMessageBuilder
  • ProtocolInfo
  • DeviceDescription (and all/some of its sub-elements)
  • ResourceTransportProtocolHandler
  • ContentDirectoryDefinitionFilter
  • MediaFormatProfiles
  • H264LevelCheck
  • AutomaticImageRotation
  • LimitImageResolution
  • Subtitles
  • Transcoding (special rules)
  • OnlineTranscoding (special rules)
  • GenericTranscoding
  • ThumbnailsResolution
  • AllowChunkedTransfer

Element description

Profile - includes values of a renderer profile

Attributes:

  • id - ID of the profile, must be a unique value
  • name - name of the profile
  • extendsProfileId - ID of a parent profile in a case the profile has one
  • alwaysEnableTranscoding - if true, it overides any user setting related to turn off transcoding; default is false

ContentDirectoryMessageBuilder - a Java class responsible for generating communication data - don't change this

 

Detection - used to automatically detect the renderer

  • UPnPSearch - detects device by issuing a UPnP M-SEARCH request and (for the devices that support it) matches selected device description fields (see above) using the provided regular expression. This is the preferred method.
  • HttpHeaders - detects device based on HTTP headers in the incoming requests

ProtocolInfo - type of protocol info that will be published to the renderer. Can be:

  • DLNA - should be used for DLNA compliant devices
  • simple - simple UPnp-type protocol info, used by non-DLNA devices like XBox 360

DeviceDescription - defines how Serviio will be identified to the renderer - don't change this

ResourceTransportProtocolHandler - a Java class implementing a specific additional code for handling resource transport; includes manufacturer-specific logic

ContentDirectoryDefinitionFilter - a Java class implementing filter of library definition, needed by some devices

MediaFormatProfiles - defines set of media format profiles (or their changes) the renderer expects. All the format profiles are defined for Generic profile and you should only change those that cause your media files to be unrecognized by your device.

Attributes:

  • mime-type - mime-type to be used as an identified of media files with this format profile
  • name - format profile name to be sent to the device as a part of protocol info (DLNA_PN field), if different from the internal format profile name

H264LevelCheck - type of check for H264 level the device uses. Can be:

  • HEADER - only takes into accunt the level value stored in H264 header
  • FILE_ATTRIBUTES - only takes into account the level computed from the file's characteristics (e.g. number of ref frames)
  • ANY - takes into account both of the above and uses the higher from the two values

Transcoding - defines transcoding configuration for local/online files.

OnlineTranscoding - defines transcoding configuration for online files.

GenericTranscoding - defines transcoding configuration to be used in specific cases, like hard subs encoding and video stacking.

AutomaticImageRotation - If 'true' Serviio will rotate images based on EXIF metadata (where present) so that they are correctly displayed on the screen

LimitImageResolution - If 'true' Serviio will resize images whose resolution is higher than 4096x4096 (specification maximum resolution)

Subtitles - includes definition of subtitles rendering

  • SoftSubs - delivers subtitles to the renderer as an external resource; only some renderers support this
  • HardSubs - encodes the subtitles text or bitmaps into the video stream. It can specify which video containers require this delivery type (the other using soft subs)

ThumbnailsResolution- resolution of the thumbnails to be server to the renderer. Can be:

  • DLNA - standard DLNA thumbnail resolution
  • HD - higher resolution thumbnails if supported by the renderer

AllowChunkedTransfer- if 'true' it will use chunked HTTP transfer for HTTP/1.1 communication where required. If the forced attribute is set to 'true', it will use chunked transfer regardless HTTP version.

Example

This profile is for PS3. It uses user agent for automatic detection and overwrites mime-type for AVI files. The other values are inherited from Generic profile.


<Profile id="4" name="Playstation 3" extendsProfileId="1">
 <Detection>
  <HttpHeaders>
   <X-AV-Client-Info>.*PLAYSTATION 3.*</X-AV-Client-Info>
  </HttpHeaders>
 </Detection>
 <MediaFormatProfiles>
   <MediaFormatProfile mime-type="video/divx">AVI</MediaFormatProfile>
 </MediaFormatProfiles>
</Profile>

Metadata extraction

Serviio supports priority-based configuration of metadata extractors. The idea is that all (enabled) extractors will run for each media file and try to get as much metadata as possible. Metadata found by an extractor with higher priority overwrite metadata found by an extractor with lower priority. The current release includes these extractors (by priority):

  • Embedded metadata
  • Online metadata sources
  • Swisscenter
  • XBMC
  • Media Center Master
  • Local poster

Embedded metadata

Some media files may include metadata stored in the media files themselves. This is the case of audio files (ID3 tags, WMA tags, etc) and some image files (EXIF tags). For video files this extractor generates the video's thumbnail.

Online metadata sources

This is currently only supported for video files. Serviio can retrieve metadata for movies (using www.themoviedb.org) and TV series (using www.thetvdb.com).

It will parse the name of your media file (and its parent folder) and try to make out the movie/series name. If found the metadata is stored in the media library. These are the file name patterns that will identify an episode of a series (season 1, episode 2):

  • file name includes S01E01, S1E2 or S1E01 (e.g. MySeries S01E02.avi)
  • file name includes S01.E01, S1.E2 or S1.E01 (e.g. MySeris S01.E02.avi)
  • file name includes S01_E01, S1_E2 or S1_E01 (e.g. MySeries S01_E02.avi)
  • file name includes 01x02, 1x2 or 1x02 (e.g. MySeries 01x02.avi)
  • file name starts with 1 02 (e.g. 1 02 MySeries.avi)
  • file name starts with 01 02 (e.g. 01 02 MySeries.avi)
  • file name includes 'season 1 episode 02' (e.g. MySeries season 1 episode 02.avi)
  • file name includes 01-02 -, 01 - 02 -, 1 - 2- (e.g. 01-02 - MySeries - EpisodeTitle.avi, MySerie - 1 - 02 - Episode name.avi)
The other files will be treated as movies.

In a case there are other movies with the same title, but different release years, you can include the year in the title of the video (or the parent folder), e.g. 'My movie (2005)'.

If your video cannot be recognized try to name your file or folder more accurately and double check if the video is present in the above online databases. If not, feel free to contribute to them and add or edit the metadata. Alternatively you can give Serviio a hint by including the IMDb ID in the file name.

Swisscenter

Serviio supports importing XML files generated by Swisscenter media center. Using this extractor will enable you to completely manage your media library metadata via Swisscenter.

XBMC

Serviio supports importing .nfo XML files generated by XBMC. Using this extractor will enable you to completely manage your media library metadata via XBMC.

For movie metadata, Serviio looks for a file movie.nfo or [video_file_name].nfo. For episodic content, Serviio looks for [video_file_name].nfo and tvshow.nfo (in the same or any parent folder).

Media Center Master

Serviio supports importing Media Center Master metadata files.

For movie metadata, Serviio looks for a file movie.xml. For episodic content, Serviio looks for series.xml file in the parent folder and metadata/[filename].xml for the episode details.

Local poster

If there is a local image file representing a music album or a video it can be used. These are the files that will be looked for:

  • Audio: folder.jpg, AlbumArt.jpg, cover.jpg, front_cover.jpg, {something}[front].jpg
  • Video: dvdcover.jpg, movie.jpg, name including "poster".jpg, {media_file_name}.jpg, {media_file_name}.tbn, {media_file_name}.thm, {media_file_name}-thumb.jpg, {media_file_name}-poster.jpg

Metadata management tools

bliss!

There are some 3rd party tools that can help you manage your media files' metadata. You can, for example, easily manage your audio metadata using bliss!

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.