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"/>
В разделе добавить/исправить
Выключить транскодирование - или сделать его нулевым,перегрузить 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) видео-файлов "на лету" требуется для расширения возможностей воспроизведения контента на DLNA-клиенте. Эта задача идентична задаче конвертирования mkv-файлов в avi. Для настройки транскодирования mkv на лету Настройка файлов конфигурации для транскодирования m2ts-файлов на лету осуществляется аналогично описанию для mkv. (Как не странно но) С воспроизведением avi-файлов при включённом транскодировании на лету иногда возникают проблемы. Например в случае, если контейнер avi закодирован неподдерживаемым на DLNA-клиенте кодаком. В связи с этим получается, что эти avi-файлы должны быть транскодированы, а другие - поддерживаемые DLNA-клиентом - транскодировать практического смысла не имеется. Для обеспечения (корректной) поддержки воспроизведения/транскодирования avi,(divx)-файлов В некоторых случаях может быть необходимо оставляя механизм "транскодирования на лету" включённым, тем не менее исключить транскодирование отдельных файлов. Для этого можно осуществить "нулевое" транскодирование - заменить агента на операцию копирования входного потока на выходной. Для "отключения" транскодирования путём замещения агента (Не претендуя ни на точность ни на верность будем считать что) Потоковое видео это видео "не имеющее конца" на момент начала его воспроизведения. Например это воспроизведение из интернет источников: интернет-ТВ, YouTube, SopCast, trailers.apple.com. Воспроизведение потокового видео это часть возможности Mediatomb осуществлять транскодирование на лету. Но в силу выделения этой способности в файле конфигурации в отдельную секцию и в связи с некоторыми особенностями в настройке, данная функция будет рассмотрена отдельно в настоящем разделе. Для настройки воспроизведения роликов с trailers.apple.com Для просмотра роликов Некоторые провайдеры интернет в качестве общедоступного сервиса локальной сети предоставляют возможность просмотра телевизионных каналов. В связи с этим может быть полезно осуществить ретрансляцию потока телеканала в локальную сеть через Mediatomb. Это разрешает просмотр канала для всех DLNA-клиентов домашней сети. Допустим что на сайте www.video37.ru по адресу http://youlike.video37.ru:2103/video/kultura.ts доступен для просмотра телеканал “Россия Культура”. Для настройки ретрансляции телеканала Для просмотра роликов (незавершенный раздел) Для получения дополнительной информации смотри статью Sopcast. Ссылки Mediatomb позволяет осуществлять просмотр роликов с YouTube. Поддержку воспроизведения роликов можно обеспечить как средствами самого Mediatomb через добавление соответствующей секции в файл конфигурации. Так и с помощью регистрации специфичного расширения файлов и программы clive. В последнем случае список порталов с которых могут быть воспроизведены ролики существенно расширяется. Для настройки воспроизведения роликов с www.youtube.com через регистрацию секции в разделе Для просмотра роликов Механизм просмотра ролика через создание файла описания ролика аналогичен например механизму воспроизведения интернет-телевидения описанному в разделе Ретрансляция интернет-телевидения. Задача просмотра ролика с www.youtube.com в данном случае сводится к загрузке ролика с помощью специальных программ, например clive и последующему декодированию. Достоинством данного метода явлется расширение списка порталов с которых может быть просмотрен ролик. Для настройки воспроизведения роликов с www.youtube.com через создание файла описание ролика Для просмотра роликов Источники:
строку
на
Транскодирование "на лету" mkv/m2ts-файлов
в секцию
video/mpeg
yes
yes
yes
yes
Пример опций транскодирования 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-файлов
в секцию
video/divx - сообщаем dlna-клиенту тип потока divx
yes
yes
yes
- отключение транскодирования '''avi'''-файлов с отдельными кодаками: ...
XVID - далее указываются кодаки поддерживаемые dlna-клиентом по его спецификации
DIVX - кодаки указываются (маркируются) по стандарту
DIV3 - описание стандартов маркировки кодаков приведено на сайте http://www.fourcc.org/codecs.php
DIV4
DX50
"Нулевое" транскодирование
строку
на
Воспроизведение потокового видео
Воспроизведение роликов с trailers.apple.com
в секцию
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 (например в общесистемный /etc/wgetrc) строки
use_proxy = on
http_proxy = http://IP-PROXY:PORT-PROXY
увеличиваем в файле конфигурации размер кешируемого объекта. Например для squid добавляем строку
maximum_object_size 51200 KB
Ретрансляция интернет-телевидения (IPTV)
в секцию
video/mpeg
yes
yes
yes
yes
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
Воспроизведение видео SopCast
Для настройки воспроизведения видео SopCast
...
Ретрансляция роликов YouTube
через регистрацию секции в разделе
в секцию
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"
Внимание!
В настоящий момент не реализовано отображение полного списка роликов с плей-листов YouTube в меню Mediatomb.
В список попадает только один ролик из плей-листа.
через создание файла описания ролика
Например для программы 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
url="http://www.youtube.com/watch?v=jQsNt2GXaLo"
opts="--format=best"
в секцию
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" # запуск загрузчика с извлечением ролика в именованный канал
}
Внимание!
Последняя версия опций транскодирования находится в примере скрипта-транскодера.