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

This was tested on CentOS 6.3 (Final)

Prerequisites

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:

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

# 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"