Montando um Media Server com o MediaTomb

Esse artigo descreve os passos necessários para instalação do MediaTomb, um poderoso servidor de mídia baseado no protocolo UPnP.

[ Hits: 88.804 ]

Por: Perfil removido em 21/07/2010


Configuração para execução automática



a. Edite do arquivo /etc/default/mediatomb conforme abaixo:

# Set whether the daemon should be started. Set this value to anything
# but 'yes' to enable the daemon
NO_START="no"

# Additional options that are passed to the daemon.
# Vai fazer o bind na porta 50500
OPTIONS="-p 50500"

# The network interface for MediaTomb to bind to and for which the multicast
# routing entry should be added; "" if the route shouldn't be added at all.
# For example: INTERFACE="eth0"
INTERFACE="eth0"

# The route command and arguments to be used if INTERFACE is defined.
# These variables should normally be left unmodified.
ROUTE_ADD="/sbin/route add -net 239.0.0.0 netmask 255.0.0.0"
ROUTE_DEL="/sbin/route del -net 239.0.0.0 netmask 255.0.0.0"

# The user and group that MediaTomb should be run as.
USER="mediatomb"
GROUP="mediatomb"

b. Crie o script de inicialização:

# vi /etc/init.d/mediatomb

c. Copie o conteúdo abaixo e cole no novo arquivo /etc/init.d/mediatomb:

#! /bin/sh
#
# MediaTomb initscript
#
# Original Author: Tor Krill <[email protected]>.
# Modified by:     Leonhard Wimmer <[email protected]>
# Modified again by Andres Mejia <[email protected]> to
# base it off of /etc/init.d/skeleton
# Modified again by Flexion.Org <[email protected]> to
# reference /usr/local/ and ~/ for a simple from source build
#
#

### BEGIN INIT INFO
# Provides:          mediatomb
# Required-Start:    $all
# Required-Stop:     $all
# Should-Start:      $all
# Should-Stop:       $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: upnp media server
### END INIT INFO

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script

PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin
DESC="upnp media server"
NAME=mediatomb
DAEMON=/usr/local/bin/$NAME
PIDFILE=/var/run/$NAME.pid
LOGFILE=/var/log/$NAME.log
SCRIPTNAME=/etc/init.d/$NAME
DEFAULT=/etc/default/$NAME

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r $DEFAULT ] && . $DEFAULT

# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

# Start the daemon if NO_START is disabled in DEFAULT
if [ "$NO_START" = "yes" ]; then
   test "$1" = "start" && \
   {
      log_warning_msg "$NAME: Not starting $DESC."
      log_warning_msg "$NAME: Disabled in $DEFAULT."
   }
   exit 0
fi

# Run as root if USER not specified
if [ ! $USER ]; then
   USER=root
fi

# Check for an invalid user or one without a home directory
eval USERHOME=~$USER
if [ "${USERHOME#/}" = "${USERHOME}" ]; then
   log_failure_msg "$NAME: The user '$USER' specified in $DEFAULT is invalid."
   exit 1
fi

if [ "$INTERFACE" != "" ] ; then
    INTERFACE_ARG="-e $INTERFACE"
else
    INTERFACE_ARG=""
fi

DAEMON_ARGS="-c /home/$USER/.mediatomb/config.xml -d -u $USER -g $GROUP -P $PIDFILE -l $LOGFILE $INTERFACE_ARG $OPTIONS"

#
#       Function that starts the daemon/service.
#
do_start() {
   # Return
   #   0 if daemon has been started
   #   1 if daemon was already running
   #   2 if daemon could not be started
   touch $PIDFILE
   chown $USER:$GROUP $PIDFILE
   touch $LOGFILE
   chown $USER:$GROUP $LOGFILE
   start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON \
      --test > /dev/null \
      || return 1
   start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
      $DAEMON_ARGS \
      || return 2
}

#
#       Function that stops the daemon/service.
#
do_stop() {
   # Return
   #   0 if daemon has been stopped
   #   1 if daemon was already stopped
   #   2 if daemon could not be stopped
   #   other if a failure occurred
   start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
   RETVAL="$?"
   [ "$RETVAL" = 2 ] && return 2
   rm -f $PIDFILE
   return "$RETVAL"
}

#
#       Function that sends a SIGHUP to the daemon/service.
#
do_reload() {
   start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
   return 0
}

