Linux and dlna server

DLNA-сервер для дома и семьи

Как-то так сложилось, что тег DLNA сервер чаще встречается в постах-вопросах, чем в ответах. И если в вопросах установки на домашний Windows-ПК какой-то пользовательский опыт накоплен, то определиться с выбором ПО для домашнего сервера/NAS-а/медиацентра — оказалось непросто. Распределившись по песочницам народ обособленно решает проблемы каждой программы в отдельности. А понять что из них чего стоит и нужно ли оно вообще — лично мне не удалось.

И вот, я вооружившись ссылкой с Википедии Как выбрать DLNA-сервер под Windows, Mac OS X или Linux — опробовал почти всё, что есть под Linux.

DLNA — его место в домашней сети

Наверное этот путь уже проходило большинство — в доме появляются новые медиа-устройства, растет количество членов семьи потребляющих медиа-контент, распухает сама база фильмов, музыки и фотографий.
При этом каждый строит медиа-инфрастуктуру по-своему. У кого-то это компьютер с TV-OUT, у кого-то нетбук или HTPC. Кто-то расшаривает папки с NAS-а по NFS, кто-то подключает HDD к медиаплееру, кто-то использует возможности Sony PS…
Появляется неразбериха в местах хранения, форматах, кодеках и т.п.
Так, в моем случае оказалось:

  • плазме в гостинной лучше подавать 720p чем FullHD
  • телевизору Sony в детской подключеному по Wi-Fi больше 15Mbit/s лучше не скармливать, H.264 ему нужен максимум Profile 4.1, а файлы на сетевых хранилищах он не видит вообще
  • спутниковый ресивер Openbox не умеет играть звуковые дорожки в DTS, по SMB не тянет больше 30Mbit/s, по NFS-не отображают кириллицу
  • Nokia Lumia и iPhone вообще ограниченны везде и всюду

В общем, единственным вариантом сдружить весь этот зверинец между собой — это использование DLNA сервера.
Теоретически — он и контент из разных мест в одиное дерево папок сведет, и разрешение подгонит и совместимость кодеков проверит и при необходимости перекодирует. Красота…

На что ставить

Домашний компьютер — как правило это Windows-машина. Смотреть фильм с перекодированием пока кто-то играет — не получиться; режима 24/7 нет и близко. На роль не подходит. Поэтому Windows версии программ я даже не рассматривал.
Роутер, прошитый DD-WRT/OpenWRT — есть пакеты для этих прошивок и они работают. Аппаратные ресурсы очень ограничены — транскодирование малореально, скорость доступа к USB порту и сетевым папкам сильно ограничена. Тем не менее — многим и такое подходит.
NAS или домашний сервер с Linux — самое универсальное решение. Программ много. Ограничений по протоколам нет. Производительности x86 процессоров 5-летней давности (в моем случае это Athlon X2-6000) хватает для одновременного перекодирования на-лету двух фильмов любого формата.

Личный опыт, оценка программ

MiniDLNA, uShare и xupnpd

Это разные проекты, но в сущности — одно и то-же. Легковесные и быстрые. Единственная функция, которую они выполняют — предоставляют сетевой доступ к медифайлам по протоколу DLNA/UPnP. Всё остальное плеер или телевизор должны уметь сами. DLNA поддерживается не в полной мере и многие устройства эти серверы просто не видят.
Очень массовые. Работают везде. Пакеты существуют под всевозможные дистрибутивов Linux, маршрутизаторы с прошивками DD-WRT/OpenWRT и NAS-ы. Процедура установки простейшая и хорошо расписана на профильных форумах. Никаких GUI нет
Если Вы, и только Вы (иначе неизбежны жалобы членов семьи):

  • смотрите/слушаете только с одного всеядного устройства (такого как телевизор Samsung)
  • Ваше устройство не умеет напрямую брать файлы с сетевых папок или делает это слишком медленно (такое как телевизор Sony Bravia)
  • храните фильмы/музыку на недорогом NAS-е или маршрутизаторе с USB-диском
  • заранее отбираете контент в нужном формате или не ленитесь перекодировать вручную
  • медиа-файлы уже хорошо отсортированы по папкам или Вас это вообще не беспокоит

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

