Thank you for reading this post, don't forget to subscribe!
У меня есть сервер с операционной системой Ubuntu 18. Телевизоры LG в комнате и Philips на кухне подключается к сети по Ethernet + Wi-Fi и поддерживают технологию DLNA. Почему бы не развернуть на Ubuntu простой медиа сервер с поддержкой DLNA, чтобы из папки раздавать фильмы?
DLNA (Digital Living Network Alliance) — набор стандартов, которые позволяют передавать и воспроизводить в реальном времени фото, видео и аудио файлы по домашней сети. Поддерживается проводная (Ethernet) и беспроводная (Wi-Fi) связь.
Медиа сервер с поддержкой DLNA позволит:
- Хранить все фильмы, фотографии и музыку централизовано в одном месте.
- Воспроизводить контент на любом устройстве в доме с поддержкой DLNA: телевизоры, приставки, телефоны, проигрыватели.
- Полноценная поддержка DLNA позволяет на лету сжимать и кодировать видео в формат, понятный конечному устройству.
- Если постараться, то потом всё это можно организовать в единую систему с торрент-клиентом, веб-интерфейсом и удалённым доступом.
- Не бегать с флешками по всему дому.
- Да мне уже этого достаточно.
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
На сайта проекта доступна более новая версия 1.3.0, но из-за зависимостей её не удалось просто так установить, а устанавливать все необходимые пакеты не было времени.
Конфигурационный файл находится по адресу: /etc/minidlna.conf.
Комментарии понятны, давайте что-нибудь настроим. Сервис у меня будет работать от пользователя sf. Создадим рабочую папку для базы и логов:
mkdir /opt/minidlna
chown sf\: /opt/minidlna
Настроим /etc/minidlna.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#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
Список ObjectID
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:
Здесь же указывается запуск в режиме демона:
START_DAEMON="yes"
Обращаем внимание на опцию:
DAEMON_OPTS="-r"
Опция применяет параметр при запуске службы:
- -r — добавляет новые объекты в базу, удаляет несуществующие. На виртуальной папке fuse работало только удаление.
- -R — удаляет базу и формирует заново. Работает без нареканий.
Перезапускаем службу:
systemctl restart minidlna
Или:
service minidlna restart
Проверяем, работает ли служба, также смотрим параметры запуска:
service minidlna status
Проверяем порт:
netstat -tanu | grep 8200
Настройка 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.
Изменение применится после перезагрузки системы.
В браузере http://адрес_сервера:8200, видим количество файлов в библиотеке и список подключенных клиентов.
Порты
Для работы используются порты по умолчанию:
- 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 по ночам.