Serviio 1.4.1.2 package for Synology NAS

Serviio 1.4 in DSM Package Center

Many people are using the Synology packages I created for Serviio and Java, and most of them will have installed from my package repository making the upgrade possible with just one click.

This new version updates Serviio to version 1.4.1.2 (release notes). The Media Browser has been redesigned (Pro version feature), and is designed to allow direct playback of media on tablet devices without the need for dedicated apps. Please note that Apple iOS devices require video in H.264 and audio in stereo AAC format when streaming. Most Synology NAS models lack the CPU power to transcode video into H.264 and furthermore, licensing restrictions prevent distribution of an FFmpeg binary with libfdk_aac support. As a result, realtime AAC audio transcoding on older ARMv5 NAS models (which lack an FPU) is also out of reach, even if the source video is already H.264.

Renderers that do not natively support subtitles via DLNA can have them burned into the video during transcoding, but in general a NAS lacks the CPU power to do this (more info here). Please comment if this works nicely on the Intel or ARMv7 models. ARMv5 and PowerPC are confirmed to be too slow. If you absolutely need hard subs for a particular film, you could start playback on your device then stop it and Serviio will continue transcoding. Then you will be able to try again in a few hours since it will play from the transcode cache folder.

For burning subtitles into video streams the package downloads the free DejaVu font family from SourceForge during installation, since DSM does not include any fonts. Non-Latin character encodings should be supported as long as fonts with support are provided. The DejaVu font does not include support for Chinese glyphs for instance. You will need to copy new fonts to the folder /volume1/@appstore/Serviio/lib/dejavu-fonts-ttf-2.33/ttf.

I was able to compile FFmpeg 2.1 for all four supported architectures with libx264 and libass support (and dependent libraries) while using the libs included within DSM as far as possible. Only the Intel CPU will be of any practical use transcoding to H.264, since the other CPUs lack vector support (no AltiVec in QorIQ/PowerQUICC, and no NEON in Armada 370/XP).

As with the last few versions of the package, there is no Web UI included so I recommend that you manage Serviio using Serviio 1.4 Console installed on another computer. Integrating a Web UI into the package can be tricky because they do introduce problems of their own (bugs, browser incompatibilities), their development tends to lag behind the Serviio releases which can significantly delay my releases, and this also means I have to re-package as they get updated. Maintaining the CSS was also a lot of work. For the relatively small benefit the WebUI brings, it doesn’t really justify the effort. It only takes a few minutes to set up a remote console.

 

Instructions

The package can be installed on an unmodified NAS – no hacking is required.

  • Firstly, in the DSM User control panel enable the User Home service.
  • Open the DSM Package Center. In Settings -> Package Sources add my package repository URL which is http://packages.pcloadletter.co.uk
  • Install either one of my Java SE Embedded Synology packages (Java 6 or Java 7). Only Marvell Kirkwood, Marvell Armada 370/XP, Intel, and Freescale QorIQ PowerPC CPUs are supported, or PowerQUICC running DSM 5.0 or later, so please check which CPU your NAS has.
  • Install Serviio using DSM’s Package Center.
  • Download any Serviio online content plugins that you require and leave the .groovy files in your NAS’s /volume1/public/serviio/plugins folder (where /volume1 is you primary storage volume). This folder is created automatically by the package installer.
  • Download and install Serviio on another computer (selecting only the Console when prompted) and configure it to connect to your NAS:
    For Mac OS find Serviio-Console, right-click, then Show Package Contents. Use TextEdit to open Contents/info.plist and add this towards the end of the file after the last key and string entries (Properties section):
    <key>serviio.remoteHost</key>
    <string>192.168.1.100</string>

    ..replacing that IP with the IP of your NAS obviously. Then save, navigate back the Serviio folder and launch Serviio-Console again.
    On Windows, use Notepad to open ServiioConsole.exe.vmoptions (in the Serviio/bin folder) and add the line:
    -Dserviio.remoteHost=192.168.1.100
    On a Linux client, add this same parameter to the JAVA_OPTS in Serviio/bin/serviio-console.sh
    Do not make this change on the NAS – only on the computer that runs the console.
  • Since this console binding uses a static address you should reserve this particular IP address for your NAS (most home broadband routers will let you do this in the DHCP options), or use a static IP address. This will also prevent Serviio appearing multiple times in the menus of your renderer devices.
  • Once the remote console is connected be aware that everything it indicates relates to the NAS, *not* to the Serviio installation on your computer.
 