MediaTomb

Разработчики однозначно пишут, что «это не DLNA-сервер, он лишь поддерживает часть его функций». И хотя некоторые проблемы совместимости могут быть, это вполне себе достойный внимания проект.
Здесь уже есть работающий через встроенный http-сервер GUI — в нем можно управлять папками с контентом. Добавлять новые, создавать ярлыки к существующим, задавать интервалы сканирования и т.п.
Хорошо распространен — нет проблемы установить в любом дистрибутиве Linux, тяжелых зависимостей за собой не тянет. Настраивается единственным текстовым файлом. Очень стабилен в работе, не ресурсоемк.
Можно использовать транскодирование, но оно реализовано в простешем виде. Так, привязка профилей осуществляется к формату входного файла, а не к устройству вывода. Сервер вообще не различает кто к нему подключился. Соответственно готовых профилей под устройства нет — все нужно настраивать вручную:

  • какие форматы транскодировать, а какие передавать напрямую
  • задать кодировщик по ситуации: ffmpeg, vlc, mplayer или что-то ещё
  • задать bitrate, количество аудио-каналов, профиль H.264 и прочие опции кодирования
  • наложить видеофильтр, такой как обрезание полей или crop
Читайте также:  Как создавать темы для linux

В моем случае пришлось писать отдельный скрипт для задания аргументов ffmpeg исходя из формата аудиодорожки (DTS или AC3).
При этом, при просмотре транскодированного потока на телевизоре не будет работать перемотка и выбор адуиодорожки. Прикрутить субтитры — тоже отдельная песня.
В общем — MediaTomb — весьма брутальные инструмент для true линуксоидов. Универсальным его не назовешь, но под себя и свое железо можно настроить идеально.

Rygel

Массовый, есть почти везде. Но очень криво ставится в режим демона (нужно самому писать init-скрипт, создавать папки и пользователя). Является частью проекта gnome и тянет за собой gstreamer (а то и pulseaudio). Если у кого на компьютере стоит KDE или что-то другое — совсем неудобен. Иконки для видео генерирует через tumbler из проекта XFCE, да и то с нюансами. Регулярно падает.
До изучения особенностей транскодирования у меня руки не дошли. Мой вердикт — «не годен«.

PS3 Media Server

Очень старый проект. И хотя от своего начального применения: «Раздавать фильмы/музыку с домашнего Windows ПК на Sony PS», — проект сильно развился. Но JAVA-код и требования для запуска X-сервера меня от него отвернули.

DLNA-сервер в нём есть. Но держать этот комбайн ради одного лишь модуля глупо.
Тем более, что именно из XBMC родился отдельный проект медиа-сервера Plex.

Universal Media Server

Кривой он какой-то. Показывал мне все дерево каталогов вместо выбранной папки. Файлы открывал лишь некоторые и регулярно сыпал ошибками в консоль. С transconding-ом я вообще не разобрался.
Весьма тяжелый из-за JAVA-кода. Обязательно нужен запущенный X-сервер — демоном его не поставишь. «Не годен.«

GMediaServer

Проект заброшен. Внимания не достоин.

LXiMedia

Простая и удобная реализация DLNA-сервера. Достаточно выбрать папки с файлами, жестко задать параметры транскодирования, аудиодорожку, субтитры. Никаких пофилей, настроек. К тому-же это GUI-приложение, демоном не ставиться.
На мой взгляд он в таком виде бесполезен — один из многих и далеко не лучший.

Serviio

