Mediatomb

Posted on 07/28/2010 by   |   Filed under templates, internet    Comments 11

Mediatomb это пакет создающий в сети DLNA-сервер, с поддержкой воспроизведения медиа-файлов на DLNA-клиенте, в том числе с возможностью транскодирования на лету.

Официальный сайт проекта http://mediatomb.cc/.

Установка

Пакет присутствует в хранилище пакетов debian.

Для установки пакета в командной строке следует выполнить команду

apt-get install mediatomb

По окончании установки медиа-сервер Mediatomb автоматически стартует.

Для начала использования программу необходимо настроить.

Файл конфигурации

Файл конфигурации медиа-сервера используется общесистемный /etc/mediatomb/config.xml

Можно указываеть при старте в командной строке:

mediatomb --config <ФАЙЛ_КОНФИГУРАЦИИ>

Вот мой файл config.xml

Автозапуск при загрузке

Чтобы работал автозапуск редактируем файл:/etc/default/mediatomb пишем в нем

MT_ENABLE=true

Настройка

Для включения автозапуска пакета при старте системы устанавливаем опции в файле /etc/default/mediatomb и приводим его к виду:

  
# Defaults for MediaTomb initscript
# sourced by /etc/init.d/mediatomb
# installed at /etc/default/mediatomb by the maintainer scripts

#
# This is a POSIX shell fragment
#

# 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.
OPTIONS=""

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

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

Для открытия доступа к веб-интерфейсу управления dlna-сервером редактируем файл /etc/mediatomb/config.xml:

В секции устанавливаем параметры:

 HOME DLNA SERVER # установка отображаемого имени dlna-сервера
 <"yes" show-tooltips="yes">
  <"yes" session-timeout="30">
  <"mediatomb" password="mediatomb"/>

перезапускаем медиа-сервер

service mediatomb restart

Русские буквы в именах файлах

При наполнении базы Mediatomb и использовании в именах медиа-файлов русских букв может возникнуть ошибка в логе программы - could not be converted to new encoding: invalid character sequence. В этом случае "дефектные" файлы в плей-листе сервера будут отображаться знаками вопроса. В связи с тем, что некоторые русские буквы визуально не отличаются от английских и могут случайно попасть в имя любого файла возникает необходимость их правильного отображения.
Для правильного показа имён медиа-файлов написанных на русском языке устанавливаем кодировку по умолчанию в нашей ОС UTF-8

Для проверки кодировки выполняем команду:

locale

     LANG=ru_RU.UTF-8
     LC_CTYPE="ru_RU.UTF-8"
     LC_NUMERIC="ru_RU.UTF-8"
     LC_TIME="ru_RU.UTF-8"
     LC_COLLATE="ru_RU.UTF-8"
     LC_MONETARY="ru_RU.UTF-8"
     LC_MESSAGES="ru_RU.UTF-8"
     LC_PAPER="ru_RU.UTF-8"
     LC_NAME="ru_RU.UTF-8"
     LC_ADDRESS="ru_RU.UTF-8"
     LC_TELEPHONE="ru_RU.UTF-8"
     LC_MEASUREMENT="ru_RU.UTF-8"
     LC_IDENTIFICATION="ru_RU.UTF-8"
     LC_ALL=

Редактируем секцию в файле конфигурации

  ="yes">
    UTF-8
    UTF-8
    UTF-8 
    ...
   

Очищаем базу со списком добавленных медиа-файлов, например в веб-интерфейсе управления удаляя все размещённые там файлы и папки и добавляем медиа-контент как будет описано ниже и наблюдаем правильное отображение кириллицы

Показ mkv на Samsung-е

удалить теги комментариев вокруг секции и сделать этот раздел следующим образом


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

В разделе добавить/исправить

="avi" to="video/mpeg"/>
="mkv" to="video/mpeg"/>

Выключить транскодирование - или сделать его нулевым,перегрузить mediatomb. Если былауже собрана база - то надо зайти в управление и удалить все, а потом наполнить заново

