Категория:
Решил поделится опытом. Моя первая статья, так что сильно не критикуйте))
Что такое DLNA и зачем оно надо.
DLNA-протокол это спецификация сетевых протоколов позволяющая развернуть в локальной сети медиа-сервер. DLNA-сервер создаёт вид сетевых ресурсов понятный для DLNA-клиентов и позволяющий им осуществлять их просмотр. Медиа-ресурсы транслируемые DLNA-сервером это видео, музыка, фотографии. DLNA-сервер может транслировать файлы как с собственного жёсткого диска так и из сети в том числе из интернет. DLNA-сервер может отдавать ресурсы DLNA-клиентам "как есть" или осуществлять их транскодирование на лету приводя к формату понятному DLNA-клиентам. Таким образом транскодирование расширяет возможности DLNA-клиентов по воспроизведению контента.
Нам известны следующие программы позволяющие создать dlna-сервер в linux
Mediatomb - dlna-сервер с широкими возможностями
Minidlna - небольшая, простая в настройке программа dlna-сервер
Ps3 - программа позволяющая создать dlna-сервер с транскодированием видео на лету
Rygel - dlna-сервер поддерживаемый проектом Gnome
uShare - dlna-сервер, сайт проекта
Программы создающие dlna-сервер в windows
Windows Media Player - проигрыватель и dlna-сервер
DLNA-клиенты - это сетевые медиаплееры, телевизоры ("современных" поколений).
Пакет Mediatomb позволяет развернуть в сети DLNA-сервер с поддержкой воспроизведения медиа-файлов на DLNA-клиенте, в том числе с возможностью транскодирования на лету.
Официальный сайт проекта http://mediatomb.cc/.
Установка
Пакет есть в дистрибутиве поставки.
Для установки пакета
• в командной строке: следует выполнить команду # zipper in mediatomb
• в графическом режиме: воспользоваться специализированной программой управления пакетами.
По окончании установки медиа-сервер Mediatomb автоматически стартует.
Часто используемые команды:
# /etc/init.d/mediatomb restart - перезапуск сервера
# tail /var/log/mediatomb.log - просмотр последних сообщений сервера
# cat /var/log/mediatomb.log | egrep -is error - просмотр ошибок в работе
Для начала использования программу необходимо настроить.
Файл конфигурации
Файл конфигурации медиа-сервера
• указывается при старте в командной строке # mediatomb --config <ФАЙЛ_КОНФИГУРАЦИИ>
• если не указан в командной строке, то ищется в домашнем каталоге пользователя ~/.mediatomb/config.xml
• если отсутствует в домашнем каталоге, то используется общесистемный /etc/mediatomb/config.xml
Далее по тексту, если не указано иное, предполагается что Файлом конфигурации называется общесистемный файл конфигурации /etc/mediatomb/config.xml. Для его редактирования требуется получение прав суперпользователя.
Настройка
Для включения автозапуска пакета при старте системы
• устанавливаем опции в файле /etc/mediatomb.conf:
## Network interface on which the server will run, you need to edit this!
MT_INTERFACE="eth1" интерфейс на котором работает сервер
## MediaTomb will be started on port 50500
MT_PORT="50500" порт по которому доступен web интерфейс сервера.
• перезапускаем медиа-сервер
• Для правильной работы сервера в фаерволе необходимо открыть порты:
• UDP/TCP - 50500;
• TCP - 50001, 50002;
• UDP – 1900.
Наполнение сервера
Для начала использования медиа-сервера его необходимо наполнить контентом - добавить в базу данных программы файлы которые будет демонстрировать Dlna-сервер.
Для добавления медиа-файлов через веб-интерфейс
• открываем доступ пользователю (группе) Mediatomb к ресурсам с медиа-файлами
• открываем панель управления dlna-сервером через web-интерфейс: для этого в веб-браузере открываем URL http://localhost:50500/ (должен быть установлен www-сервере например apache2)
• нажимая кнопку "плюс" добавляем каталоги и файлы на вкладке "Filesystem"
Для добавления медиа-файлов через командную строку (? проверить)
• выполняем команду
# mediatomb -a <ПУТЬ>
Русские буквы в именах файлах
При наполнении базы 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=
• редактируем секцию <import> в файле конфигурации
<import hidden-files="yes">
<filesystem-charset>UTF-8</filesystem-charset>
<metadata-charset>UTF-8</metadata-charset>
<playlist-charset>UTF-8</playlist-charset>
...
</import>
• очищаем базу со списком добавленных медиа-файлов, например в веб-интерфейсе управления удаляя все размещённые там файлы и папки
• добавляем медиа-контент как описано выше.
Наблюдаем правильное отображение имён файлов на русском языке
Переключение на базу MySQL
При установке по умолчанию пакет Mediatomb использует хранение информации о медиа-файлах в хранилище в формате sqlite3. При использовании данного движка для поддержки кириллицы в именах воспроизводимых файлов требуются дополнительные усилия по настройке. Кроме того следует учитывать что у данного движка имеются ограничения по размеру базы. В связи с этим переключение работы медиа-сервера на использование движка mysql становиться вполне оправданным.
Для переключения медиа-сервера на использование mysql
• устанавливаем mysql.
• редактируем секцию <storage> в файле конфигурации
<storage>
<sqlite3 enabled="no">
<database-file>mediatomb.db</database-file>
</sqlite3>
<mysql enabled="yes">
<host>localhost</host>
<username>mediatomb</username>
<database>mediatomb</database>
</mysql>
</storage>
• создаём базу и пользователя 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 со всеми привилегиями и возможностью доступа к базе без пароля
• создаём таблицы в базе
# mysql -p mediatomb </usr/share/mediatomb/mysql.sql
• перезапускаем медиа-сервер
Создание скрипта-транскодера
В целях обеспечения читаемости файла конфигурации Mediatomb, облегчения процесса отладки транскодирования, исключения необходимости перезапускать DLNA-сервер при осуществлении его настройки может быть удобно переместить функцию транскодирования во внешний скрипт.
Для создания скрипта-транскодера
• создаём файл /usr/local/bin/transcoder
• делаем скрипт выполняемым и обеспечиваем его доступность пользователю mediatomb
• заменяем в файле конфигурации
строку <transcoding enabled="no">
на <transcoding enabled="yes">
• добавляем секцию video-generic
<profile name="video-generic" enabled="yes" type="external">
<mimetype>video/mpeg</mimetype>
<accept-url>yes</accept-url>
<first-resource>yes</first-resource>
<hide-original-resource>yes</hide-original-resource>
<accept-ogg-theora>yes</accept-ogg-theora>
<agent command="/usr/local/bin/transcoder" arguments="%in %out"/>
<buffer size="256000000" chunk-size="26214" fill-size="52428"/>
</profile>\
в секции <mimetype-profile-mappings> файла конфигурации для всех файлов требующих транскодирования указываем профиль "video-generic"
• перезапускаем медиа-сервер
Внимание!
При осуществлении транскодирования Mediatomb выделяет буфер и организует способ работы агента с ним. Набор правил работы с буфером устанавливается для каждого профиля транскодирования после ключевого слова <buffer size. В зависимости от размера памяти, мощности процессора, желаемого поведения Mediatomb эти правила могут быть изменены. Например на следующие
<buffer size="256000000" chunk-size="26214" fill-size="52428"/>
где параметры
size="256000000" - устанавливает общий размер буфера для выборки входного потока, теоретически чем больше тем лучше
chunk-size="26214" - задаёт размер куска которыми передаётся входной поток из буфера агенту, чем меньше тем плавнее воспроизведение, но слишком маленькие могут наоборот замедлить
fill-size="52428" - размер данных в буфере когда будет отдан первый кусок chunk-size, чем меньше тем быстрее будет получено воспроизведение на dlna-клиенте
Воспроизведение потокового видео
(Не претендуя ни на точность ни на верность будем считать что) Потоковое видео это видео "не имеющее конца" на момент начала его воспроизведения. Например это воспроизведение интернет-ТВ.
Для настройки ретрансляции телеканала
• регистрируем соответствующее расширение и профиль транскодирования, Для этого в файл конфигурации добавляем строки
в секцию
<extension-mimetype ignore-unknown="no">
<map from="tv" to=""video/tv-avi"/>
в секцию <mimetype-contenttype>
<treat mimetype="video/tv-avi" as="tv"/>
в секцию <mimetype-profile-mappings>
<transcode mimetype="video/tv-avi" using="video-generic"/>
• приводим секцию video-generic файла конфигурации к следующему виду
<profile name="video-generic" enabled="yes" type="external">
<mimetype>video/mpeg</mimetype>
<accept-url>yes</accept-url>
<first-resource>yes</first-resource>
<hide-original-resource>yes</hide-original-resource>
<accept-ogg-theora>yes</accept-ogg-theora>
<agent command="/usr/local/bin/transcoder" arguments="%in %out"/>
<buffer size="256000000" chunk-size="26214" fill-size="52428"/>
</profile>\
• создаём в доступном для 'Mediatomb месте например файл с именем <Телеканал “Россия К”.tv> содержащий строку-url
http://178.49.8.54:1234/udp/239.1.11.3:1234
• создаём скрипт-транскодер/
Для просмотра роликов
• активизируем DLNA-клиента (телевизор или программу vlc)
• выбираем файл с расширением .tv
• просматриваем телеканал
P.S. Могут так же понадобиться пакеты ffmpeg, lame, vlc, MPlayer.
P.S.S. Так как, по непонятным мне причинам, тут нельзя прикреплять файлы, то скрипт конвертирования можно скачать:
https://docs.google.com/open?id=0B-_hTZxUUPMPSUNhVll4RkpoQjg
Материал взят с http://nikols.dyndns.org/sysadmin/index.php/Mediatomb
Шикарная статья!
Единственное пожелание (уж не знаю кому как, но мне бы было так проще) - в начале не только сказать, что Mediatomb - это DLNA-сервер, но и в двух словах рассказать, что такое DLNA-сервер и зачем он может пригодиться. Мне для этого потребовалось посетить википедию, не сложно, да и общее развитие свое повысил, но все же хотелось бы видеть полную информацию в одном месте - что, для чего, какими средствами и как!
Еще раз спасибо! Уже некоторое время была мысль сделать что-нибудь подобное дома. Теперь, имея такой подробный "юзер-мануал", на выходных заморочусь)))))))))))