Пожалуй самый быстроразвивающийся проект сейчас. Регулярно обновляется. Активно обрастает плагинами, профилями и приложениями под мобильные OS.
Представляет из себя JAVA-приложение работающее демоном. Поддержка DLNA-протокола — полная. Довольно умело разбрасывает контент по папкам и категориям. Умеет создавать превьюшки к фильмам. Легко подключаются разные каналы on-line вещания.
Транскодирует при помощи ffmpeg. База профилей устройств уже достаточно большая (и продолжает пополнятся) — сервер корректно подбирает параметры кодирования для любого из домашних железок. Что не распознал — подобрать профиль или написать свой не сложно.
Из-за того, что используется ffmpeg — та-же проблема, что и в mediatomb — нет перемотки в транскодированном потоке и не меняется аудиодорожка.
Управляется это все либо из JAVA-клиента, либо web-морды, написанной на PHP, либо смартфона (есть приложения под Android и WP).
К сожалению недоступен в виде .deb или .rpm пакета. Нужно ставить вручную: создать папки, пользователя, распаковать, взять на форуме поддержки init-скрипт, прописать в автозапуск». Под Synology NAS есть готовый пакет.
В целом — вполне может стать единой точкой доступа к медиа-контенту дома. Все, что нужно — он умеет.

Skifta

Не включен в Linux-репозитории, а потому редок. Но он имеет графический инсталлятор и несет с собой jre, а потому станет почти в любой системе. Неудобен тем, что запускается в два шага — вначале утилитка в SystemTray, потом — сам media-server. Без иксов и демоном не пойдет. Очень прост и лаконичен, но сильно грузит систему (JAVA-код).

TVMOBiLi

Стоит 30$ (или абонентская плата 1,5$/мес). Доступен в виде .deb и .rpm пакетов. Не в Ubuntu/Fedora установить довольно сложно — встроенные vlc и ffmpeg наверняка найдут недостающие библиотеки и откажутся работать. У меня не получилось подобрать в Gentoo USE-флаги для vlc. Не работал совсем, пришлось переделывать профили, что-бы использовался только ffmpeg.
В целом профили транскодирования — его сильная сторона. Можно задать любую логику и любые параметры.
Управляется через симпатичную WEB-морду. Имеет богатую базу профилей транскодирования. Есть проигрывать файлов через встроенный http-сервер. Превьюшки генерировать не умеет.
Работает быстро и красиво. Хороший кандидат.

Читайте также:  Как узнать версию сборки windows 10 через командную строку
TwonkyServer

Устанавливается распаковкой tar.gz. или через инсталлятор. В Linux репозиториях его нет. Очень быстрый код, мгновенный запуск, удобный web-интерфейс. Хорошо и грамотно раскидывает контент по папкам. Есть готовые init-скрипты. Умеет извлекать из файлов meta-данные и генерировать превьюшки. Все понравилось. Одна беда — $19.95.
И все же: «Рекомендую«.

Как пишут разработчики — «A complete Media Solution». Подтверждаю.
Этот монстр вырос из XBMC и умеет все и даже больше. К фильмам найдет постеры, рейтинги и кучу данных. Сериалы к тому-же ещё и распределит по сезонам и эпизодам. Музыкальную коллекцию упорядочит из любого исходного вида.
Транскодирование делает из всего под всё. Параметрами можно управлять прямо из экранного меню телевизора. Для умных устройств вроде телевизоров LG Smart TV и Apple TV поддержка выходит далеко за пределы протокола DLNA.
Есть поддержка собственного облачного сервиса, что позволяет смотреть домашнее видео удаленно — сервер подстроит параметры отправляемого видео под возможности устройства и канала связи.
Есть отдельно написанные клиенты под мобильные OS и плитки Windows 8.
Для Ubuntu, Fedora, CentOS и массовые модели NAS есть готовые пакеты. Под все остальное — устанавливается простой распаковкой. Из зависимостей требует лишь Avahi-daemon.
К сожалению механизм транскодирования слабо допускает вмешательства в работу — профили подправить можно, но возможности сильно ограничены.

Способен решить любые задачи в рамках темы, при этом бесплатен, стабилен и как ни странно — быстр.

Очень хотелось бы, что-бы кто-то этот список дополнил и/или внес изменения.

Источник

DLNA сервер для Linux Debian / Ubuntu на базе MiniDLNA

Настраиваем домашний DLNA-сервер на базе MiniDLNA, он же ReadyMedia в Linux Debian или Ubuntu Server.

Содержание