Notes

  • In the console disable ‘Generate thumbnails for local videos’ in the Metadata tab. Failure to do this will make adding videos to your library very slow. With this disabled Serviio will still fetch thumbnail images automatically from the online databases.
  • Don’t alter the transcoded files location on the Transcoding tab, it’s already set to a sensible location. This particular folder is deleted each time your NAS restarts, and Serviio cleans up its temp files automatically in any case.
  • When adding folders to the media library use the Add Path button (not Add Local). You will need to specify the folder path in the NAS’s Linux notation, for example /volume1/public/videos
  • Don’t forget to use the Users control panel in DSM to grant permission for the Serviio user to read your files (if they’re not in the public share).
  • When closing the Console, notice that ‘Exit Serviio’ quits the Console and also stops Serviio running on the NAS. To only quit the Console, be sure to select ‘Exit Serviio Console’ instead.
  • The package will allow future upgrades while preserving the media database, as long as Serviio itself is ok with that.
  • If you’re upgrading from a previous Serviio version you should update your online content plugins.
  • You can see Serviio’s log by clicking More in the Package Center.
  • The URL of the MediaBrowser is also displayed there (http://IPofYourNAS:23424/mediabrowser). If you want to use the MediaBrowser from a remote location you would need to either port forward 23424 on your router, or use SSH tunnelling. You can also manage Serviio remotely by SSH tunnelling port 23423 which the console uses.
  • If you have upgraded your DSM version and have lost unicode character support in Serviio, you will need to remove and reinstall the Java package which will fix the system locale support (DSM updates break this unfortunately).
  • Package Center installs the application to /volume1/@appstore/Serviio though from what I understand, on multi-volume systems the user is prompted for a destination volume. If you need to edit device profiles or enable debug logging then that’s where you’ll find the files. You will need to use an SSH session to access this folder – it’s not browsable in DSM’s File Station. The simplest way to edit these files if you’re not really confident with Linux is to install Merty’s Config File Editor package, which requires the official Synology Perl package to be installed too (since DSM 4.2). Load Config File Editor, then in the dropdown menu edit Config File Editor’s own config (it’s the last in the list) and add the lines:
    /volume1/@appstore/Serviio/config/profiles.xml,Serviio-profiles
    /volume1/@appstore/Serviio/config/log4j.xml,Serviio-logging

    Make sure to add an extra blank line underneath, save, then relaunch CFE and you’ll have an entry for Serviio in the dropdown. You’ll need to restart the Serviio package for any changes to take effect.
  • Bear in mind that a NAS, even an Intel Atom powered one, is unlikely to have sufficient CPU power to manage realtime video transcoding (e.g. from DivX to MPEG2), though it will manage remuxing MKV to M2TS and realtime audio transcoding. If you have a DLNA renderer with good format support then this isn’t an issue.
  • Unfortunately for this same reason the MediaBrowser is probably of limited value if you run Serviio on a NAS, since it uses realtime video transcoding, but I have nonetheless taken several steps to mitigate this. I have modified the FlowPlayer application profile to play AAC audio natively (you will only get the L+R channels from a multichannel file), and I have been able to integrate the integer maths libshine MP3 encoder into my build of FFmpeg for ARM CPUs, which allows you to listen to FLAC music transcoded to MP3 in realtime (useful for wifi music players for instance). I used a wrapper script to force libshine’s encoding bitrate to 320Kbps at all times since it didn’t increase the load, and it hides this simple encoder’s slight lack of quality. Source code for libshine is available here.
  • I have left the FFmpeg wrapper script in the package even when not in use (in the Serviio/bin folder), because it’s still useful for people trying to test a particular workaround or encoder setting. The wrapper was a really tricky script to get working due to variable expansion precedence issues and quote handling. If you need it, just change the ffmpeg.location system property in /volume1/@appstore/Serviio/bin/serviio.sh (changing the location to /volume1/@appstore/Serviio/bin/ffmpeg-wrapper.sh).
 

Package scripts

For information, here are the package scripts so you can see what it’s going to do. You can get more information about how packages work by reading the Synology Package wiki.

installer.sh

#!/bin/sh

#--------SERVIIO installer script
#--------package maintained at pcloadletter.co.uk

DOWNLOAD_PATH="http://download.serviio.org/releases"
DOWNLOAD_FILE="serviio-1.4.1.2-linux.tar.gz"
EXTRACTED_FOLDER="serviio-1.4.1.2"
DOWNLOAD_URL="${DOWNLOAD_PATH}/${DOWNLOAD_FILE}"
DAEMON_USER="`echo ${SYNOPKG_PKGNAME} | awk {'print tolower($_)'}`"
DAEMON_PASS="`openssl rand 12 -base64 2>/dev/null`"
DAEMON_ID="${SYNOPKG_PKGNAME} daemon user"
SYNO_CPU_ARCH="`uname -m`"
[ "${SYNO_CPU_ARCH}" == "x86_64" ] && SYNO_CPU_ARCH="i686"
NATIVE_BINS_URL="http://packages.pcloadletter.co.uk/downloads/serviio1.4-native-${SYNO_CPU_ARCH}.tgz"   
NATIVE_BINS_FILE="`echo ${NATIVE_BINS_URL} | sed -r "s%^.*/(.*)%\1%"`"
FONTS_URL="http://sourceforge.net/projects/dejavu/files/dejavu/2.33/dejavu-fonts-ttf-2.33.tar.bz2"
FONTS_FILE="`echo ${FONTS_URL} | sed -r "s%^.*/(.*)%\1%"`"
INSTALL_FILES="${DOWNLOAD_URL} ${NATIVE_BINS_URL} ${FONTS_URL}"

source /etc/profile
TEMP_FOLDER="`find / -maxdepth 2 -name '@tmp' | head -n 1`"
PUBLIC_FOLDER="`cat /usr/syno/etc/smb.conf | sed -r '/\/public$/!d;s/^.*path=(\/volume[0-9]{1,4}\/public).*$/\1/'`"
PLUGINS_PATH="/`echo $TEMP_FOLDER | cut -f2 -d'/'`/public/serviio"



preinst ()
{
  if [ -z ${JAVA_HOME} ]; then
    echo "Java is not installed or not properly configured. JAVA_HOME is not defined. "
    echo "Download and install the Java Synology package from http://wp.me/pVshC-z5"
    exit 1
  fi
  
  if [ ! -f ${JAVA_HOME}/bin/java ]; then
    echo "Java is not installed or not properly configured. The Java binary could not be located. "
    echo "Download and install the Java Synology package from http://wp.me/pVshC-z5"
    exit 1
  fi
  
  #is the User Home service enabled?
  UH_SERVICE=maybe
  synouser --add userhometest Testing123 "User Home test user" 0 "" ""
  UHT_HOMEDIR=`cat /etc/passwd | sed -r '/User Home test user/!d;s/^.*:User Home test user:(.*):.*$/\1/'`
  if echo $UHT_HOMEDIR | grep '/var/services/homes/' > /dev/null; then
    if [ ! -d $UHT_HOMEDIR ]; then
      UH_SERVICE=false
    fi
  fi
  synouser --del userhometest
  #remove home directory (needed since DSM 4.1)
  [ -e /var/services/homes/userhometest ] && rm -r /var/services/homes/userhometest
  if [ ${UH_SERVICE} == "false" ]; then
    echo "The User Home service is not enabled. Please enable this feature in the User control panel in DSM."
    exit 1
  fi
    
  cd ${TEMP_FOLDER}
  for WGET_URL in ${INSTALL_FILES}
  do
    WGET_FILENAME="`echo ${WGET_URL} | sed -r "s%^.*/(.*)%\1%"`"
    [ -f ${TEMP_FOLDER}/${WGET_FILENAME} ] && rm ${TEMP_FOLDER}/${WGET_FILENAME}
    wget ${WGET_URL}
    if [[ $? != 0 ]]; then
      if [ -d ${PUBLIC_FOLDER} ] && [ -f ${PUBLIC_FOLDER}/${WGET_FILENAME} ]; then
        cp ${PUBLIC_FOLDER}/${WGET_FILENAME} ${TEMP_FOLDER}
      else     
        echo "There was a problem downloading ${WGET_FILENAME} from the official download link, "
        echo "which was \"${WGET_URL}\" "
        echo "Alternatively, you may download this file manually and place it in the 'public' shared folder. "
        exit 1
      fi
    fi
  done

  exit 0
}


postinst ()
{
  #create serviio daemon user
  synouser --add ${DAEMON_USER} ${DAEMON_PASS} "${DAEMON_ID}" 0 "" ""
  
  #determine the serviio user homedir and save that variable in the user's profile
  #this is needed because librtmp needs to write a file called ~/.swfinfo
  #and new users seem to inherit a HOME value of /root which they have no permissions for
  DAEMON_HOME="`cat /etc/passwd | grep "${DAEMON_ID}" | cut -f6 -d':'`"
  su - ${DAEMON_USER} -s /bin/sh -c "echo export HOME=\'${DAEMON_HOME}\' >> .profile"
  
  #fontconfig configuration which is needed for libass subtitles
  su - ${DAEMON_USER} -s /bin/sh -c "echo export FONTCONFIG_FILE=fonts.conf >> .profile"
  su - ${DAEMON_USER} -s /bin/sh -c "echo export FONTCONFIG_PATH=${SYNOPKG_PKGDEST}/config/fonts >> .profile"

  #extract the downloaded Serviio archive
  cd ${TEMP_FOLDER}
  tar xzf ${TEMP_FOLDER}/${DOWNLOAD_FILE}
  rm ${TEMP_FOLDER}/${DOWNLOAD_FILE}
  cp -R ${TEMP_FOLDER}/${EXTRACTED_FOLDER}/* ${SYNOPKG_PKGDEST}
  if [ ! -z "${EXTRACTED_FOLDER}" ]; then
    rm -r ${TEMP_FOLDER}/${EXTRACTED_FOLDER}
  fi
  if [ ! -d "${PLUGINS_PATH}/plugins" ]; then
    mkdir -p ${PLUGINS_PATH}/plugins
  fi
  
  #extract CPU-specific additional binaries
  cd ${SYNOPKG_PKGDEST}/lib
  tar xzf ${TEMP_FOLDER}/${NATIVE_BINS_FILE} && rm ${TEMP_FOLDER}/${NATIVE_BINS_FILE}
  mv ${SYNOPKG_PKGDEST}/lib/ffmpeg ${SYNOPKG_PKGDEST}/bin
  ${SYNOPKG_PKGDEST}/bin/ffmpeg -version > /dev/null 2>&1 || (
    #this system is running an older DSM with missing dependencies, fetch more libs
    NATIVE_BINS_URL=`echo ${NATIVE_BINS_URL} | sed -e "s/.tgz/-oldDSM.tgz/"`
    NATIVE_BINS_FILE="`echo ${NATIVE_BINS_URL} | sed -r "s%^.*/(.*)%\1%"`"
    wget ${NATIVE_BINS_URL}
    tar xzf ${NATIVE_BINS_FILE} && rm ${NATIVE_BINS_FILE}
  )
  
  #extract open source font package for subtitle support during transcoding
  tar xjf ${TEMP_FOLDER}/${FONTS_FILE} && rm ${TEMP_FOLDER}/${FONTS_FILE}
  sed -i "s|WINDOWSFONTDIR|${SYNOPKG_PKGDEST}/lib/dejavu-fonts-ttf-2.33/ttf|" ${SYNOPKG_PKGDEST}/config/fonts/fonts.conf
  sed -i "s|WINDOWSTEMPDIR_FONTCONFIG_CACHE|~/.fontconfig.cache|" ${SYNOPKG_PKGDEST}/config/fonts/fonts.conf
   
  #wrapper script can be useful for testing different encoder options
  if [ "${SYNO_CPU_ARCH}" == "armv5tel" ]; then
    #we need to use the wrapper to make FFmpeg use libshine instead of libmp3lame on ARM systems
    FFMPEG_PATH="\$SERVIIO_HOME/bin/ffmpeg-wrapper.sh"
  else
    FFMPEG_PATH="\$SERVIIO_HOME/bin/ffmpeg"
  fi

  #modification to natively play AAC audio in Media Browser, minimizing transcoding
  mv ${SYNOPKG_PKGDEST}/application-profiles.xml ${SYNOPKG_PKGDEST}/config
  
  #set some additional Serviio system properties (temp folder, FFmpeg path, plugins folder)
  #http://www.serviio.org/index.php?option=com_content&view=article&id=43
  EXTRA_OPTS="-Dserviio\.defaultTranscodeFolder=${TEMP_FOLDER} -Dffmpeg\.location=${FFMPEG_PATH} -Dplugins\.location=${PLUGINS_PATH}"
  #fix Java prefs checking which was preventing NAS hibernation http://forum.serviio.org/viewtopic.php?f=5&t=6878
  EXTRA_OPTS="${EXTRA_OPTS} -Djava.util.prefs.syncInterval=86400"
  if [ "${SYNO_CPU_ARCH}" == "armv5tel" ]; then
    #use integer math (not floating point) Dolby AC-3 encoder for better performance on ARM CPUs
    #http://ffmpeg.org/ffmpeg.html#ac3-and-ac3_005ffixed
    EXTRA_OPTS="${EXTRA_OPTS} -Dserviio\.fixedPointEncoders"
  fi
  sed -r -i "s%^(JAVA_OPTS=.*)\"$%\1 ${EXTRA_OPTS}\"%" ${SYNOPKG_PKGDEST}/bin/serviio.sh
  
  #change owner of Serviio folder tree
  chown -R ${DAEMON_USER} ${SYNOPKG_PKGDEST}
    
  #reset ownership on any pre-existing transcoding temp folder
  if [ -d ${TEMP_FOLDER}/Serviio ]; then
    chown -R ${DAEMON_USER} ${TEMP_FOLDER}/Serviio
  fi
  
  exit 0
}