Наполнение сервера

Для начала использования медиа-сервера его необходимо наполнить контентом - добавить в базу данных программы файлы которые будет демонстрировать Dlna-сервер.
Для добавления медиа-файлов через веб-интерфейс открываем доступ пользователю (группе) Mediatomb к ресурсам с медиа-файлами

Открываем панель управления dlna-сервером через web-интерфейс: для этого либо на локальной машине открываем файл /var/lib/mediatomb/mediatomb.html либо в веб-браузере открываем URL http://localhost:50500/ (должен быть установлен веб-сервер например apache2) нажимаем кнопку "плюс" добавляем каталоги и файлы на вкладке "Filesystem"

Для добавления медиа-файлов через командную строку выполняем команду

mediatomb -a <ПУТЬ>

Переключение на базу MySQL

При установке по умолчанию пакет Mediatomb использует хранение информации о медиа-файлах в хранилище в формате sqlite3. При использовании данного движка для поддержки кириллицы в именах воспроизводимых файлов требуются дополнительные усилия по настройке. Кроме того следует учитывать что у данного движка имеются ограничения по размеру базы. В связи с этим переключение работы медиа-сервера на использование движка mysql становиться вполне оправданным.

Для переключения медиа-сервера на использование mysql устанавливаем mysql как описано в статье Mysql-server

редактируем секцию в файле конфигурации

    
      ="no">
        mediatomb.db
      
      ="yes">
        localhost
        mediatomb
        mediatomb
      
    

Cоздаём базу и пользователя mysql вводим в командной строке от имени root команды:

mysql -uroot -p

Enter password: mysql> CREATE DATABASE `mediatomb` CHARACTER SET utf8 COLLATE utf8_general_ci; mysql> GRANT ALL PRIVILEGES ON mediatomb.* TO mediatomb@localhost;

В примере создана mysql-база mediatomb и пользователь mediatomb со всеми привилегиями и возможностью доступа к базе без пароля

Cоздаём таблицы в базе

mysql -p mediatomb

перезапускаем медиа-сервер

Отключение транскодирования на лету

При установке пакет по умолчанию настроен на осуществление транскодирования на лету. В качестве агента-транскодера по умолчанию указана программа Vlc. Отключение транскодирования на лету может быть полезно при отсутствии запаса мощности в системном блоке DLNA-сервера. В этом случае декодирование воспроизводимого файла ложиться на DLNA-клиента, а DLNA-сервер выступает как простой файловый ресурс. Загрузка DLNA-сервера при "показе" медиа-файлов в этом случае крайне мала.

Для отключения транскодирования на лету

Заменяем в файле конфигурации строку

="yes">

на

="no">

Перезапускаем медиа-сервер

Внимание!
Транскодирование на лету может быть фактически "отключено" и путём замещения агента-транскодера на операцию копирования cp.
Пример такого замещения приведён в следующем разделе.

Создание скрипта-транскодера

В целях обеспечения читаемости файла конфигурации Mediatomb, облегчения процесса отладки транскодирования, исключения необходимости перезапускать DLNA-сервер при осуществлении его настройки может быть удобно переместить функцию транскодирования во внешний скрипт.

Для создания скрипта-транскодера создаём файл /usr/local/bin/transcoder. Делаем скрипт выполняемым и обеспечиваем его доступность пользователю mediatomb. В секции   файла конфигурации для всех файлов требующих транскодирования указываем профиль "video-generic". Создаем (приводим к следующему виду) секцию video-generic файла конфигурации

    ="video-generic" enabled="yes" type="external">
	video/mpeg
	yes
	yes
	yes
	yes
	="/usr/local/bin/transcoder" arguments="%in %out"/>
        ="14400000" chunk-size="512000" fill-size="120000"/>
      

перезапускаем медиа-сервер

Последняя версия скрипта-транскодера приведена в статье Bash-скрипты.

Профили транскодирования

Профиль транскодирования это именованная секция с правилами транскодирования, начинающаяся словом и заканчивающаяся словом /profile>.

