Minidlna
Материал из Пингвиньи радостей
Содержание
Статья о dlna медиа сервере Minidlna
Minidlna это программа создающая DLNA-сервер в TCP/IP локальной сети.
Пакет не осуществляет транскодирование на лету. как например это могут делать Mediatomb, PS3. В связи с этим требования предъявляемые программой к ресурсам рабочей станции с работающим MiniDLNA незначительны. DLNA-клиент будет воспроизводить/показывать/проигрывать файлы с медиа-сервера под управлением MiniDLNA только поддерживаемых им самим расширений и кодаков.
Установка
Пакет присутствует в хранилище пакетов debian wheezy.
Для установки пакета
- в командной строке: следует выполнить команду # apt-get install minidlna
- в графическом режиме: воспользоваться специализированной программой управления пакетами
После установки пакет готов к использованию.
Для приведения DLNA-сервера в рабочее состояние требуется его настройка.
Некоторые часто используемые команды
Установка с сайта
Установка с сайта потребуется, если пакет отсутствует в хранилище пакетов операционной среды, как например в debian squeeze.
Для установки MiniDLNA с сайта
- скачивается последняя версия пакета с сайта www.sourceforge.net
- распаковывается содержимое пакета, например в папку /tmp/minidlna, далее
- копируется исполняемый файл minidlna из папки /usr/sbin/ в каталог /usr/sbin/
- копируется (?!) файл сообщений LC_MESSAGES из папки /usr/share/locale/de/ в каталог /usr/share/locale/de/
- копируется файл конфигурации minidlna.conf из папки /etc/ в каталог /etc/
По завершении установки для приведения MiniDLNA в рабочее состояние требуется его настройка.
Для запуска DLNA-сервера используется команда
Для проверки доступности MiniDLNA в DLNA-клиенте открывается вклада «медиа-серверы». Через определённое время появляется строка «MiniDLNA Server» (или другое установленное в friendly_name в файле конфигурации при осуществлении его настройки)
Для настройки автоматического запуска MiniDLNA при старте операционной среды.
- получаем права суперпользователя
- вариант№1 через файл /etc/rc.local:
Настройка Minidlna
Настройка MiniDLNA осуществляется путём редактирования его файлов конфигурации и наполнения его контентом. Minidlna корректно работает с кириллицей в именовании папок и файлов.
Windows media connect compatible minidlna
Установка
Устанавливается MiniDLNA из репозиториев
Настройка
Файл с настройками MiniDLNA находится по пути /etc/minidlna.conf.
Открываем его своим любимым редактором (nano, vim, gedit и т.д.). У кого нет любимого редактора
можно воспользоваться шпаргалкой
Далее смотрим, что там есть. Базовый файл с настройками имеет коментарии ко всем параметрам. Все довольно просто и понятно. Если совсем ничего не понятно, то сделаем минимальные изменения в настройках.
Путь к медиабиблиотеке
Необходимо указать нашему серверу где же находится вся наша медиабиблиотека (директория или несколько директорий) с фильмами, мультиками, фотографиями и музыкой. Пути к библиотекам указываются ключом media_dir. Таких ключей можно указать сколько угодно. Примеры настройки лежат тут же.
Директория с базой данных
MiniDLNA использует в качестве СУБД sqlite3. Соответственно вся база данных хранится в файле. Нам стоит позаботиться о том где этот файл будет лежать. Для этого просто раскоментируем (или добавим свой) параметр
Ничего не работает 🙁
Должно пройти некторое время пока сервер просканирует все папки и запишет к себе в базу все, что ему надо. В зависимости от количества файлов этот процесс может занять от нескольких секунд до нескольких минут.
По собственному опыту могу сказать одно, что в основном все проблемы (телевизор видит сервер, но не видит файлов; файлы видно, но показывать не хочет и т.п.) из-за того, что: Вы неправильно раздали права на папки с видео/музыкой/фотками (или на конечные файлы). В данном случае просто надо выдать правильные права. Для файлов подойдут 664. Для папок 775. Как правило с папками все нормально. Не хватает прав как раз на конечных файлах. Для этого можно воспользоваться командой:
Ваше устройство просто не поддерживает данный тип фалов или кодек. В данном случае изучайте документацию на устройство — возможно его можно перепрошить и обновить кодеки в нем.
Ну а если все-равно ничего не работет, то видимо это судьба. Махни рукой и не забивай себе голову всякой ерундой.
Мой пример файла конфигурации:
# port for HTTP (descriptions, SOAP, media transfer) traffic
port=8200
# network interface to bind to (this is the only interface that will serve files)
#network_interface=eth0
# set this to the directory you want scanned.
# * if have multiple directories, you can have multiple media_dir= lines
# * if you want to restrict a media_dir to a specific content type, you
# can prepend the type, followed by a comma, to the directory:
# + «A» for audio (eg. media_dir=A,/home/jmaggard/Music)
# + «V» for video (eg. media_dir=V,/home/jmaggard/Videos)
# + «P» for images (eg. media_dir=P,/home/jmaggard/Pictures)
media_dir=V,/mnt/222/video
media_dir=V,/mnt/222/video2
media_dir=A,/mnt/222/music
media_dir=P,/mntRAID/1tbRAID/foto
# media_dir=/mnt/222
# set this if you want to customize the name that shows up on your clients
#friendly_name=My DLNA Server
# set this if you would like to specify the directory where you want MiniDLNA to store its
database and album art cache
db_dir=/var/lib/minidlna
# this should be a list of file names to check for when searching for album art
# note: names should be delimited with a forward slash («/»)
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/
AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg
# set this to no to disable inotify monitoring to automatically discover new files
# note: the default is yes
inotify=yes
# set this to yes to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO
enable_tivo=no
# set this to strictly adhere to DLNA standards.
# * This will allow server-side downscaling of very large JPEG images,
# which may hurt JPEG serving performance on (at least) Sony DLNA products.
strict_dlna=no
# default presentation url is http address on port 80
#presentation_url=https://www.mylan/index.php
# notify interval in seconds. default is 895 seconds.
notify_interval=60
# serial and model number the daemon will report to clients
# in its XML description
serial=12345678
model_number=1
Домашний DLNA сервис на Ubuntu Trusty
Моя задача сводится к простому, я хочу иметь сервис в своей локальной сети (домашний DLNA сервис) посредством которого я смогу с любого устройства (смартфон, планшет, ноутбук, телевизор) просматривать/прослушивать мультимедийный контент (mp3-песни, фильмы, сериалы, фотографии). Чтобы не каждый раз скачивать их с моего хранилища HP MicroServer Gen8, а смотреть прямо с него. И вот выходом из этой ситуации является развертывание DLNA сервиса (по протоколу UPnP/DLNA) в локальной сети. Ранее я разбирал, как поднять такой сервис как PLEX, но вот на нем завести сервис DLNA мне пока не удалось, да и монстрообразный он, лучше бы что-нибудь более простое и не требовательное к ресурсам. Выход к решению поставленной задачи был найден — это утилита именуемая, как minidlna из стандартных репозитариев Ubuntu Trusty Server.
Ниже я проведу Вас по всем шагам, как я решил свою задачу, т. е. Как настроить DLNA в ЛВС:
$ sudo rm -Rf /var/lib/apt/lists
$ sudo apt-get update && sudo apt-get upgrade -y
$ uname -a && lsb_release -a
Linux srv-trusty 4.4.0-91-generic #114
14.04.1-Ubuntu SMP Wed Aug 9 08:47:26 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
$ apt-cache search minidlna
minidlna — lightweight DLNA/UPnP-AV server targeted at embedded systems
$ apt-cache show minidlna | grep Version
Устанавливаю утилиту minidlna в систему:
$ sudo apt-get install minidlna -y
$ sudo cp /etc/minidlna.conf /etc/minidlna.conf.backup
Создаю каталоги мультимедийного контента:
$ sudo mkdir -p /media/minidlna/Movies
$ sudo mkdir -p /media/minidlna/Audio
$ sudo mkdir -p /media/minidlna/Images
$ sudo chown -R minidlna:minidlna /media/minidlna/
$ sudo nano /etc/minidlna.conf
# в последствии изменил на
model_name=Windows Media Connect compatible (MiniDLNA)
$ sudo /etc/init.d/minidlna restart
* Restarting DLNA/UPnP-AV media server minidlna [ OK ]
$ sudo /etc/init.d/minidlna status
* minidlna is running
$ sudo netstat -tulpn | grep minidlna
tcp 0 0 0.0.0.0:8200 0.0.0.0:* LISTEN 4148/minidlnad
udp 0 0 0.0.0.0:1900 0.0.0.0:* 4148/minidlnad
udp 0 0 10.7.9.130:41149 0.0.0.0:* 4148/minidlnad
На заметку: следует проверить как у Вас называется сетевой интерфейс, просто у меня на Gen8 с установленной Ubuntu Trusty Server интерфейс именуется, как em1 & em0 , а я этого не учел по забывчивости и долго гадал почему через клиент VLC с Ubuntu Trusty Desktop я не вижу сервис minidlna. Посмотрев логи это меня и натолкнуло проверить что при выводе команды ifconfig:
[2017/09/28 14:21:08] getifaddr.c:108: error: Network interface eth0 not found
После нужно посмотреть логи:
$ cat /var/log/minidlna.log | grep WARNING
[2017/09/27 14:48:40] inotify.c:198: warn: WARNING: Inotify max_user_watches [8192] is low or close to the number of used watches [4] and I do not have permission to increase this limit. Please do so manually by writing a higher value into /proc/sys/fs/inotify/max_user_watches.
$ sudo nano /etc/sysctl.conf
#MiniDLNA log fix
$ sudo /etc/init.d/minidlna force-reload
после посмотрев логи ошибок на этот счет не обнаружил.
Если перейти через браузер по URL адресу: http://IP&DNS:8200, то можно увидеть кто обнаружил данные DLNA сервис, какие устройства и количество загруженного мультимедийного контента:
$ scp Downloads/Bones_S2_\[tfile.ru\]/* ekzorchik@10.7.9.130:/home/ekzorchik/
$ sudo mkdir -p /media/minidlna/Movies/Bones/Sezon2
$ sudo mv *.avi /media/minidlna/Movies/Bones/Sezon2/
$ sudo chown -R minidlna:minidlna /media/minidlna/
На заметку: Но чтобы в каталог /media/minidlna/ у меня был доступ можно текущую учетную запись добавить в группу minidlna после чего подняв еще на текущей системе пакет SAMBA настроить что с любой системы я смогу наполнять данный каталог мультимедийным контентом.
$ sudo usermod -aG ekzorchik minidlna
На заметку: В своей работе сервис minidlna использует файловую базу данных sqlite, находится она:
$ ls /var/cache/minidlna/files.db -lh
-rw-r—r— 1 minidlna minidlna 76K Sep 27 16:06 /var/cache/minidlna/files.db
в нее входят все настройки, информация по мультимедийному контенту.
Проверяю, а увидит ли Windows 7 через штатный проигрыватель файл на DLNA сервисе, увидела но только без папок а общем списком
На рабочей станции под управлением Ubuntu Trusty Desktop amd64 (Gnome Classic) установив проигрыватель VLC он отобразил все как нужно:
Пуск — Все программы — VideoLAN — Вид — Плейлист и с левой стороны переходим: (Локальная сеть) Протокол UpnP вижу srv-trusty: minidlna
Раскрываю: Movies — Bonis — Sezon2
щелкнув по видео оно начинает воспроизводиться, чтобы вернуть обратно нужно щелкнуть «Вид» — «Плейлист», но в то же время видео если оно не остановлено будет проигрываться:
Поставил на свою систему Ubuntu Trusty Desktop amd64 (Gnome Classic) проигрыватель VLC и он также увидел мой DLNA сервис. Щелкнув по видео файлу поехало из воспроизведение, в точности как и на Windows системе. Вот что значит правильный проигрыватель где разработчики делают не отвали, а с полной отдачей нормальный продукт.
На заметку: При использовании сервиса DLNA столкнулся со следующими наблюдениями, если конечное устройство подключено через ethernet кабель к роутеру то видео/аудио идет сразу же и без рывков, а если я с планшета (по Wi-Fi) подключаюсь и запускаю видео оно воспроизводится, но стоит промотать и видео начинает рваться/пикселизироваться, а с аудио такого замечания у меня нет. Вообще нужно еще понаблюдать.
На этом у меня все, с уважением автор блога Олло Александр aka ekzorchik.
Ещё один блог сисадмина
воскресенье, 30 марта 2014 г.
Настройка MiniDLNA для цифрового мультимедийного плеера WD TV Play
Не столь давно я решил отказаться от видеокарты с разъёмом S-Video, к которому у меня дома был подключен телевизор. Новых видеокарт с таким разъёмом сейчас не найти, везде только VGA, DVI и HDMI. Конвертеры из HDMI и DVI в композитный, компонентный сигнал или в S-Video стоят неоправданно больших денег, причём найти их в продаже — задача непростая. Покупать вместе с новой видеокартой ещё и новый телевизор с разъёмом HDMI мне не хотелось.
Разного рода TV-тюнеры и платы видеозахвата позволяют лишь оцифровывать аналоговое видео, копируя его на компьютер. Плата видеомонтажа теоретически могла бы мне помочь, но это редкое и узкоспециализированное решение. Сомневаюсь, чтобы при помощи такой платы можно было бы просто смотреть видео.
Единственным оставшимся решением, которое позволило бы смотреть фильмы с компьютера на старом телевизоре, были цифровые мультимедийные проигрыватели. Это небольшие устройства с жёстким диском или без него, умеющее воспроизводить видео, музыку с SATA-дисков, флеш-накопителей, карт памяти или из сети Ethernet или WiFi.
После сравнения доступных предложений мой выбор пал на устройство WD TV Play. Это устройство не имеет жёсткого диска или места под его установку, более того — у него даже нет интерфейса SATA, но зато у него есть всё нужное мне: композитный видеовыход, выход для аналогового стерео и сеть Ethernet. Кроме того, имеется поддержка WiFi и разъёмы, которые могут пригодиться в дальнейшем: USB, HDMI, оптический SPDIF.
Подробную инструкцию по настройке самого устройства можно найти на его странице. Для лентяев приведу прямую ссылку на руководство: Руководство пользователя.
1. Как это работает
Итак, в целом автоконфигурирование сети на домашних устройствах работает примерно следующим образом.
Если устройству не назначен сетевой адрес вручную, то оно сначала пытается получить настройки у DHCP-сервера. Если DHCP-сервер не отвечает, устройство выбирает случайный адрес из диапазона 169.254.1.0-169.254.255.255 и проверяет, что он свободен, выполняя ARP-запрос. Если адрес занят, устройство выбирает другой случайный IP-адрес и повторяет процедуру до тех пор, пока не обнаружит свободный IP-адрес. С выбранным адресом используется маска подсети 255.255.0.0.
После того, как сеть настроена, устройство отправляет мультикаст-запрос на адрес 239.255.255.250, на UDP-порт 1900, пытаясь обнаружить по протоколу SSDP устройства в локальной сети. Каждое устройство, предоставляющее сервис, должно ответить на запрос, сообщив в ответе HTTP-ссылку на страницу управления устройством.
Протокол SSDP позволяет обнаруживать маршрутизаторы, поддерживающие протокол IGD и мультимедийные устройства, поддерживающие протокол DLNA. Таким образом устройство может получить доступ к сети интернет, включая возможность принимать соединения из внешней сети, а также воспроизводить мультимедийные файлы, имеющиеся на устройствах домашней сети.
2. Как будем настраивать
Я не буду использовать автоконфигурирование и ручную настройку сети, а воспользуюсь более привычным для системного администратора способом раздачи настроек — при помощи DHCP-сервера ISC DHCP Server. Если у вас дома есть маршрутизатор, раздающий настройки по DHCP, или использующий самоназначенные адреса, то логично воспользоваться вместо DHCP-сервера DHCP-клиентом с поддержкой самоназначения адресов (APIPA), например из пакета dhcpcd5.
Поскольку мой мультимедийный проигрыватель работает с сетью интернет лишь как клиент, не пытаясь открыть на прослушивание порты на внешнем адресе, то мне будет достаточно настроить фаерволл вручную. Вы же можете воспользоваться протоколом IGD и настроить сервер из пакета linux-igd. Или, если вы пользуетесь домашним маршрутизатором, можно воспользоваться поддержкой IGD, имеющейся на маршрутизаторе.
Наконец, я буду использовать лишь один DLNA-сервер, поэтому он самостоятельно будет отвечать на запросы по протоколу SSDP. Если планируется настроить несколько DLNA-серверов или интегрировать их с IGD-сервером, то скорее всего вам потребуется отдельный сервер протокола SSDP, например из пакета minissdp. Теоретически, остальные приложения можно настроить так, что они будут работать через minissdp как через посредника. На практике я этого не проверял.
3. Настройка сетевого интерфейса
Моя домашняя компьютерная сеть подключена к отдельной сетевой карте компьютера. Я использую сеть 169.254.254.0/24, которая входит в диапазон IP-адресов link-local 169.254.1.0-169.254.254.255, который описан в RFC 3927. Этот диапазон используется для автоматической настройки сети на устройствах, которые не смогли найти DHCP-сервер. Устройство выбирает случайный адрес из этого диапазона и делает ARP-запрос к нему. Если на ARP-запрос никто не отвечает, устройство присваивает этот адрес себе. Если адрес занят, то процедура поиска свободного адреса повторяется.
Этот диапазон я выбрал по одной простой причине — он не используется моим провайдером, так что моя локальная домашняя сеть не пересекается с локальной сетью провайдера и устройства в моей сети могут обращаться через NAT к локальной сети провайдера.
Настройки интерфейс eth1 описываются в файле /etc/network/interfaces и имеют следующий вид:
Всё просто. Чтобы настройки вступили в силу, можно воспользоваться следующими командами:
4. Настройка DHCP-сервера
Устройство я включил в домашнюю локальную сеть, которая подключена к отдельной сетевой карте компьютера. Если у вас есть домашний маршрутизатор, можете воткнуть устройство в него — в таком случае можно воспользоваться DHCP-сервером, встроенным в сам маршрутизатор. Можно также настроить статические IP-адреса или попытать счастья с автоматической настройкой сетевого интерфейса без участия DHCP-сервера, например, при помощи демона avahi-autoipd.
Чтобы устройство могло получить настройки сети от компьютера автоматически, я настроила на своём компьютере DHCP-сервер. Мой выбор автоматически остановился на привычном мне ISC DHCP Server, что кому-то может показаться забиванием гвоздей микроскопом. Вы можете настроить другой DHCP-сервер.
Итак, установим пакет с DHCP-сервером:
Создадим файл конфигурации /etc/dhcp/dhcpd.conf со следующим содержимым:
В файл /etc/default/isc-dhcp-server впишем имя интерфейса, на котором DHCP-сервер должен принимать запросы:
Осталось перезапустить DHCP-сервер, чтобы его новые настройки вступили в силу:
На самом деле устройство способно работать только с первым DNS-сервером, а NTP-серверы он попросту игнорирует, предпочитая всегда пользоваться серверами pool.ntp.org.
Мой плеер имеет MAC-адрес 00:90:a9:62:b2:99 — его я узнал при помощи tcpdump. Этому MAC-адресу всегда будет выдаваться один и тот же IP-адрес 169.254.254.2.
5. Настройка фаерволла
До сих пор у меня ещё не было повода расписывать, как я обычно настраиваю фаерволл, поскольку обычно мне приходится настраивать прохождение пакетов для классических интернет-протоколов, вроде HTTP, FTP, SMTP, POP3, IMAPv4, DNS, NTP. Там всё довольно просто — достаточно открыть TCP или UDP-порт в нужном направлении, а в случае FTP ещё загрузить несколько модулей ядра и прописать их в автозагрузку.
В этом случае речь идёт о протоколе под названием SSDP, который не назовёшь классическим. Поэтому я решил описать настроенные правила в этой заметке. Однако, для начала я опишу минимальную настройку фаерволла для рабочей станции, на которой не запущен ни один сетевой сервис. Обычно я ограничиваюсь всего тремя правилами и политикой по умолчанию для входящих пакетов DROP:
При такой конфигурации наш компьютер может инициировать обмен с кем угодно, получать от него ответы, но сам будет отвечать только на ICMP-запросы.
Для того, чтобы эти настройки восстанавливались при каждой загрузке, я сохраняю их при помощи команды iptables-save:
И прописываю загрузку правил при настройке интерфейса lo в файле /etc/network/interfaces:
Теперь перейдём к настройке доступа со стороны мультимедиа-центра к серверу MiniDLNA на нашем сервере:
UDP-порт 1900 — это порт протокола SSDP, позволяющего устройствам сети обнаруживать друг друга и обмениваться информацией. Для обнаружения используется мультикаст-адрес 239.255.255.250.
На TCP-порту 8200 работает встроенный в MiniDLNA веб-сервер. На нём есть всего одна страница, на которой можно увидеть количество доступных на сервере видео-, аудио- и графических файлов. В случае более сложных DLNA серверов там может быть, например, веб-интерфейс для управления устройством и т.п. Устройства узнают о веб-серверах друг друга по протоколу SSDP.
Кроме того, устройство обращается в сеть интернет для получения данных о времени, о погоде в выбранном городе и при использовании онлайн-сервисов. Настроим правила фаерволла для транзитных пакетов:
Эти правила разрешают проход пакетов, относящихся к уже открытым установленным соединениям. Всем остальным пакетам по умолчанию ход запрещён — такие пакеты будут просто отбрасываться. Любые разрешения должны быть прописаны в фаерволл явным образом.
Чтобы плеер не ждал истечения таймаута при обращении к серверам производителя при попытке проверить наличие обновлений, я запрещу плееру обращаться к веб-серверам так, чтобы в ответ на попытки установить подключение к веб-серверу, плееру приходил ICMP-пакет, сообщающий о том, что соответствующий порт сервера закрыт:
Закрываю доступ по одной простой причине — этим плеером можно управлять через интернет, с веб-сайта производителя, что я считаю огромной дырой в системе безопасности.
Так как плеер не умеет использовать NTP-сервер, выданный DHCP-сервером, а всегда обращается к серверам pool.ntp.org, добавим в правила фаерволла принудительное перенаправление всех пакетов, идущих со стороны плеера на UDP-порт 123, на UDP-порт 123 моего NTP-сервера и разрешим пакетам ходить в этом направлении:
Поскольку моя домашняя сеть не будет маршрутизироваться в сети провайдера, я выполняю трансляцию исходного адреса на внешних, провайдерских интерфейсах:
Ответные пакеты будут транслироваться в обратном направлении автоматически. Осталось запомнить новые настройки фаерволла в файле /etc/network/iptables и включить маршрутизацию:
Чтобы маршрутизация автоматически включалась при перезагрузке, пропишем в файл /etc/sysctl.conf ту же самую настройку:
6. Настройка MiniDLNA
Остался финальный штрих — настройка самого сервера MiniDLNA. Для этого нужно прописать в файл /etc/minidlna.conf следующие настройки:
По умолчанию MiniDLNA сам открывает UDP-порт 1900 протокола SSDP. Но, если вы собрались запустить на компьютере несколько программ, которые используют протокол SSDP, можно настроить отдельный SSDP-сервер MiniSSDP. Сокет-файл этого сервера можно в дальнейшем указывать всем программам, которые пользуются протоколом SSDP. В случае MiniDLNA путь к сокет-файлу указывается в конфигурационном файле /etc/minidlna.conf, в настройке minissdpdsocket.
Осталось убедиться, что в файле /etc/default/minidlna разрешён запуск сервера:
И можно запустить его:
Для автоматической настройки локальных сетей было создано большое количество различных протоколов, многие из которых являются взаимными альтернативами и конкурентами. По замыслу создателей, устройства должны автоматически настраивать IP-адресацию, проброс внешних портов внутрь локальной сети, открывать доступ в интернет через фаерволл, узнавать друг о друге. Например, компьютер может обнаружить принтер, мультимедийное устройство — хранилище медиафайлов, телевизор с доступом в интернет может автоматически пробиться через домашний маршрутизатор, равно как и другие программы — компьютерные игры и торрент-клиенты и т.п.