preuninst ()
{
  #make sure that daemon is stopped
  su - ${DAEMON_USER} -s /bin/sh -c "${SYNOPKG_PKGDEST}/bin/serviio-wrapper.sh -stop"
  sleep 6
  
  exit 0
}


postuninst ()
{
  #remove daemon user
  synouser --del ${DAEMON_USER}
  
  #remove daemon user's home directory (needed since DSM 4.1)
  [ -e /var/services/homes/${DAEMON_USER} ] && rm -r /var/services/homes/${DAEMON_USER}
  
  exit 0
}


preupgrade ()
{
  #make sure that daemon is stopped
  su - ${DAEMON_USER} -s /bin/sh -c "${SYNOPKG_PKGDEST}/bin/serviio-wrapper.sh -stop"
  sleep 6
  
  #if a media database exists we need to preserve it
  if [ -d ${SYNOPKG_PKGDEST}/library/db ]; then
    mkdir ${SYNOPKG_PKGDEST}/../${DAEMON_USER}_db_migration
    mv ${SYNOPKG_PKGDEST}/library/db ${SYNOPKG_PKGDEST}/../${DAEMON_USER}_db_migration
  fi
  
  exit 0
}


postupgrade ()
{
  #use the backed up media database from the previous version
  if [ -d ${SYNOPKG_PKGDEST}/../${DAEMON_USER}_db_migration/db ]; then
    mv ${SYNOPKG_PKGDEST}/../${DAEMON_USER}_db_migration/db ${SYNOPKG_PKGDEST}/library
    rmdir ${SYNOPKG_PKGDEST}/../${DAEMON_USER}_db_migration
    
    #daemon user has been deleted and recreated so we need to reset ownership (new UID)
    chown -R ${DAEMON_USER} ${SYNOPKG_PKGDEST}/library/db
  fi
  	
  #reset ownership on transcoding temp folder
  if [ -d ${TEMP_FOLDER}/Serviio ]; then
    chown -R ${DAEMON_USER} ${TEMP_FOLDER}/Serviio
  fi
  
  exit 0
}
 