Структура профиля транскодирования

="videompeg" enabled="yes" type="external">             # - имя профиля с опциями
                                                                     #   например enabled="yes" указание включения данного профиля
   video/mpeg                                    # - тип видеопотока формируемого на выходе 
    yes                                       # - передача URL агенту транскодирования
                                                                     #   если указано "no" то передача потока осуществляется через FIFO и только для HTTP протокола
   yes                              # - указание размещать транскодированные ресурсы сначала (перед оригинальными ?)
   yes              # - указание показывать только транскодированные ресурсы (скрывать оригинальные)
   ="ignore">                                   # - изменение режима транскодирования avi контейнеров с нестандартными кодаками через ffmpeg
       XVID
      DX50
   
   yes                        # - поддержка транскодирования кодека Theora в OGG контейнере
   ="transcoder" arguments="%in %out"/>                # - агент транскодирования с аргументами
   ="14400000" chunk-size="512000" fill-size="120000"/>  # - параметры буфера транскодирования
 

Буфер транскодирования

При осуществлении транскодирования Mediatomb выделяет буфер и организует способ работы агента с ним. Набор правил работы с буфером устанавливается для каждого профиля транскодирования после ключевого слова . В зависимости от размера памяти, мощности процессора, желаемого поведения Mediatomb эти правила могут быть изменены.

Например на следующие

   ="256000000" chunk-size="26214" fill-size="52428"/>

где параметры

  • size="256000000" - устанавливает общий размер буфера для выборки входного потока, теоретически чем больше тем лучше
  • chunk-size="26214" - задаёт размер куска которыми передаётся входной поток из буфера агенту, чем меньше тем плавнее воспроизведение, но слишком маленькие могут наоборот замедлить
  • fill-size="52428" - размер данных в буфере когда будет отдан первый кусок chunk-size, чем меньше тем быстрее будет получено воспроизведение на dlna-клиенте

Настройка транскодирования на лету

Подключение транскодирования "на лету" на медиа-сервере может быть необходимо для тех DLNA-клиентов у которых отсутствует встроенная поддержка воспроизведения некоторых (например mkv) файлов. Транскодирование "на лету" может осуществляться на основе программ-декодеров Mencoder, Ffmpeg, Vlc.

Для включения транскодирования на лету

  • заменяем в файле конфигурации
  строку      
  на          
  • добавляем в файл конфигурации профили трансокодирования
  • в секции   файла конфигурации для всех файлов требующих транскодирование указываем необходимый профиль
  • перезапускаем медиа-сервер

Транскодирование "на лету" mkv/m2ts-файлов

Транскодирование "плотных" (mkv/m2ts) видео-файлов "на лету" требуется для расширения возможностей воспроизведения контента на DLNA-клиенте. Эта задача идентична задаче конвертирования mkv-файлов в avi.

Для настройки транскодирования mkv на лету

  • регистрируем расширение и профиль транскодирования, для этого в файл конфигурации добавляем строки
   в секцию 
      
   в секцию  
      
   в секцию 
      
  • добавляем в файл конфигурации отвечающую за транскодирование, например следующие строки с использованием транскодера mencoder
      
	video/mpeg
	yes
	yes
	yes
	yes

	

	
      
  • перезапускаем медиа-сервер

Настройка файлов конфигурации для транскодирования m2ts-файлов на лету осуществляется аналогично описанию для mkv.
Пример опций транскодирования m2ts-файлов на лету (для просмотра на DLNA-клиенте) без лагов и заметной потери качества

-aid 4352 -alang ru -channels 2 
-vf expand=:::::16/9,scale=768:-1,spp=6,harddup 
-af lavcresample=48000,volnorm,extrastereo -srate 48000 
-lavdopts skiploopfilter=nonref:skipframe=default:threads=8 
-lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=25000:vbitrate=16000:keyint=15:vstrict=0:acodec=ac3:abitrate=384:autoaspect=yes:threads=8 
-oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf -ofps 24
  Внимание!
  Последняя версия опций транскодирования mkv/m2ts находится в примере скрипта-транскодера.

