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

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:

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 по ночам.