start-stop-status.sh

#!/bin/sh

#--------SERVIIO start-stop-status script
#--------package maintained at pcloadletter.co.uk

DAEMON_USER="`echo ${SYNOPKG_PKGNAME} | awk {'print tolower($_)'}`"
DAEMON_ID="${SYNOPKG_PKGNAME} daemon user"
ENGINE_CFG="serviio.sh"
ENGINE_SCRIPT="serviio.sh"


daemon_status ()
{
  ps | grep "^ *[0-9]* ${DAEMON_USER} .*java" > /dev/null
}


case $1 in
  start)
    DAEMON_HOME="`cat /etc/passwd | grep "${DAEMON_ID}" | cut -f6 -d':'`"
    
    #set the current timezone for Java so that log timestamps are accurate
    #we need to use the modern timezone names so that Java can figure out DST
    SYNO_TZ=`cat /etc/synoinfo.conf | grep timezone | cut -f2 -d'"'`
    SYNO_TZ=`grep "^${SYNO_TZ}" /usr/share/zoneinfo/Timezone/tzname | sed -e "s/^.*= //"`
    grep "^export TZ" ${DAEMON_HOME}/.profile > /dev/null \
     && sed -i "s%^export TZ=.*$%export TZ='${SYNO_TZ}'%" ${DAEMON_HOME}/.profile \
     || echo export TZ=\'${SYNO_TZ}\' >> ${DAEMON_HOME}/.profile
    
    #set appropriate Java max heap size
    RAM=$((`free | grep Mem: | sed -e "s/^ *Mem: *\([0-9]*\).*$/\1/"`/1024))
    if [ $RAM -le 128 ]; then
      JAVA_MAX_HEAP=80
    elif [ $RAM -le 256 ]; then
      JAVA_MAX_HEAP=192
    elif [ $RAM -le 512 ]; then
      JAVA_MAX_HEAP=384
    #Serviio's default max heap is 512MB
    elif [ $RAM -gt 512 ]; then
      JAVA_MAX_HEAP=512
    fi
    sed -i -r "s/(^..JAVA.) -Xmx[0-9]+[mM] (.*$)/\1 -Xmx${JAVA_MAX_HEAP}m \2/" "${SYNOPKG_PKGDEST}/bin/${ENGINE_CFG}"
    su - ${DAEMON_USER} -s /bin/sh -c "${SYNOPKG_PKGDEST}/bin/${ENGINE_SCRIPT} &"
    exit 0
  ;;

  stop)
    su - ${DAEMON_USER} -s /bin/sh -c "${SYNOPKG_PKGDEST}/bin/${ENGINE_SCRIPT} -stop"
    sleep 6
    exit 0
  ;;

  status)
    if daemon_status ; then
      exit 0
    else
      exit 1
    fi
  ;;

  log)
    echo "${SYNOPKG_PKGDEST}/log/serviio.log"
    exit 0
  ;;