Поддержка воспроизведения avi-файлов

(Как не странно но) С воспроизведением avi-файлов при включённом транскодировании на лету иногда возникают проблемы. Например в случае, если контейнер avi закодирован неподдерживаемым на DLNA-клиенте кодаком. В связи с этим получается, что эти avi-файлы должны быть транскодированы, а другие - поддерживаемые DLNA-клиентом - транскодировать практического смысла не имеется.

Для обеспечения (корректной) поддержки воспроизведения/транскодирования avi,(divx)-файлов

  • регистрируем расширение и профиль транскодирования, Для этого в файл конфигурации добавляем строки
   в секцию 
        
   в секцию  
        
   в секцию 
      
   Внимание!
   мы video/divx
  • создаём (указанный) профиль транскодирования videodivx
      
        video/divx             - сообщаем dlna-клиенту тип потока divx
        yes
        yes
        yes
	             - отключение транскодирования '''avi'''-файлов с отдельными кодаками: ...
	  XVID                     - далее указываются кодаки поддерживаемые dlna-клиентом по его спецификации
	  DIVX                     - кодаки указываются (маркируются) по стандарту
	  DIV3                     - описание стандартов маркировки кодаков приведено на сайте http://www.fourcc.org/codecs.php
	  DIV4
	  DX50
	
        
        
      
  • перезапускаем медиа-сервер

"Нулевое" транскодирование

В некоторых случаях может быть необходимо оставляя механизм "транскодирования на лету" включённым, тем не менее исключить транскодирование отдельных файлов. Для этого можно осуществить "нулевое" транскодирование - заменить агента на операцию копирования входного потока на выходной.

Для "отключения" транскодирования путём замещения агента

  • заменяем в файле конфигурации
  строку      
  на          
  • перезапускаем медиа-сервер

Воспроизведение потокового видео

(Не претендуя ни на точность ни на верность будем считать что) Потоковое видео это видео "не имеющее конца" на момент начала его воспроизведения. Например это воспроизведение из интернет источников: интернет-ТВ, YouTube, SopCast, trailers.apple.com. Воспроизведение потокового видео это часть возможности Mediatomb осуществлять транскодирование на лету. Но в силу выделения этой способности в файле конфигурации в отдельную секцию и в связи с некоторыми особенностями в настройке, данная функция будет рассмотрена отдельно в настоящем разделе.

Воспроизведение роликов с trailers.apple.com

Для настройки воспроизведения роликов с trailers.apple.com

    
      
    
    
  • регистрируем соответствующее расширение и профиль транскодирования, Для этого в файл конфигурации добавляем строки
   в секцию 
        
   в секцию  
        
        
   в секцию 
      
      
  • приводим секцию video-generic файла конфигурации к следующему виду
      
	video/mpeg
	yes
	yes
	yes
	yes
	
	
      
  VIDEO_FILTERS="-vf expand=:::::16/9,scale,spp=7,harddup"
  AUDIO_FILTERS="-af lavcresample=48000,volnorm -srate 48000"
  LAVC_OPTIONS="-lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:vstrict=0:acodec=ac3:abitrate=192:autoaspect=yes:threads=3"
  arguments="-oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf -aid 4352 -alang ru $VIDEO_FILTERS $AUDIO_FILTERS $LAVC_OPTIONS -ofps 24 -o $OUTPUT "
  wget -U QuickTime/7.6.2 "$INPUT" -O - | mencoder $arguments -
  • переключаем работу программы-качалки wget на загрузку файлов через кеширующий прокси-сервер например squid (Подключение кэширующего прокси-сервера позволит исключить загрузку ролика при его повторном воспроизведении.)
  Для этого добавляем в файл конфигурации wget (например в общесистемный /etc/wgetrc) строки
     use_proxy = on
     http_proxy = http://IP-PROXY:PORT-PROXY
  увеличиваем в файле конфигурации размер кешируемого объекта. Например для squid добавляем строку
     maximum_object_size 51200 KB

