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.

Based on Fedora Installation Guide and help from will on the forums.

This was tested on CentOS 6.3 (Final)

Prerequisites

  • Java
    yum install java-1.6.0-openjdk

1.Download Serviio

Always check http://www.serviio.org/download for the latest version first.

wget http://download.serviio.org/releases/serviio-1.1-linux.tar.gz

2.Extract Serviio

tar -C /opt -zxvf serviio-1.1-linux.tar.gz
mv /opt/serviio-1.1 /opt/serviio

3.Create Serviio's user

useradd -d /opt/serviio -r serviio
chown -R serviio:serviio /opt/serviio

4. Init.d script

Create the initscript /etc/init.d/serviio with the following code:

#! /bin/sh
#
# chkconfig 35 85 15
# description: Start the serviio DLNA server in headless mode
### BEGIN INIT INFO
# Provides: serviio
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: Start the serviio DLNA server in headless mode
### END INIT INFO

SERVIIO_HOME="/opt/serviio"
SERVIIO_DAEMON="serviio.sh"
SERVIIO_BIN="$SERVIIO_HOME/bin/$SERVIIO_DAEMON"
SERVIIO_USER="serviio"

# Source function library.
. /etc/rc.d/init.d/functions

RETVAL=0

check() {
        # Check that we're a privileged user
        [ $(id -u) = 0 ] || exit 4

        # Check if SERVIIO_HOME exists
        test -d "$SERVIIO_HOME" || exit 5

        # Check if SERVIIO_BIN is executable
        test -x "$SERVIIO_BIN" || exit 5
}

start() {
        check
        echo -n "Starting Serviio DLNA server: "
	/bin/su --session-command="$SERVIIO_BIN -headless" $SERVIIO_USER &
        RETVAL=$?
        if [ $RETVAL -eq 0 ]; then
            touch /var/lock/subsys/serviio.sh
            echo_success
        else
            echo_failure
        fi
        echo
        return $RETVAL
}

stop() {
    check
    echo -n "Shutting down Serviio DLNA daemon: "
    # Retrieve JAVA Serviio process ID
    PIDDAEMON=`pgrep $SERVIIO_DAEMON`
    [ -z "$PIDDAEMON" ] || PIDJAVA=`ps -o pid= --ppid $PIDDAEMON`
    # Kill the daemon
    killproc "$SERVIIO_BIN"
    RETVAL=$?
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/serviio.sh
    echo
    # Kill the JAVA Serviio process if exists
    [ -z "$PIDJAVA" ] || kill -9 $PIDJAVA
    return $RETVAL
}

restart() {
        stop
        start
}


case "$1" in
start)
        start
        ;;
stop)
        stop
        ;;
force-reload)
        restart
        ;;
restart)
        restart
        ;;
condrestart)
        if [ -f /var/lock/subsys/serviio.sh ]; then
            restart
        fi
        ;;
status)
        status serviio.sh
        ;;
*)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|force-reload}"
        RETVAL=2
esac

exit $RETVAL

5. Enable service

chmod +x /etc/init.d/serviio
chkconfig --add serviio
chkconfig serviio on

6. Start Serviio

service serviio start

7. Stop Serviio

service serviio stop

8. IP Tables rules

(I added these to my firewall.sh I run every time I update iptables, if you use another firewall just make sure the correct ports are open)

iptables -A INPUT -p udp -m udp --dport 1900 -j ACCEPT -m comment --comment "Serviio"
iptables -A INPUT -p tcp --dport 8895 -j ACCEPT -m comment --comment "Serviio"
iptables -A INPUT -p tcp --dport 23423 -j ACCEPT -m comment --comment "Serviio"
iptables -A INPUT -p tcp --dport 23424 -j ACCEPT -m comment --comment "Serviio"

9. Build ffmpeg

As of Serviio v1.0, you need ffmpeg v0.11 or greater so in most cases you will need to build ffmpeg from source, rather than use the version from yum.

As per Building FFmpeg on Linux but edited slightly for CentOS:

  • Remove existing packages, and install essential build packages for later
    yum remove x264 ffmpeg -y
    yum install git libfaac-devel libmp3lame-devel libtheora-devel \
    libva-devel libvdpau-devel libvorbis-devel libX11-devel libXfixes-devel texi2html yasm \
    libxvidcore-devel  libXext-devel libXfixes-devel librtmp-devel -y
  • x264 (optional)
    cd ~
    mkdir src
    cd src
    git clone git://git.videolan.org/x264
    cd x264
    ./configure --enable-static --prefix=/usr
    make fprofiled
    make install
  • Libvpx (optional)
    cd ~/src
    git clone http://git.chromium.org/webm/libvpx.git
    cd libvpx
    ./configure
    make install
  • rtmpdump
    cd ~/src
    git clone git://git.ffmpeg.org/rtmpdump
    cd rtmpdump
    make SYS=posix

Some of the above libraries are optional, if you don't build them, remember to remove the equivilant –enable-libXXX from ./configure below.

  • ffmpeg
    cd ~/src
    wget http://download.serviio.org/opensource/ffmpeg-N-42368-gbf53863.tar.gz
    tar xvf ffmpeg-N-42368-gbf53863.tar.gz
    cd ffmpeg
    ./configure --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libtheora \
     --enable-libvorbis --enable-libx264 --enable-nonfree --enable-postproc --enable-version3 \
    --enable-x11grab --enable-libvpx --enable-librtmp --enable-libxvid
    make
    make fprofiled
    make install
  • Add the ffmpeg location to /opt/serviio/bin/serviio.sh by updating the following line with the -Dffmpeg.location e.g.:
# Setup Serviio specific properties
JAVA_OPTS="-Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dderby.system.home=$SERVIIO_HOME/library -Dserviio.home=$SERVIIO_HOME -Dffmpeg.location=/usr/local/bin/ffmpeg"
Print/export