esac
 

ffmpeg-wrapper.sh

#!/bin/sh

#FFmpeg wrapper script to use libshine fixed point maths MP3 encoder on ARM CPUs
#as originally posted here: http://forum.serviio.org/viewtopic.php?f=7&t=6458

PARAMS=""
FFMPEG_BIN="ffmpeg"
INPUT=0
for PARAM in "$@"; do
  if [ ${INPUT} = 1 ]; then
    #the FFmpeg input filename/URL needs quotes adding back on
    #because it may contain spaces, and the shell has removed them
    PARAMS="${PARAMS} \"${PARAM}\""    
    INPUT=0
  else
    PARAMS="${PARAMS} ${PARAM}"
  fi
  if [ "${PARAM}" == "-i" ]; then
    #this loop is the -i parameter, the next loop will be the input filename/URL
    INPUT=1
  fi
done

#make libshine encoder substitution, 320kbps since it's no more expensive
if [ "${PARAMS}" != "${PARAMS/libmp3lame/}" ] || [ "${PARAMS}" != "${PARAMS/-f mp3/}" ]; then
  PARAMS="`echo ${PARAMS} | sed -r "s|libmp3lame|libshine|;s|-b:a [0-9]+k|-b:a 320k|"`"
fi

#make libfdk_aac encoder substitution, 128Kbps since we're usually transcoding to AAC stereo only
#if [ "${PARAMS}" != "${PARAMS/-c:a aac/}" ]; then
#  PARAMS="`echo ${PARAMS} | sed -r "s| aac -strict experimental | libfdk_aac |;s|-b:a [0-9]+k|-b:a 128k|"`"
#fi

#invoke FFmpeg
FOLDER="`dirname $0`"
echo "${FOLDER}/${FFMPEG_BIN} ${PARAMS}" > ${FOLDER}/../log/ffmpeg-wrapper.log
#need to use eval here otherwise the quotes aren't handled properly
#http://fvue.nl/wiki/Bash:_Why_use_eval_with_variable_expansion%3F
eval ${FOLDER}/${FFMPEG_BIN} ${PARAMS}

#return FFmpeg status
exit $?
 