Для просмотра роликов

  • активизируем DLNA-клиента
  • выбираем папку Online services Apple Trailers
  • запускаем трейлер

Ретрансляция интернет-телевидения (IPTV)

Некоторые провайдеры интернет в качестве общедоступного сервиса локальной сети предоставляют возможность просмотра телевизионных каналов. В связи с этим может быть полезно осуществить ретрансляцию потока телеканала в локальную сеть через Mediatomb. Это разрешает просмотр канала для всех DLNA-клиентов домашней сети. Допустим что на сайте www.video37.ru по адресу http://youlike.video37.ru:2103/video/kultura.ts доступен для просмотра телеканал “Россия Культура”.

Для настройки ретрансляции телеканала

  • регистрируем соответствующее расширение и профиль транскодирования, Для этого в файл конфигурации добавляем строки
   в секцию 
        
   в секцию  
        
   в секцию 
      
  • приводим секцию video-generic файла конфигурации к следующему виду
      
	video/mpeg
	yes
	yes
	yes
	yes
	
	
      
  • создаём в доступном для Mediatomb месте файл например с именем <Телеканал “Россия К”.ts> содержащий строку-url
  http://youlike.video37.ru:2103/video/kultura.ts
  TRANSCODER_OPTIONS="-threads 3 -i $(cat $INPUT) -vf crop=in_w:9/16*in_h,scale=1920:-1 -muxpreload 5 -muxdelay 10 -r 25 -target dvd -ac 2"
  ffmpeg $TRANSCODER_OPTIONS $OUTPUT

Для просмотра роликов

  • активизируем DLNA-клиента
  • выбираем файл с расширением .ts
  • просматриваем телеканал

Воспроизведение видео SopCast

(незавершенный раздел)
Для настройки воспроизведения видео SopCast

    
        
    
  • перезапускаем медиа-сервер
  • создаём скрипт /usr/local/bin/transcoder с включением примерно таких строк
  ...

Для получения дополнительной информации смотри статью Sopcast.

Ссылки

Ретрансляция роликов YouTube

Mediatomb позволяет осуществлять просмотр роликов с YouTube. Поддержку воспроизведения роликов можно обеспечить как средствами самого Mediatomb через добавление соответствующей секции в файл конфигурации. Так и с помощью регистрации специфичного расширения файлов и программы clive. В последнем случае список порталов с которых могут быть воспроизведены ролики существенно расширяется.

через регистрацию секции в разделе

Для настройки воспроизведения роликов с www.youtube.com через регистрацию секции в разделе

   
       
       
       
       
   

  • регистрируем соответствующее расширение и профиль транскодирования для файлов flv, Для этого в файл конфигурации добавляем строки
   в секцию 
        
   в секцию  
        
   в секцию 
      
  • приводим секцию video-generic файла конфигурации к следующему виду
      
	video/mpeg
	yes
	yes
	yes
	yes
	
	
      
  TRANSCODER_OPTIONS="
  -channels 2 -ofps 24 -o $OUTPUT -oac lavc -ovc lavc -mpegopts format=dvd:tsaf 
  -vf expand=:::::$VIERA_ASPECT,scale,spp=6,harddup -af lavcresample=48000,volnorm -srate 48000 
  -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:vstrict=0:acodec=ac3:abitrate=256:autoaspect=yes:threads=8
  wget -U QuickTime/7.6.2 "$INPUT" -o $WGET_LOG -O - | mencoder $TRANSCODER_OPTIONS - >"$MENCODER_LOG"

Для просмотра роликов

  • активизируем DLNA-клиента
  • открываем вкладку Online Service YouTube
  • просматриваем ролик
  Внимание!
  В настоящий момент не реализовано отображение полного списка роликов с плей-листов YouTube в меню Mediatomb.
  В список попадает только один ролик из плей-листа.

через создание файла описания ролика