Установка MiniDLNA

Простейшим способом установки является, установка пакета из репозитория вашего дистрибутива:

Установка Sudo

Если в вашей системе отсутствует команда sudo, желательно ее установить. Sudo нам потребуется в процессе настройки, для тестирования прав доступа к папкам с медиа-файлами.

Добавляем пользователя в группу sudo:

Выходим из системы и входим заново, чтобы изменение группы вступило в силу.

Настройка MiniDLNA

Правим файл конфигурации:

Как минимум, потребуется задать путь к папке с медиа-файлами, параметр: «media_dir». Также можно задать имя сервера, отображаемое клиентом, параметр: «friendly_name».

В случае если наш DLNA-сервер по совместительству является интернет-шлюзом, также необходимо задать внутренний сетевой интерфейс, параметр: «network_interface».

Параметры в комментариях файла конфигурации содержат значения по умолчанию.

Проверяем параметры init-скрипта /etc/default/minidlna:

Обычно корректировка не требуется. Если файл отсутствует, при первичной установке из исходников, копируем листинг:

Поскольку служба работает под пользователем с ограниченными правами, публикуемые папки и файлы должны быть доступны на чтение для всех пользователей, следовательно, иметь разрешения 644: » rw- r— r— «, для файлов и 755: » rwx r-x r-x «, для папок.

Проверяем доступность для каждой папки, заданной в minidlna.conf, командой:

Если папка недоступна, задаем права доступа:

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

В качестве альтернативы смене разрешений, можно запустить MiniDLNA от имени пользователя или группы-владельца файлов. Для этого необходимо задать параметры USER и GROUP в /etc/default/minidlna, и сменить владельца папки /var/lib/minidlna командой:

Запуск MiniDLNA

Проверяем, работает ли служба, также смотрим параметры запуска:

Проверяем, слушается ли порт:

В случае успешного старта, лог должен быть примерно следующим:

Если видим: » WARNING: Inotify max_user_watches [8192] is low. «, необходимо увеличить число дескрипторов слежения inotify до 100 000. Для этого в файл /etc/sysctl.conf добавим строки:

Или копипастом команды:

Изменение параметра вступит в силу после перезагрузки системы.

Открываем в браузере http://адрес.сервера:8200, видим количество файлов в библиотеке, начиная с версии 1.1.2, также отображается список подключенных клиентов.

Настройка DLNA/UPnP-AV сервера завершена.

Если вместо сообщений и папок-контейнеров MiniDLNA отображаются знаки вопроса, отключаем локализацию.

Если был установлен пакет:

При установке из исходников:

Читайте также:  Astra linux firefox proxy

Перезапускаем MiniDLNA с повторным сканированием библиотеки.

Сканирование медиа-библиотеки MiniDLNA

При появлении ошибок в каталоге, необходимо выполнить повторное сканирование файлов.

Для этого удалим базу Minidlna и перезапустим службу:

Для сканирования медиа-библиотеки при каждом старте системы можно задать ключ запуска: «-R» в параметре DAEMON_OPTS в файле /etc/default/minidlna. Сканирование большой медиа-библиотеки существенно нагружает диск, что может замедлить загрузку системы.

Полное формирование каталога может занять несколько минут. Сканирование папок выполняется в порядке их объявления в конфиге. Файлы из небольших папок, объявленных в конфиге выше, появятся в каталоге в самом начале процесса сканирования. Крупные папки с редко воспроизводимым контентом имеет смысл размещать в конфиге последними.

Установка MiniDLNA из исходников

Дальнейший материал был написан во времена Debian 7 и не тестировался на современных версиях.
Как минимум, инит-скрипты и юнит-файлы берем из deb-пакета.

Устанавливаем сборочные зависимости:

Если при установке зависимостей возникает ошибка: «Невозможно найти пакет с исходным кодом для minidlna». Значит, пакет MiniDLNA отсутствует в вашей версии дистрибутива. В этом случае придется установить зависимости вручную:

Создаем папку для исходников в профиле пользователя и переходим в нее:

Сборка стабильной версии MiniDLNA