Changelog:

  • 1.4.1.2-0026 Updated to Serviio 1.4.1.2
  • 1.4.1.1-0025 Updated to Serviio 1.4.1.1
  • 1.4.0-0024 Updated to Serviio 1.4
  • 1.3.1-0023 Updated to FFmpeg 2.1 stable release
  • 1.3.1-0022 Added support for Intel Atom Evansport and Armada XP CPUs in new DSx14 products
  • 1.3.1-0021 Fixed zlib linking issue in QorIQ and Intel builds of FFmpeg
  • 1.3.1-0020 Updated to Serviio 1.3.1
  • 1.2.1-0019 Added support for Armada370 SoC used in DS213j (ARMv7 CPU with FPU)
  • 1.2.1-0018 Updated to Serviio 1.2.1, recompiled FFmpeg to use the libRTMP source code from serviio.org for consistency
  • 1.2.0-0017 Updated to Serviio 1.2
  • 1.1.0-0016 Fixes for DSM 4.2
  • 1.1.0-015 Updated to Serviio 1.1, fixed garbled ac3 encoding issue on ARM CPUs by compiling FFmpeg natively, rather than cross compiling. Remember to update your computer’s Serviio Console to 1.1 before connecting to manage.
  • 1.0-014 Added support for Freescale QorIQ PowerPC CPUs used in some Synology x13 series products, switched to shared library compile of FFmpeg with some minor changes, ARM build now uses libshine encoder which allows realtime audio transcoding to MP3, edited FlowPlayer config to play AAC audio natively to make Media Browser more usable with online feed items.
  • 1.0-013 fixed a bug in the plugins folder creation, fixed deletion of home directories after user deletion (DSM 4.1)
  • 1.0-012 reduced Java prefs checking interval to once every 24 hours to allow the NAS to hibernate (was 30 seconds by default – remember to increase the time between library refreshes if you want hibernation)
  • 1.0-011 updated Serviio to 1.0.1, slightly altered how the plugins folder path is determined
  • 1.0-010 updated to Serviio 1.0, removed WebUI, FFmpeg wrapper no longer needed on ARM, plugins folder moved to /volume1/public/serviio/plugins to make adding/updating plugins easier
  • 0.6.2-009 installation fails unless User Home service is enabled, unified the installer scripts, merged ARM and Intel packages into one which downloads the FFmpeg binary separately, used integer maths Dolby AC-3 encoder on ARM systems (no floating point)
  • 0.6.2-008 fixed DST timezone support, installer no longer assumes /volume1 is primary storage volume
  • 0.6.2-007 updated Serviio to 0.6.2, kairoh’s WebUI to 0.6.2c, changed package to download Serviio from the official website during installation, temp path is set by default to /volume1/@tmp on first run, and finally some CSS improvements
  • 0.6.1-006 switched to kairoh’s Java WebUI, added timezone support, removed DSM icon when Serviio is not running, adjusted Java max heap size for systems with low RAM, specified FFmpeg path directly rather than creating a symlink in /bin so as not to interfere with other packages which may use different versions of FFmpeg
  • 0.6.0.1-005 added Web Station dependency, EULA dialog, and links for Web UI and user forum in More Info
  • 0.6.0.1-004 test for package repo to allow update notification
  • 0.6.0.1 v3 hopefully fixed an issue with the Serviio DSM icon in DSM 3.2 on NAS units without Optware installed
  • 0.6.0.1 v2 inclusion of a modified version of the PHP Web UI
  • 0.6.0.1 v1 new minor Serviio release with some updated international translations – will upgrade 0.6 preserving the media library
  • 0.6 v1 first public release
  • 0.6b4 v2 fixed permissions on transcode temporary folder following upgrade, avoiding the need for a reboot
  • 0.6b4 v1 added upgrade scripts to allow media database migration (install future packages over the top of this one – database is preserved)
  • 0.6b3c v2 fixed HOME env var for serviio user (to fix librtmp issues with BBC iPlayer) and removed the need to edit the passwd file to change the shell (safer)
  • 0.6b3c v1 initial spk test release

 
 