Механизм просмотра ролика через создание файла описания ролика аналогичен например механизму воспроизведения интернет-телевидения описанному в разделе Ретрансляция интернет-телевидения. Задача просмотра ролика с www.youtube.com в данном случае сводится к загрузке ролика с помощью специальных программ, например clive и последующему декодированию. Достоинством данного метода явлется расширение списка порталов с которых может быть просмотрен ролик.
Например для программы clive на момент написания статьи этот список выглядит так:

  youtube.com     flv|3gp|mp4|hq|hd
  video.google.   flv|mp4
  sevenload.com   flv
  break.com       flv
  liveleak.com    flv
  evisor.tv       flv
  dailymotion.com flv|hq|hd
  tv.cctv.com     flv
  vimeo.com       flv|hd
  spiegel.de      flv|vp6_928|vp6_576|vp6_64|h264_1400
  golem.de        flv|ipod|high
  ehrensenf.de    flv
  clipfish.de     flv
  funnyhub.com    flv
  myubo.com       flv
  buzzhumor.com   flv

Для настройки воспроизведения роликов с www.youtube.com через создание файла описание ролика

  • создаём в доступном для Mediatomb месте файл с расширение ypl вида
  url="http://www.youtube.com/watch?v=jQsNt2GXaLo"
  opts="--format=best"
  • регистрируем соответствующее расширение и профиль транскодирования для файлов ypl, Для этого в файл конфигурации добавляем строки
   в секцию 
        
   в секцию  
        
   в секцию 
      
  • приводим секцию video-generic файла конфигурации к следующему виду
      
	video/mpeg
	yes
	yes
	yes
	yes
	
	
      
  • создаём скрипт-транскодер с включением в него функции скачивания и транскодирования ролика
   transcode_ypl() { # функция транскодирования файлов ypl
   # файлы формата ypl - это специфические файлы содержащие информацию для показа роликов с сайта yuotube и ему подобных
   # файл представляет собой список переменных bash
   # минимально необходимо определение url на ролик

    fifo_file="$LOG_DIR/ffmpeg-clive.pipe";          # имя файла именованного канала
    url=$(grep "url=" $INPUT | awk -F '"' '{print $2}');	# получение URL ролика
    opts=$(grep "opts=" $INPUT | awk -F '"' '{print $2}');	# дополнительные опции транскодирования, например "--format=best"

    mkfifo $fifo_file;                                          # создание именованного канала
    chmod 777 "$fifo_file";
    TRANSCODER_OPTIONS="-y -i $fifo_file -r 25 -target dvd -loglevel debug";
    DOWNLOADER_OPTIONS="--output-file="$fifo_file" --stderr --debug";
    ffmpeg $TRANSCODER_OPTIONS "$OUTPUT" 2>"$log_transcoder" &	# запуск декодера в фоне с чтением из именованного канала
    clive $DOWNLOADER_OPTIONS $opts "$url" 2>"$log_downloader"	# запуск загрузчика с извлечением ролика в именованный канал
   }
  Внимание!
  Последняя версия опций транскодирования находится в примере скрипта-транскодера.

Для просмотра роликов

  • активизируем DLNA-клиента
  • открываем раздел содержащий файл описания ролика
  • просматриваем ролик

Источники:

http://tdkare.ru/sysadmin/index.php/Mediatomb

Mediatomb documentation: 6.2. Import Settings

";

Image Gallery

Services Overview

Curabitur sed urna id nunc pulvinar semper. Nunc sit amet tortor sit amet lacus sagittis posuere cursus vitae nunc.Etiam venenatis, turpis at eleifend porta, nisl nulla bibendum justo.

Contact Us

Nullam quam lorem, tristique non vestibulum nec, consectetur in risus. Aliquam a quam vel leo gravida gravida eu porttitor dui.

Address: 1458 TemplateAccess, USA
Telephone: +123-1234-5678
FAX: +458-4578
Others: +301 - 0125 - 01258
E-mail: mail@yoursitename.com