case "$1" in
  start)
   if [ -n "$INTERFACE" ]; then
      # try to add the multicast route
      if [ "$VERBOSE" != no ]; then
         {
            log_action_begin_msg \
            "$NAME: Trying to add the multicast route"
            $ROUTE_ADD $INTERFACE \
            && log_action_end_msg 0
         } || {
            true && \
            log_warning_msg "Failed to add multicast route. skipping."
         }
      else
         $ROUTE_ADD $INTERFACE >/dev/null 2>&1 || true
      fi
   fi
   log_daemon_msg "Starting $DESC" "$NAME"
   do_start
   case "$?" in
      0) log_end_msg 0 ;;
      1) log_warning_msg "$DESC" "'$NAME'" "was already started" ;;
      2) log_end_msg 1 ;;
   esac
   ;;
  stop)
   log_daemon_msg "Stopping $DESC" "$NAME"
   do_stop
   case "$?" in
      0)
         log_end_msg 0
         if [ -n "$INTERFACE" ]; then
            # try to add the multicast route
            if [ "$VERBOSE" != no ]; then
            {
               log_action_begin_msg \
               "$NAME: Trying to delete the multicast route"
               $ROUTE_DEL $INTERFACE \
               && log_action_end_msg 0
            } || {
               true && \
               log_warning_msg \
               "Failed to delete multicast route. skipping."
            }
            else
               $ROUTE_DEL $INTERFACE >/dev/null 2>&1 || true
            fi
         fi
         ;;
      1) log_warning_msg "$DESC" "'$NAME'" "was already stopped" ;;
      2) log_end_msg 1 ;;
   esac
   ;;
  reload|force-reload)
   log_daemon_msg "Reloading $DESC" "$NAME"
   do_reload
   log_end_msg $?
     ;;
  restart)
        #
        #       If the "reload" option is implemented, move the "force-reload"
        #       option to the "reload" entry above. If not, "force-reload" is
        #       just the same as "restart".
        #
   log_daemon_msg "Restarting $DESC" "$NAME"
   do_stop
   case "$?" in
     0|1)
      sleep 1
      do_start
      case "$?" in
         0) log_end_msg 0 ;;
         1) log_end_msg 1 ;; # Old process is still running
         *) log_end_msg 1 ;; # Failed to start
      esac
      ;;
     *)
        # Failed to stop
      log_end_msg 1
      ;;
   esac
   ;;
  *)
   #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
   echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
   exit 3
   ;;
esac

:

c. Torne-o executável:

# chmod 755 /etc/init.d/mediatomb

d. Teste-o:

# /etc/init.d/mediatomb start
* Starting upnp media server mediatomb   [ OK ]

e. Verifique no log se o mesmo está sendo executado:

# tail -f -n 20 /var/log/mediatomb.log

f. Crie um link para o script de inicialização:

# update-rc.d mediatomb defaults 95

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Testando do MediaTomb
   3. Configuração para execução automática
   4. Arquivo de configuração
   5. Scripts de transcodificação
   6. Conclusão e referências
Outros artigos deste autor

XFree86 - Um pouco da história deste poderoso ambiente gráfico para UNIX

Introdução a Threads e como implementá-las em Python

Captive Portal Customizado

Os Mistérios da Fonte Wingdings do Windows

É o Linux somente para especialistas?

Leitura recomendada

Clustering em Casa

Arte digital: novas possibilidades com softwares livres

Alta Disponibilidade (HA) com Debian (Heartbeat + DRBD + Mon)

Rodando Half-Life 2 e Counter-Strike Source

Daemons com shell script

  
Comentários
[1] Comentário enviado por sergiomb em 24/07/2010 - 11:13h

A ideia de mostra o mediatomb é muito boa , no fedora se instala assim : yum install mediatomb.
Mas o artigo perde-se em configurações que deviam estar em anexos, para se poder ler melhor o artigo, e fiquei sem perceber para que é que serve , e quem lê .
Estava aqui a ver, na internet, que se pode instalar o mediathumb em discos multimédia como emetec R100, que deve ser bastante interessante (eu tenho um) mas não percebo qual a sua função e para que serve a PS3?

De qualquer modo , agradeço imenso a sua contribuição, e não desanime com as criticas :)

[2] Comentário enviado por removido em 24/07/2010 - 15:24h

Oi sergiomb,

Sim, podemos instalar a versão 0.11 com 'yum' em distros baseadas no Red Hat, ou mesmo com 'apt' em distros baseadas no Debian. Postei esse procedimento no meu blog em 2009:
http://alexloula.blogspot.com/2009/06/upnp-server-com-mediatomb.html

Agora se você quiser usar as novas características da versão 0.12 do MediaTomb, como YouTube e LastFM, você precisa compilar o source de desenvolvimento conforme mostrado nesse artigo.

Se você não entendeu a função do PS3, talvez você não tenha entendido o conceito de Media Server. Conforme mencionado no artigo, o MediaTomb faz 'streaming' de mídia (fotos, músicas, vídeos) para dispositivos compatíveis com UPnP (DLNA). Esse paper detalha um pouco mais essa tecnologia:
http://www.allegrosoft.com/UPnP_DLNA_White_Paper.pdf

Como você digitou "Mediathumb", talvez você tenha confundido com um Media Browser para Windows. Aí com certeza não precisaríamos do PS3.

Quanto aos arquivos de configuração, sinta-se a vontade em postá-los para facilitar o processo.

Obrigado!

[3] Comentário enviado por removido em 31/07/2010 - 07:36h

Alexsander,

Você conseguiu acessar os arquivos a partir de uma TV compativel com DLNA?

Tentei fazer o mediatomb "conversar" com minha TV LG, mas não funcionou.

[4] Comentário enviado por removido em 31/07/2010 - 12:06h

Oi Gomes,

Testei somente com o PS3 e um client java, mas deveria funcionar com a sua TV. Vc consegue acessar a GUI pelo browser?