Загружаем исходники последней стабильной версии:

С ключом —trust-server-name, будет сохранено исходное имя файла: «minidlna-1.1.4.tar.gz», номер версии может отличаться. Если ключ не указан, файл будет сохранен под именем: «download».

Переходим в папку с исходниками:

Сборка текущей разрабатываемой версии MiniDLNA из Git-репозитория

Для сборки из Git-репозитория, потребуются дополнительные пакеты:

Переходим в папку с исходниками:

Создаем скрипт автоконфигурации:

Установка

Удаляем пакет, если он был установлен ранее:

Устанавливаем собранную версию:

При первичной установке, копируем minidlna.conf в папку /etc:

Если скрипт остался от оригинального пакета Debian, достаточно исправить путь к исполняемому файлу, выделенный красным. Если файл отсутствует, копируем следующий листинг:

Для дистрибутивов на базе Debian 6 в init-скрипте необходимо скорректировать параметр PIDDIR, для современных дистрибутивов корректировка не требуется.

Разрешаем запуск скрипта:

Активируем запуск init-скрипта в rc.d:

По умолчанию служба запускается под пользователем minidlna, создаем учетную запись:

Также, при первичной установке, потребуется создать файл параметров init-скрипта (/etc/default/minidlna), рассмотренный далее, в процессе настройки.

При установке из исходников, minidlna.conf требует дополнительной корректировки. В пакете Debian пути по умолчанию были изменены, теперь их необходимо прописать явно.

Задаем путь для хранения базы данных, используем домашнюю папку пользователя minidlna, созданного на предыдущем шаге:

Задаем путь к лог-файлу:

Отключение запроса способа отображения файлов: All Files, Folders

Настраиваем отображение содержимого папок Music, Pictures, Video без промежуточного запроса способа их отображения.

Частично вопрос можно решить установкой параметра: «root_container=B» в minidlna.conf. При этом сам запрос не отключается, но содержимое папок отображается непосредственно в корневом контейнере.

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

Отключение виртуальных папок в MiniDLNA версии 1.1.4 и выше

Для версии 1.1.4 применяем патч, и добавляем параметр disable_extended_directories=yes в minidlna.conf. Данный патч войдет в состав следующей версии MiniDLNA, для более поздних версий достаточно задать параметр в файле конфигурации.

Получаем и устанавливаем пакет с исходниками, как описано в разделе: «Установка или обновление MiniDLNA из исходников».

Переходим в папку с исходниками:

Загружаем и применяем патч:

Собираем и устанавливаем исправленную версию:

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

Перезапускаем службу с повторным сканированием медиа-библиотеки:

В системах на базе systemd для повторного сканирования потребуется удалить базу данных вручную:

Отключение виртуальных папок в MiniDLNA версии 1.1.3 и ниже

Получаем и устанавливаем пакет с исходниками, как описано в разделе: «Установка или обновление MiniDLNA из исходников».

Переходим в папку с исходниками:

Необходимые константы идентификаторов папок объявлены в scanner.h

Нам необходимо при запросе папок MUSIC_ID, VIDEO_ID и IMAGE_ID, перенаправить клиента в MUSIC_DIR_ID, VIDEO_DIR_ID и IMAGE_DIR_ID соответственно.

Обработка запросов клиента реализована в файле upnpsoap.c.

Сохраняем резервную копию файла:

Активируем поиск (F6), ищем процедуру: «BrowseContentDirectory».

В начале процедуры выполняется разбор SOAP/XML-запроса, затем его обработка и возврат результата.

Разбор запроса завершается формированием отладочного сообщения:

Далее реализован выбор корневого контейнера в зависимости от конфигурационного параметра root_container:

Сразу после этого блока и перед блоком с запросами к БД добавляем код перенаправления папок для видео, музыки и изображений:

В итоге правленный фрагмент должен выглядеть следующим образом:

Собираем и устанавливаем исправленную версию:

Проверяем результат. Папки должны открываться без запроса способа отображения.

Ссылки

Список DLNA-серверов и клиентов в Википедии.

Источник

Оцените статью