Наверное, каждый, у кого имеется несколько устройств, способных воспроизводить мультимедиа-контент, задумывался о настройке стримингового сервиса в своей сети. В данной статье мы подробно рассмотрим, как можно это реализовать.
Введение
DLNA (Digital Living Network Alliance) — это стандарт, позволяющий в реальном времени транслировать любой мультимедиа-контент внутри локальной сети и отображать его на любых совместимых устройствах.
В настоящее время существует огромное количество реализаций DLNA серверов: как свободных, так и проприетарных. Мы же рассмотрим самый простой и быстрый на наш взгляд — minidlna.
Установка сервера
Для начала подключим репозитории RPM Fusion. Информацию о том, как это сделать, можно найти в данной статье.
Установим пакет minidlna:
sudo dnf install minidlna
Активируем и запустим его:
sudo systemctl enable --now minidlna.service
Настройка сервера
Все настройки расположены в файле /etc/minidlna.conf. Откроем его в любом текстовом редакторе с правами суперпользователя и внесём соответствующие правки:
sudoedit /etc/minidlna.conf
Воспользуемся примером уже настроенного и хорошо прокомментированного конфига:
# Порт для HTTP трафика (метаданные, служебная информация)
port=8200
# Список сетевых интерфейсов, которые должен слушать сервер.
# В закомментированном виде будет слушать все доступные.
#network_interface=eth0
# Пользователь, от имени которого будет запущен сервер.
user=minidlna
# Каталоги с мультимедиа-библиотекой. Если их более одного,
# необходимо добавить по одной на каждый.
# Допускается через запятую указать тип мультимедиа-контента,
# которое должно быть загружено из каждого каталога. Все прочие
# в нём будут игнорироваться.
# Допустимые типы контента:
# * "A" - аудио-файлы;
# * "V" - видео-файлы;
# * "P" - изображения.
# Разрешается их комбинировать, например "AV" - импортировать
# из данного каталога аудио и видео, игнорируя изображения.
media_dir=V,/media/storage/Video
media_dir=A,/media/storage/Music
media_dir=P,/media/storage/Wallpapers
# Включение или отключения режима общей мультимедиа библиотеки
# (содержимое всех каталогов из media_dir будет объединено в
# один общий виртуальный).
merge_media_dirs=yes
# Название DLNA-сервера, которое будет отображаться
# на устройствах клиентов.
friendly_name=EasyCoding Home DLNA
# Каталог для хранения кэшей мультимедиа и различных метаданных.
db_dir=/var/cache/minidlna
# Каталог для хранения журналов работы мультимедиа-сервера.
log_dir=/var/log/minidlna
# Уровень детализации журналов работы.
log_level=general,artwork,database,inotify,scanner,metadata,http,ssdp,tivo=warn
# Имена файлов с обложками аудио-файлов. Minidlna будет искать их
# в каталогах с аудио и отображать на клиентах. Имена файлов
# регистрозависимы, а в качестве разделителя используется прямой слэш ("/").
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
# Включение или отключение мониторинга каталогов медиа-библиотеки. Новые
# файлы будут добавляться в базу в реальном времени.
inotify=yes
# Включение или отключение режима стриминга .jpg и .mp3 файлов на TiVo
# с поддержкой HMO.
enable_tivo=no
# Включение или отключение режима жёсткого следования стандартам.
# Это может повлечь за собой пережатие контента в иной формат.
strict_dlna=no
# Страница сервера с MOTD в интрасети или Интернете (не обязательно).
#presentation_url=http://www.mylan/index.php
# Интервал опроса каталогов медиа-библиотеки если мониторинг включён.
notify_interval=900
# Серийный номер и идентификатор модели виртуального устройства сервера,
# который будет передаваться клиентам во время рукопожатия.
serial=15AC0D6F2
model_number=1
# Путь к локальному сокету minidlna.
minissdpdsocket=/var/run/minissdpd.sock
# Переопределение корневого каталога в структуре медиа-библиотеки.
# Допустимые значения:
# + "." - стандартный контейнер;
# + "B" - "просмотр каталога";
# + "M" - "музыка";
# + "V" - "видео";
# + "P" - "изображения".
root_container=.
# Включение или отключение режима принудительности сортировки файлов в
# библиотеки вне зависимости от предпочтений клиентов.
force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title
# Максимальное количество одновременно подключённых клиентов.
max_connections=50
По окончании настройки обязательно перезапустим сервис:
sudo systemctl restart minidlna.service
Настройка межсетевого экрана
Для своей работы DLNA-сервер использует стандартные порты 8200/tcp (передача метаданных и работа с клиентами; основан на HTTP) и 1900/udp (непосредственно стриминг мультимедийного контенета). Откроем их средствами Firewalld:
sudo firewall-cmd --add-service=minidlna --permanent
Применим новые правила Firewalld:
sudo firewall-cmd --reload
Теперь minidlna сервер должен быть доступен для всех подключённых устройств внутри локальной сети.
Настройка медиа-библиотеки
В дистрибутиве Fedora по умолчанию применяется мандатная система контроля доступа SELinux, которая настроена на ограничение по принципу «запрещено всё, что не разрешено», поэтому minidlna не получит доступ к медиа-библиотеке если она распложена в одном из домашних каталогов пользователей.
В качестве оптимального решения рекомендуется размещать её на отдельном разделе, смонтированном например как /media/storage.