[5] Comentário enviado por removido em 31/07/2010 - 15:34h

Já instalei usando o apt-get e o seu procedimento e em ambos os casos consegui acessar a GUI pelo navegador. Também liberei as portas no Firewall. Só falta a TV enxergar o media server.

Acho que a TV procura uma porta diferente do padrão. Quando uso o Nero Media Home no Rwindows, funciona.

[6] Comentário enviado por removido em 31/07/2010 - 16:18h

Nos testes que eu fiz nunca encontrei esse problema do client não enxergar o server. O que normalmente acontece é problema de incompatibilidade de formatos de mídia entre o que estamos fazendo streaming com o que o client suporta.
Achei no fórum do Ubuntu um problema parecido com o seu, mas com uma Samsung. A solução foi alterar o http-header.
Altere a tag <custom-http-headers> no seu config.xml de:
<add header="X-User-Agent: redsonic"/>

Para:
<add header="transferMode.dlna.org: Streaming"/>
<add header="contentFeatures.dlna.org: DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=017000 00000000000000000000000000"/>

Não esqueça de tirar o comentário dessa seção removendo o "<!--" do começo e o "-->" do final.

[7] Comentário enviado por andrecostall em 05/01/2011 - 17:01h

E ai loula, tdo blz cara ?
Instalei um server com MediaTomb e esta funcionando perfeitamente parabéns cara..
Cara só tenho uma duvida como faço para acessar algum video atraves do Windows media Player, como ficaria a URL para chamar um video por exemplo "Shrek" ?
Abração

[8] Comentário enviado por removido em 10/01/2011 - 11:56h

Oi André,

Nunca tentei usar o WMP como cliente ou servidor UPnP. Pelo explicado nesse link parece que é possível:

http://thewelltemperedcomputer.com/SW/WMP/MediaSharing.htm

Grato.

[9] Comentário enviado por bcsdias em 25/05/2011 - 08:54h

Belo artigo.
Estou tentando configurar o mediatomb no freenas e estou com uma duvida.
o mediatomb esta instalado e rodando, mas nao sei como configurar qual pasta quero deixar disponivel para streaming
como faço esta configuraçao?

[10] Comentário enviado por removido em 26/05/2011 - 13:50h

Oi bcsdias,

Você pode adicionar a(s) pasta(s) pela interface web do Mediatomb ou direto no arquivo de configuração conforme exemplo abaixo:

<autoscan use-inotify="auto">
<directory location="/home/user/music" mode="inotify" recursive="yes" hidden-files="no"/>
<directory location="/home/user/picture" mode="inotify" recursive="yes" hidden-files="no"/>
<directory location="/home/user/video" mode="inotify" recursive="yes" hidden-files="no"/>
</autoscan>

Altere o "location" conforme suas necessidades.

[11] Comentário enviado por alexandreceti em 07/09/2011 - 21:50h

Mais uma dica galera
Para ter mais de 1 trilha de áudio para vídeos de 2 trilhas.
no final do código dos scripts, adicione o parâmetro -newaudio como abaixo.
De:
...-f ${FORMAT} -r ${FPS} - > "${OUTPUT}" 2>/dev/null
Para:
....-f ${FORMAT} -r ${FPS} - > "${OUTPUT}" -newaudio 2>/dev/null.

ai o vídeo passa a ter 2 trilhas..

[12] Comentário enviado por jmcastro em 07/05/2013 - 16:33h

Olá Alexsander, parabém pelo artigo.
Tenho uma dúvida operacional. Sou novato em Linux, estou procurando deixar o Win para trás e com ele o meu cliente dlna WMS.
Instalei o Mediatomb no meu PC e meus arquivos de media estão em um HD separado - instalado em um NAS, ligado a minha rede doméstica - como faço para incluir no Database doMediatomb este HD com meus arquivos de filmes e músicas?
Sei que seu post já foi feito há algum tempo, mas se pudesse me ajudar agradeceria.
Obrigado

Marcelo

[13] Comentário enviado por danieldhdds em 17/09/2014 - 22:12h

MediaTomb plenamente configurado e funcionando no Ubuntu 14.04 LTS, via WiFi no modem Sagemcom e na SmartTV LG.


PS: Baixei ele pelo Synaptics, instalei os pacotes adicionais que ele mostrou que faltava no arquivo de log e pronto. Executei, verifiquei o log, instalei como autoexecutável no boot e reiniciei o sistema. PERFEITO!

Posterior ao reboot do sistema e o server já funcionando perfeitamente fui ver o arquivo de log novamente e constava "Error: iconv..." que, com uma pesquisada na internet encontrei o seguinte site: https://www.gnu.org/software/libiconv/#downloading. Pelo que pude entender, o iconv é um sistema antigo para dar nomes a caminhos, não aceitando vários formatos e etc, portanto tem sua 'atualização'. Vou fazer a instalação agora (se eu aprender a compilar um .tar.gz), voltarei com o resultado e direi se houve alguma modificação no MediaTomb.

(Ia tentar aprender a compilar, mas deixa pra lá. "Em time que está ganhando não se mexe.")


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts