Перейти к основному содержанию

Медиа сервер MiniDLNA на Ubuntu 18

DLNA

Надоело мне перекачивать на флешки фильмы, чтобы посмотреть их на телевизоре. Кто придумал размещать USB разъёмы на телевизорах сзади? Юзабилити на нуле. Пропихивая руку в узкую щель за телевизором и пытаясь в очередной раз воткнуть куда-нибудь на ощупь флешку, я подумал: "Зачем я всем этим занимаюсь?"

У меня есть сервер с операционной системой Ubuntu 18. Телевизоры LG в комнате и Philips на кухне подключается к сети по Ethernet + Wi-Fi и поддерживают технологию DLNA. Почему бы не развернуть на Ubuntu простой медиа сервер с поддержкой DLNA, чтобы из папки раздавать фильмы?

DLNA (Digital Living Network Alliance) — набор стандартов, которые позволяют передавать и воспроизводить в реальном времени фото, видео и аудио файлы по домашней сети. Поддерживается проводная (Ethernet) и беспроводная (Wi-Fi) связь.

Медиа сервер с поддержкой DLNA позволит:

  • Хранить все фильмы, фотографии и музыку централизовано в одном месте.
  • Воспроизводить контент на любом устройстве в доме с поддержкой DLNA: телевизоры, приставки, телефоны, проигрыватели.
  • Полноценная поддержка DLNA позволяет на лету сжимать и кодировать видео в формат, понятный конечному устройству.
  • Если постараться, то потом всё это можно организовать в единую систему с торрент-клиентом, веб-интерфейсом и удалённым доступом.
  • Не бегать с флешками по всему дому.
  • Да мне уже этого достаточно.

Ещё статьи про медиа сервер

Медиа сервер Emby на Ubuntu 18

Медиа сервер Jellyfin на Ubuntu 18

MiniDLNA

После недолгих поисков был найден кандидат на установку — minidlna. Сейчас проект носит название ReadyMedia, но пакеты в Ubuntu носят прежнее название. Это легковесный DLNA/UPnP медиа сервер. По сути осуществляет единственную функцию: предоставляют сетевой доступ к медифайлам по протоколу DLNA/UPnP. Обладает рядом достоинств и недостатков, выявленных в процессе эксплуатации.

Достоинства minidlna:

  • Потребляет мало ресурсов. При формировании базы грузит процессор, после работает почти незаметно.
  • Простота настройки. Есть пакеты под разные ОС, NAS, DD-WRT/OpenWRT.
  • Возможность работы под любым указанным пользователем в качестве демона.
  • Ничего лишнего.

Недостатки minidlna:

  • DLNA поддерживается не в полной мере. Может не обнаруживаться некоторыми устройствами.
  • Не производит перекодирование на лету. Если телевизор не может распознать файл, то проиграть не сможет.
  • Проблемы с автоматическим обновлением базы. Подробности в статье.

Особенности minidlna:

  • Нет GUI и web. Это для кого-то недостаток, а для кого-то достоинство.

Ссылки

https://sourceforge.net/projects/minidlna/

Установка MiniDLNA в Ubuntu 18

Устанавливаем пакет из репозитория:

apt-get install -y minidlna

dlna

На Ubuntu Server 18.04.4 LTS установилась версия minidlna 1.2.1. Её и будем тестировать.

dlna

На сайта проекта доступна более новая версия 1.3.0, но из-за зависимостей её не удалось просто так установить, а устанавливать все необходимые пакеты не было времени.

Конфигурационный файл находится по адресу: /etc/minidlna.conf.

dlna

Комментарии понятны, давайте что-нибудь настроим. Сервис у меня будет работать от пользователя sf. Создадим рабочую папку для базы и логов:

mkdir /opt/minidlna
chown sf\: /opt/minidlna

Настроим /etc/minidlna.conf:

#user=sf

media_dir=V,/home/sf/Films
media_dir=A,/home/sf/Music
media_dir=P,/home/sf/Photo
merge_media_dirs=yes
db_dir=/opt/minidlna/cache/minidlna
log_dir=/opt/minidlna/log
root_container=V
port=8200
friendly_name=MiniDLNA Media Server
model_name=MiniDLNA
inotify=yes
notify_interval=895

    media_dir — директория, к которой будем предоставлять доступ. Можно указать несколько. Указывается тип контента и, через запятую, путь к папке. Типы контента:

    • "A" для аудио (например, media_dir=A,/var/lib/minidlna/music)
    • "P" для картинок (например, media_dir=P,/var/lib/minidlna/pictures)
    • "V" для видео (например, media_dir=V,/var/lib/minidlna/videos)
    • "PV" для картинок и видео (например, media_dir=PV,/var/lib/minidlna/digital_camera)

    merge_media_dirs — объединять медиа директории.

    db_dir — директория, в которой формируется база данных DLNA.

    log_dir — директория, в которой находится log файл. Мне кажется, переопределяется в /etc/defaults/minidlna.

    root_container — контейнер для корневой директории. Варианты:

    • "." стандартный контейнер
    • "B" Browse
    • "M" Music
    • "P" Pictures
    • "V" Video
    • Можно использовать ObjectID, например, 1$F для Music/Playlists
      • MUSIC "1"
        MUSIC_ALL "1$4"
        MUSIC_GENRE "1$5"
        MUSIC_ARTIST "1$6"
        MUSIC_ALBUM "1$7"
        MUSIC_PLIST "1$F"
        MUSIC_DIR "1$14"
        MUSIC_CONTRIB_ARTIST    "1$100"
        MUSIC_ALBUM_ARTIST    "1$107"
        MUSIC_COMPOSER    "1$108"
        MUSIC_RATING "1$101"
        VIDEO "2"
        VIDEO_ALL "2$8"
        VIDEO_GENRE "2$9"
        VIDEO_ACTOR "2$A"
        VIDEO_SERIES "2$E"
        VIDEO_PLIST "2$10"
        VIDEO_DIR "2$15"
        VIDEO_RATING "2$200"
        IMAGE "3"
        IMAGE_ALL "3$B"
        IMAGE_DATE "3$C"
        IMAGE_ALBUM "3$D"
        IMAGE_CAMERA "3$D2"
        IMAGE_PLIST "3$11"
        IMAGE_DIR "3$16"
        IMAGE_RATING "3$300"

    port — порт, по умолчанию 8200.

    friendly_name — название сервера, которое будет отображаться на телевизоре, клиенте DLNA.

    model_name — модель, тоже для DLNA клиента

    inotify=yes — важный параметр, который включает возможность автоматического отслеживания добавление и удаления контента в директории. Вот только данный функционал не работает в примонтированных директориях типа cifs или виртуальных папок fuse, они просто не формируют уведомления inotes для операционной системы.

    notify_interval — интервал в секундах, через который minidlna броадкастом уведомляет по сети о своём существовании всем устройствам. По умолчанию примерно 15 минут (895 секунд).

    user — здесь можно указать пользователя, под которым будет работать minidlna, однако, в Ubuntu данный параметр (вместе с группой) переопределяется в файле /etc/defaults/minidlna, поэтому его нужно указать там в параметрах USER и GROUP:

    dlna

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

    START_DAEMON="yes"

    Обращаем внимание на опцию:

    DAEMON_OPTS="-r"

    Опция применяет параметр при запуске службы:

    • -r — добавляет новые объекты в базу, удаляет несуществующие. На виртуальной папке fuse работало только удаление.
    • -R — удаляет базу и формирует заново. Работает без нареканий.

    Перезапускаем службу:

    systemctl restart minidlna

    Или:

    service minidlna restart

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

    service minidlna status

    dlna

    Проверяем порт:

    netstat -tanu | grep 8200

    dlna

    Ого, уже телевизоры набросились на сервер.

    Настройка MiniDLNA медиа сервера завершена.

    Исправление ошибок

    В логах ошибка:

    [2021/10/25 12:53:17] monitor.c:218: warn: WARNING: Inotify max_user_watches [8192] is low or close to t
    he number of used watches [92] and I do not have permission to increase this limit.  Please do so manual
    ly by writing a higher value into /proc/sys/fs/inotify/max_user_watches

    Правим /etc/sysctl.conf, дописываем:

    #MiniDLNA warning fix
    fs.inotify.max_user_watches = 100000

    Главное, чтобы значение было не меньше 65536.

    minidlna

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

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

    dlna

    Порты

    Для работы используются порты по умолчанию:

    • ssdp (1900/udp)
    • trivnet1 (8200/tcp)

    Сканирование библиотеки

    При запуске демона minidlna сканирует подключённые медиа директории. Сканирование задано параметром "-r" в файле /etc/defaults/minidlna опцией:

    DAEMON_OPTS="-r"

    Опция добавляет новые объекты в базу, удаляет несуществующие. Если указать опцию "-R", то при запуске демона база удалится и сформируется заново. Сканирование больших библиотек может длиться несколько минут.

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

    rm /opt/minidlna/cache/minidlna/files.db
    systemctl restart minidlna

    Или:

    minidlnad -R && systemctl restart minidlna

    Автоматическое обновление данных с помощью inotify на виртуальных папках не работает. Единственный вариант полного обновления библиотеки — запуск команды вручную или с помощью crontab по ночам.

    Теги

     

    Похожие материалы