1,030 thoughts on “Serviio 1.4.1.2 package for Synology NAS

  1. Scott G

    Hello
    I have been running serviio on my windows server, so I was happy to see a build for my nas drive. I have added your link to the package server, and many options appear, just not serviio.
    I have a DS1515+ with DM5.2 update 2.

    Thoughts/Help?

    Reply
  2. mattidh

    Hi, I managed to find out that the plugin path is not /volume1/public/serviio/plugins (as in your description), but /var/public/serviio/plugins. Unfortunately I cannot write to or chown to this folder (using Midnight Commander via Putty). This is as far as my Linux skills go, please help.. Thanks in advance!

    Reply
    1. patters Post author

      This is caused by a messy method to find the public folder. I have corrected this in my work-in-progress package for Serviio 1.5 so it will be fixed.

      Reply
  3. Chris Krolikowski

    Hello, I have followed the instructions in order to install serviio on my DS 1813+ and I got to the point the I needed to install serviio from the Package Center but the serviio is not showing. What am I doing wrong? Any help will be greatly appreciate it.

    Regards, Chris

    Reply
      1. Bas Doodeman

        There seems to be no x86-64 (64-bit) version for Synology machines in the repository. My assumption is that the above instructions will therefore not work for the following models: DS710+, DS411+, DS1010+, RS810(RP)+, DS411+II, DS1511+, RS2211+, DS2411+, DS712+, DS713+, DS412+, DS1512+, DS1812+, DS1513+, DS1813+, DS2413+, RS814(RP)+, RS2414(RP)+, DS415+, DS1515+, DS1815+, DS2415+, DS3611xs, RS3411xs, and the RS3411(RP)xs.

        Maybe at some point an x86-64 version will be added to the repo. That would be nice for owners of these somewhat higher-end and/or more recent models from Synology.

        Personally I can’t wait. :-)

      2. michal

        This isn’t true. I have DS1512+ and running Serviio since day 1, i.e. drom DSM 3.5. Currently I have DSM 5.2-5592 Update 1 and Serviio 1.4.1.2-0026. All running smoothly. Serviio is my backup media server, as the primary one I use Plex.

      3. Bas Doodeman

        My assumption cannot be correct then. Maybe the instructions do not work for the x86-64 Atom C2538 only? That would mean only the following models are excluded: DS415+, DS1515+, DS1815+, and DS2415+.

        However, that does not cover the DS 1813+ of Chris above.

  4. jak

    Unable to load 1.4.1.2 on DS 211 running DSM 5.1. Loaded java 7 with headers in ‘public’ but have suffered multiple refusals to load Serviio from package page. Given up after 3 hours and placed it on PC but totally lost as to why the package will not load as it was running perfectly on DSM4 prior to upgrade some months ago.

    Reply
    1. Arjan

      I updated a few days ago from DSM4.1 ->DSM4.3 -> DSM5.0 to DSM5.1 and then reinstalled java8 and serviio. To get it installed i had to allow at the package center all publishers and don’t forget to set the DNS server to the local gateway this had been reset due to the upgrades.

      I am still trying to get the web ui working from swoopx.

      Reply
    1. Luca

      I tried to re-install Serviio on myDS 213J but it showed this error “The port 23424 configured for this package is used by another service or is reserved for system usage . Disable or change the conflicting service or contact the developer to change the configuration of the package “. I opened this port on firewall of nas and roter but doesn’t functioned

      Reply
  5. Theodor

    Hello,
    I am trying to install a servioo on an old DSM3.1 DS207+ NAS. O the package info it says it is available for my arhitecture but under download I cannot find a proper spk file or whateever i need. Am I lucky enough that I will be able to install the serviio server on my nas?

    Reply
  6. Luca

    Excuse me Patters but now for Ds213j (ARMv7) which kind of java SE Embedded I have to install for proper operation of Serviio? Still the old version 7 of 2014 or the last new 8?

    Reply
    1. patters Post author

      It should work fine on Java 8. Generally I’d recommend 8 these days because it’s getting security updates. Java 7 has been transitioned to the archive downloads page by Oracle. I took Java 6 down from the repo because that’s a high security risk now.

      Reply
  7. Theodor

    after copping the package from oracle and uploading it to public folder ythe installation said pacake installed and i have this unde cli env:
    PATH=/opt/bin:/opt/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/syno/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin:/volume1/@appstore/java8/ejdk1.8.0_51/linux_arm_sflt/jre/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/syno/bin:/usr/syno/sbin:/usr/local/bin:/usr/local/sbin:/volume1/@appstore/java8/ejdk1.8.0_51/linux_arm_sflt/jre/bin
    LANG=en_US.utf8
    SHELL=/bin/ash
    CLASSPATH=.:/volume1/@appstore/java8/ejdk1.8.0_51/linux_arm_sflt/jre/lib
    JAVA_HOME=/volume1/@appstore/java8/ejdk1.8.0_51/linux_arm_sflt/jre
    Think it worked :)
    now the syno package.. where do I get it from? is there any special install instructions?

    Reply
      1. Theodor

        hmmm … this is weird. I do not undestand. the file is there…

        NAS> java -version
        -ash: java: not found
        NAS> echo $ JAVA_HOME
        $ JAVA_HOME
        NAS> echo $JAVA_HOME
        /volume1/@appstore/java8/ejdk1.8.0_51/linux_arm_sflt/jre
        NAS> which java
        /volume1/@appstore/java8/ejdk1.8.0_51/linux_arm_sflt/jre/bin/java
        NAS> ipkg install strace
        Installing strace (4.5.20-1) to root…
        Downloading http://ipkg.nslu2-linux.org/feeds/optware/syno-x07/cross/unstable/st race_4.5.20-1_arm.ipk
        Configuring strace
        Successfully terminated.
        NAS> strace java -version
        execve(“/volume1/@appstore/java8/ejdk1.8.0_51/linux_arm_sflt/jre/bin/java”, [“java”, “-version”], [/* 17 vars */]) = -1 ENOENT (No such file or directory)
        dup(2) = 3
        fcntl64(3, F_GETFL) = 0x2 (flags O_RDWR)
        fstat64(3, {st_mode=S_IFCHR|0622, st_rdev=makedev(136, 0), …}) = 0
        old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40016000
        _llseek(3, 0, 0xbeb8f924, SEEK_CUR) = -1 ESPIPE (Illegal seek)
        write(3, “strace: exec: No such file or di”…, 40strace: exec: No such file or directory
        ) = 40
        close(3) = 0
        munmap(0x40016000, 4096) = 0
        exit_group(1) = ?
        NAS> strace java
        execve(“/volume1/@appstore/java8/ejdk1.8.0_51/linux_arm_sflt/jre/bin/java”, [“java”], [/* 17 vars */]) = -1 ENOENT (No such file or directory)
        dup(2) = 3
        fcntl64(3, F_GETFL) = 0x2 (flags O_RDWR)
        fstat64(3, {st_mode=S_IFCHR|0622, st_rdev=makedev(136, 0), …}) = 0
        old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40016000
        _llseek(3, 0, 0xbe89f924, SEEK_CUR) = -1 ESPIPE (Illegal seek)
        write(3, “strace: exec: No such file or di”…, 40strace: exec: No such file or directory
        ) = 40
        close(3) = 0
        munmap(0x40016000, 4096) = 0
        exit_group(1) = ?

      2. Theodor

        this is weird also:
        NAS> ldd /volume1/@appstore/java8/ejdk1.8.0_51/linux_arm_sflt/jre/bin/java
        $ not a dynamic executable

  8. Theodor

    also tell this when running file on the executable:
    NAS> file /volume1/@appstore/java8/ejdk1.8.0_51/linux_arm_sflt/jre/bin/java
    /volume1/@appstore/java8/ejdk1.8.0_51/linux_arm_sflt/jre/bin/java: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, BuildID[sha1]=8efe506cd8388a1b03e72608b0242efe907fcf20, stripped

    Reply
  9. SpankySpangler

    Hi,

    I’ve installed java 8 on my DS213Air but each time i try to install serviio, it fails (“serviio installation failure”). What did I miss?

    Reguards

    Reply
    1. patters Post author

      You may be able to get a more descriptive error by attempting to install again, then immediately afterwards looking at the end of the main system log:
      tail -n 15 /var/log/messages

      Reply
    1. patters Post author

      Java is not open source so not really. You could try to compile OpenJDK but from what I understand this is likely to be difficult, and the performance is a long way behind the Oracle Java.

      Reply
  10. uvby

    Have a problem with this, serviio running on ds115j, java working, samsung tv seeing serviio on synology, but i cant acces the serviio server with the serviio console :( please help me i have anithing tried but it not helped :(

    Reply
  11. Kazad

    HI,
    top work i have installed Java 8 with out any Problems

    but i dont find any serviio pack in dsm pacj center
    so i can not install it,
    maybe i make something wrong can you give me any advice?

    Reply
  12. uvby

    ok i get all i need its run fantastic, i can with serviio web ui (runs from ds115j) everything change, but is have a problem i can’t give local path to serviios library, while the serviio webui dosn’t see any of my folder it can see only this:

    http://postimg.org/image/63lpr1pnf/

    please help with this

    Reply
  13. robert

    I am getting a ‘failed’ to install when trying to install serviio on my DS214play. I installed Java 8 (which is what I was running before I restored my NAS), then tried to install serviio. Got that above error. Thinking I need to install Media Server to create the default folders (which I was hoping to avoid for file management reasons), I did that, and tried again. Then I tried video station. Same result. I am running”DSM 5.2-5592 Update 3″ Suggestion? Thanks!

    Reply
    1. uvby

      try before install this :

      packages –> options –> general tab –> trusted level –> whichever developer –> then install

      sorry i’m hungarian and use my synology with hungarian language, and i translated but you will find the problem there :)

      Reply
      1. robert

        I had “synology and trusted publishes” selected. I selected “any publisher”. That worked. Thanks! Can you answer, is it possible to use serviio without enabling and installing the default video/photo/music folders? It also gives me a home and homes folder on my volume. Is that correct? Thanks again!!

      2. uvby

        I didn’t use default folder, i created 3 folder(musics, photo, videos) for me (gave permission for serviio) in my documents directory, and with ad path link gave i to serviio console :) But my synology is not the fastest (DS115J) so i shared only the video folder (over 5000 files), the music folder with over 25000 files was to big fog my nas (the processor was over 90% always now is it under 30% [the java uses the ram whit 100M] :)

  14. Kazad

    hi
    i run a ds415+ wit Intel Atom C2538 and 2GB RAM. DSM 5.2-5592.

    To install Java was no big Problem, ad PC Load as Package Source also.
    My Problem is that dont find servio in the Package Center to download it.
    There is only a Serviio Console. Please give me an wink where are my fault is.

    Thx Matze

    Reply
      1. Kazad

        Hi Arjan,

        i use DSM Version 5.2 latest Patch.

        packetsource iss added and trustlevel iss also set.
        Or must trustlevel on any second place changed out of Packet Center?

        Thx For Help

      2. Arjan

        Hi Kazad,

        It’s not clear for me what you mean by ” trustlevel on any second place changed out of Packet Center”.

        And you are looking in the right section [community]

      3. Kazad

        HI,

        i only see

        Bliss
        CraftBukkit
        CrashPlan
        ChrashPln Pro
        CrashPlan Pro Client
        Java SE Embedded 7
        Java SE Embedded 8
        Mincraft
        OpenRemote
        in the community Sektion no Serviio
        when i open the Link in my Browser is see seviio there.
        but i can not download it to install it manually
        Greetz Kaz

    1. Bas Doodeman

      Hi Kazad,

      See above.

      It seems that the instructions do not work for the x86-64 Atom C2538. That would mean the following models are excluded: DS415+, DS1515+, DS1815+, and DS2415+.

      This includes your D415+…

      However: Patters replied that we should hold tight for version 1.5.2. That sounds hopeful to me, because he seems to imply that 1.5.2 will support these models.

      That would be great. :-)

      Reply
      1. Kazad

        Hi Bas,

        thx for this Info.

        So i will wait and hope for Version 1.5.2 maybe we have luck.

        Thx and Greetz Kazad

  15. michal

    I have a problem to connect remote console from my Mac. I’ve downloaded the newest Serviio-Console.app, edited Info.plist and the end of the file looks like this

    Xms
    -Xms5M

    serviio.remoteHost
    192.168.1.13
    JVMArguments

    but still no joy. Console always tries to connect to the local server, and when it is not running then cannot connect to server pop-up window appears. Seems like remoteHost key is ignored.

    Reply
      1. michal

        Once more try with formatting:

        <dict>
        <key>Xms</key>
        <string>-Xms5M</string>
        </dict>
        <key>serviio.remoteHost</key>
        <string>192.168.1.13</string>
        <key>JVMArguments</key>
        <array>
        </array>
        </dict>
        </plist>

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s