- Домашний медиа сервер minidlna
- На кой черт это надо?
- Установка Linux
- Установка transmission-daemon
- Установка NGINX и настройка проксирования
- Настройка проксирования transmission-daemon через nginx
- Написание скрипта
- Установка медиа сервера
- Напоследок
- DLNA-сервер для дома и семьи
- DLNA — его место в домашней сети
- На что ставить
- Личный опыт, оценка программ
Домашний медиа сервер minidlna
На кой черт это надо?
Так сложились обстоятельства, что мне удалось скоммуниздить старенький ПК, да и чтобы он просто не пылился, так как такое старье продавать за 5-7 тысяч (цена в моем регионе за подобную конфигурацию) мне стыдно, а получать за него 3 тысячи — ну такое. Я решил, сделаю дома небольшую библиотеку фильмов, музыки, да и у жены очень много фотографий, которые её очень дороги. Задумка была следующей.
Некий медиа сервер, который будет транслировать медиаконтент на телевизор.
Некое локальное хранилище для файлов, порой приходится с флешками побегать, а то жесткого диска на 500ГБ не хватает.
Торрент клиент, который будет качать все что я пожелаю.
Цели поставлены, осталось их реализовать. Вряд ли опытные пользователи найдут здесь что-то полезное для себя, наверное, только начинающие пользователи Linux, так как все действия очень простые в исполнении.
Установка Linux
То, как поставить линукс, я думаю, не стоит говорить. Я просто опишу что я сделал после установки. Во-первых, пока компьютер был возле меня, я настроил статический адрес в файле /etc/netplan/00-installer-config.yaml
Думаю, тут вроде понятно, что где что и как. Конечно, правильнее было бы привязать ip-адрес через роутер, но у меня роутер Xiaomi, и там все в иероглифах. Я просто сделал статический ip-адрес на компьютере. После этого я его отнес в подвал и подключил к роутеру и сел за рабочую машину. Теперь стоит создать пару ssh-ключей для удобства
Ну и отправил ключ на медиа сервер
Теперь настрою файл
И теперь для подключения достаточно написать ssh home ,и последний момент, которой наверное не стоит делать, это убрать ввод пароля при использовании sudo. Для этого достаточно добавить NOPASSWD в файл /etc/sudoerc что бы вышло так
Установка transmission-daemon
И так, начну с торрент-клиента transmiss-daemon.
Так обновятся все пакеты и установится transmiss-daemon. Вообще не рекомендуется ставить без ведома все подряд, но так как у меня система только что установленная, установятся только обновления системных пакетов, и вряд тли что-то сломается. После установки transmission-daemon нужно его выключить для того что произвести настройку.
Если править файл конфигурации /etc/transmission-daemon/settings.json в тот момент как демон работает, изменения не сохранятся. И так мне надо поправить несколько строк, но для начала создам папки куда будет все качаться. Я создам все папки для медиа контента в /media и будет /media/torrent/downloads для загружаемых файлов и /media/torrent/complete для файлов которые уже загрузились
сразу сменю владельца на папки для загрузки на debian-transmission
Теперь можно приступать к настройке transmission. Как уже говорилось, все настройки хранятся в файле /etc/transmission-daemon/settings.json . Нам необходимо поправить несколько строк, а именно
«download-dir»: «/var/lib/transmission-daemon/downloads» — указываем папку куда будут помещаться загруженные файлы, у меня в /media/torrent/complete Лучше указывать полный путь
«incomplete-dir»: «/var/lib/transmission-daemon/Downloads» — указываем папку в которой будут храниться не докачавшиеся файлы, у меня /media/torrent/downloads
«incomplete-dir-enabled»: false — указываем true что бы хранить скачавшиеся файлы отдельно
«rpc-authentication-required»: true — меняем на false для отключения авторизации по логину и паролю, это пожеланию
«rpc-host-whitelist-enabled»: true — меняем на false для отключения использования «белого списка ip-адресов»
«rpc-username»: «transmission» — указываем логин для авторизации
«rpc-whitelist-enabled»: true — опять-таки отключаем авторизацию по разрешенным ip-адресам меняя true на false соответственно
И запуск transmission
и захожу в web-панель transmission по ip-адресу и порту 9091, у меня это 192.168.31.5:9091
web-интерфейс transmission
transmission почти готов теперь настрою проксирование через NGINX
Установка NGINX и настройка проксирования
Я поставил весь nginx, но в теории достаточно и самого пакета nginx
После установки проверю, работает ли веб сервер зайдя на ip-адрес машины
Приветственное сообщение от Nginx
Теперь выполню настройку nginx. Все конфигурационные файлы находятся в /etc/nginx/* . Для начала я удалю все лишнее из файла /etc/nginx/nginx.conf и приведу его к такому виду
И создам файл /etc/nginx/sites-enabled/home.conf с базовым содержимым
Немного объясню файл. listen 80 указываем на каком порту будет слушаться сайт, root /var/wwww/home я создал папку от имени root и поместил туда простую страницу html взятую из интернета для проверки как будет все работать.
html страница скачанная из интернета
Так же я добавил строку 192.168.31.5 home.ru в рабочей машине в файл /etc/hosts для того что бы сайт мог открываться в браузере с рабочей машины по адресу home.ru что и указал в файле home.conf server_name home.ru
Настройка проксирования transmission-daemon через nginx
NGINX вообще мощная фигня, и для того что бы открывать web-панель transmisson через http://home.ru/transmission/ его будет более чем достаточно. Все правки я буду делать в файле /etc/nginx/sites-enabled/home.conf для начала добавлю новый location и в нём укажу что бы он проксировал запрос с home.ru/transmission/ на 127.0.0.1:9091
блок location для transmission
Перенаправление пошло, но вот только transmission жалуется на отсутствие хедера X-Transmission-Id . Немного поковырявши хедеры, так же добавив 2 блока location мне удалось завести transmission. Вот полный файл конфигурации
полный файл home.conf
Написание скрипта
Так сложилось, что у меня телевизор Samsung толком не воспроизводит видео в формате avi, а если и воспроизводит то как то криво. Нельзя перемотать, длительность фильма такая — что люди стока не живут, да и самое неприятное заключается в том что посреди фильма он может просто оборваться. А вот формат mkv он ест нормально. И поэтому я решил написать небольшой скрипт на bash который будет запускать сам transmission-daemon после загрузки файла. Немного подумав над логикой и посмотрев как качаются разные файлы, выстроил себе цепочку действий. Во-первых надо понять, скачалась папка или файл. Если папка, то создать такую же папку в директории для DNLA сервера, если файл, то пропускаем. Возвращаемся к папке, теперь смотрим на содержимое папки, если файлы avi то конвертируем их через ffmpeg в конечную папку, если в папке файлы mkv то просто перемещаю их, но если там то-то другое, просто кидаю в /tmp для дальнейшего анализа. Теперь возвращаемся к началу скрипта, если же это не папка, а файл то, смотрим на формат и при необходимости конвертируем. Вроде ничего сложного, вот сам скрипт
Скрипт далек от идеала, может потом его доработаю под собственные нужды, например что бы скачанные файлы .iso перемещались сразу в папку для шаринга. Так же он отправляет в телеграм уведомление о загруженном файле, и если есть ошибки, он тоже об этом сообщит. Скрипт писал на быструю руку, и он не проходит по вложенным папкам, если будет в этом необходимость то его поправлю. На данный момент он выполняет то что мне и надо. После того как скрипт написан, и я определился с конечными папками, перемещаю скрипт к transmission
даю скрипту права на исполнения
и меняю владельца
После останавливаю transmission-daemon
и меняю 2 параметра в /etc/transmission-daemon/setings.json
done-enabled перевожу на true, то-есть включаю активацию скрипта по окончанию загрузки, а done-file указываю полный путь к файлу, можно указать только название файла если файл лежит в папке transmission, но мне легче указать полный путь.
Установка медиа сервера
В качестве медиа сервера DNLA я выбрал minidlna. Ставится из репозитория ubuntu, прост в настройке.
Файл конфигурации находится /etc/minidlna.conf , я в нем внес несколько правок, а именно, указал где находятся медиаконтент
Указал где хранить базу данных файлов minidlna
Указал куда писать логи
и указал имя сервера
и в конце перезапустил сервер
И получил результат
Напоследок
Писать о том как я настроил временно samba не буду. Есть очень много мануалов в котором все описано куда лучше, чем смогу описать я, но хочу поделится несколькими мыслями на будущие) Целый комп для этого излишнее, тем более у меня есть роутер с прошивкой OpenWRT на котором можно все это реализовать, но жена мне раз дала идею сделать мониторинг цен. Я такое уже делал, написал небольшой скрипт на bash который парсил страницу, брал оттуда название товара, картинку и цену. Скрипт запускался через cron. Идея неплохая, но для каждого сайта необходимо делать свой шаблон. И скорее всего сайты по типу Wildberries при авторизации будут показывать другую цену. Идею думаю реализовать на C++, которые будут брать ссылку для просмотра из БД и смотреть на цену. Если цена записанная в БД будет больше, то отправлять сообщение в том же телеграме о том что на такой-то товар ценна изменилась. Да и для разных экспериментов и обучения можно поднимать сервере виртуальную машину и её ковырять. Так же есть идея реализовать некую запись телепередач. У нас нет обычного телевидения, есть всего 1 канал XD, и жена смотрит несколько передач. Думаю просто настроить запись их в тот же медиа сервер. Но все это планы, желание на исполнения не много.
Я впервые пишу такой длинный текст, и вообще в первые куда-то пишу по мимо личных сообщений. Не судите строго.
Источник
DLNA-сервер для дома и семьи
Как-то так сложилось, что тег DLNA сервер чаще встречается в постах-вопросах, чем в ответах. И если в вопросах установки на домашний Windows-ПК какой-то пользовательский опыт накоплен, то определиться с выбором ПО для домашнего сервера/NAS-а/медиацентра — оказалось непросто. Распределившись по песочницам народ обособленно решает проблемы каждой программы в отдельности. А понять что из них чего стоит и нужно ли оно вообще — лично мне не удалось.
И вот, я вооружившись ссылкой с Википедии Как выбрать DLNA-сервер под Windows, Mac OS X или Linux — опробовал почти всё, что есть под Linux.
DLNA — его место в домашней сети
Наверное этот путь уже проходило большинство — в доме появляются новые медиа-устройства, растет количество членов семьи потребляющих медиа-контент, распухает сама база фильмов, музыки и фотографий.
При этом каждый строит медиа-инфрастуктуру по-своему. У кого-то это компьютер с TV-OUT, у кого-то нетбук или HTPC. Кто-то расшаривает папки с NAS-а по NFS, кто-то подключает HDD к медиаплееру, кто-то использует возможности Sony PS…
Появляется неразбериха в местах хранения, форматах, кодеках и т.п.
Так, в моем случае оказалось:
- плазме в гостинной лучше подавать 720p чем FullHD
- телевизору Sony в детской подключеному по Wi-Fi больше 15Mbit/s лучше не скармливать, H.264 ему нужен максимум Profile 4.1, а файлы на сетевых хранилищах он не видит вообще
- спутниковый ресивер Openbox не умеет играть звуковые дорожки в DTS, по SMB не тянет больше 30Mbit/s, по NFS-не отображают кириллицу
- Nokia Lumia и iPhone вообще ограниченны везде и всюду
В общем, единственным вариантом сдружить весь этот зверинец между собой — это использование DLNA сервера.
Теоретически — он и контент из разных мест в одиное дерево папок сведет, и разрешение подгонит и совместимость кодеков проверит и при необходимости перекодирует. Красота…
На что ставить
Домашний компьютер — как правило это Windows-машина. Смотреть фильм с перекодированием пока кто-то играет — не получиться; режима 24/7 нет и близко. На роль не подходит. Поэтому Windows версии программ я даже не рассматривал.
Роутер, прошитый DD-WRT/OpenWRT — есть пакеты для этих прошивок и они работают. Аппаратные ресурсы очень ограничены — транскодирование малореально, скорость доступа к USB порту и сетевым папкам сильно ограничена. Тем не менее — многим и такое подходит.
NAS или домашний сервер с Linux — самое универсальное решение. Программ много. Ограничений по протоколам нет. Производительности x86 процессоров 5-летней давности (в моем случае это Athlon X2-6000) хватает для одновременного перекодирования на-лету двух фильмов любого формата.
Личный опыт, оценка программ
MiniDLNA, uShare и xupnpd
Это разные проекты, но в сущности — одно и то-же. Легковесные и быстрые. Единственная функция, которую они выполняют — предоставляют сетевой доступ к медифайлам по протоколу DLNA/UPnP. Всё остальное плеер или телевизор должны уметь сами. DLNA поддерживается не в полной мере и многие устройства эти серверы просто не видят.
Очень массовые. Работают везде. Пакеты существуют под всевозможные дистрибутивов Linux, маршрутизаторы с прошивками DD-WRT/OpenWRT и NAS-ы. Процедура установки простейшая и хорошо расписана на профильных форумах. Никаких GUI нет
Если Вы, и только Вы (иначе неизбежны жалобы членов семьи):
- смотрите/слушаете только с одного всеядного устройства (такого как телевизор Samsung)
- Ваше устройство не умеет напрямую брать файлы с сетевых папок или делает это слишком медленно (такое как телевизор Sony Bravia)
- храните фильмы/музыку на недорогом NAS-е или маршрутизаторе с USB-диском
- заранее отбираете контент в нужном формате или не ленитесь перекодировать вручную
- медиа-файлы уже хорошо отсортированы по папкам или Вас это вообще не беспокоит
— то Вам можно ограничиться и таким DLNA-сервером. Выбирать из них тот, который есть в пакетах под вашу железяку и будет увиден рендером.
MediaTomb
Разработчики однозначно пишут, что «это не DLNA-сервер, он лишь поддерживает часть его функций». И хотя некоторые проблемы совместимости могут быть, это вполне себе достойный внимания проект.
Здесь уже есть работающий через встроенный http-сервер GUI — в нем можно управлять папками с контентом. Добавлять новые, создавать ярлыки к существующим, задавать интервалы сканирования и т.п.
Хорошо распространен — нет проблемы установить в любом дистрибутиве Linux, тяжелых зависимостей за собой не тянет. Настраивается единственным текстовым файлом. Очень стабилен в работе, не ресурсоемк.
Можно использовать транскодирование, но оно реализовано в простешем виде. Так, привязка профилей осуществляется к формату входного файла, а не к устройству вывода. Сервер вообще не различает кто к нему подключился. Соответственно готовых профилей под устройства нет — все нужно настраивать вручную:
- какие форматы транскодировать, а какие передавать напрямую
- задать кодировщик по ситуации: ffmpeg, vlc, mplayer или что-то ещё
- задать bitrate, количество аудио-каналов, профиль H.264 и прочие опции кодирования
- наложить видеофильтр, такой как обрезание полей или crop
В моем случае пришлось писать отдельный скрипт для задания аргументов ffmpeg исходя из формата аудиодорожки (DTS или AC3).
При этом, при просмотре транскодированного потока на телевизоре не будет работать перемотка и выбор адуиодорожки. Прикрутить субтитры — тоже отдельная песня.
В общем — MediaTomb — весьма брутальные инструмент для true линуксоидов. Универсальным его не назовешь, но под себя и свое железо можно настроить идеально.
Rygel
Массовый, есть почти везде. Но очень криво ставится в режим демона (нужно самому писать init-скрипт, создавать папки и пользователя). Является частью проекта gnome и тянет за собой gstreamer (а то и pulseaudio). Если у кого на компьютере стоит KDE или что-то другое — совсем неудобен. Иконки для видео генерирует через tumbler из проекта XFCE, да и то с нюансами. Регулярно падает.
До изучения особенностей транскодирования у меня руки не дошли. Мой вердикт — «не годен«.
PS3 Media Server
Очень старый проект. И хотя от своего начального применения: «Раздавать фильмы/музыку с домашнего Windows ПК на Sony PS», — проект сильно развился. Но JAVA-код и требования для запуска X-сервера меня от него отвернули.
DLNA-сервер в нём есть. Но держать этот комбайн ради одного лишь модуля глупо.
Тем более, что именно из XBMC родился отдельный проект медиа-сервера Plex.
Universal Media Server
Кривой он какой-то. Показывал мне все дерево каталогов вместо выбранной папки. Файлы открывал лишь некоторые и регулярно сыпал ошибками в консоль. С transconding-ом я вообще не разобрался.
Весьма тяжелый из-за JAVA-кода. Обязательно нужен запущенный X-сервер — демоном его не поставишь. «Не годен.«
GMediaServer
Проект заброшен. Внимания не достоин.
LXiMedia
Простая и удобная реализация DLNA-сервера. Достаточно выбрать папки с файлами, жестко задать параметры транскодирования, аудиодорожку, субтитры. Никаких пофилей, настроек. К тому-же это GUI-приложение, демоном не ставиться.
На мой взгляд он в таком виде бесполезен — один из многих и далеко не лучший.
Serviio
Пожалуй самый быстроразвивающийся проект сейчас. Регулярно обновляется. Активно обрастает плагинами, профилями и приложениями под мобильные OS.
Представляет из себя JAVA-приложение работающее демоном. Поддержка DLNA-протокола — полная. Довольно умело разбрасывает контент по папкам и категориям. Умеет создавать превьюшки к фильмам. Легко подключаются разные каналы on-line вещания.
Транскодирует при помощи ffmpeg. База профилей устройств уже достаточно большая (и продолжает пополнятся) — сервер корректно подбирает параметры кодирования для любого из домашних железок. Что не распознал — подобрать профиль или написать свой не сложно.
Из-за того, что используется ffmpeg — та-же проблема, что и в mediatomb — нет перемотки в транскодированном потоке и не меняется аудиодорожка.
Управляется это все либо из JAVA-клиента, либо web-морды, написанной на PHP, либо смартфона (есть приложения под Android и WP).
К сожалению недоступен в виде .deb или .rpm пакета. Нужно ставить вручную: создать папки, пользователя, распаковать, взять на форуме поддержки init-скрипт, прописать в автозапуск». Под Synology NAS есть готовый пакет.
В целом — вполне может стать единой точкой доступа к медиа-контенту дома. Все, что нужно — он умеет.
Skifta
Не включен в Linux-репозитории, а потому редок. Но он имеет графический инсталлятор и несет с собой jre, а потому станет почти в любой системе. Неудобен тем, что запускается в два шага — вначале утилитка в SystemTray, потом — сам media-server. Без иксов и демоном не пойдет. Очень прост и лаконичен, но сильно грузит систему (JAVA-код).
TVMOBiLi
Стоит 30$ (или абонентская плата 1,5$/мес). Доступен в виде .deb и .rpm пакетов. Не в Ubuntu/Fedora установить довольно сложно — встроенные vlc и ffmpeg наверняка найдут недостающие библиотеки и откажутся работать. У меня не получилось подобрать в Gentoo USE-флаги для vlc. Не работал совсем, пришлось переделывать профили, что-бы использовался только ffmpeg.
В целом профили транскодирования — его сильная сторона. Можно задать любую логику и любые параметры.
Управляется через симпатичную WEB-морду. Имеет богатую базу профилей транскодирования. Есть проигрывать файлов через встроенный http-сервер. Превьюшки генерировать не умеет.
Работает быстро и красиво. Хороший кандидат.
TwonkyServer
Устанавливается распаковкой tar.gz. или через инсталлятор. В Linux репозиториях его нет. Очень быстрый код, мгновенный запуск, удобный web-интерфейс. Хорошо и грамотно раскидывает контент по папкам. Есть готовые init-скрипты. Умеет извлекать из файлов meta-данные и генерировать превьюшки. Все понравилось. Одна беда — $19.95.
И все же: «Рекомендую«.
Как пишут разработчики — «A complete Media Solution». Подтверждаю.
Этот монстр вырос из XBMC и умеет все и даже больше. К фильмам найдет постеры, рейтинги и кучу данных. Сериалы к тому-же ещё и распределит по сезонам и эпизодам. Музыкальную коллекцию упорядочит из любого исходного вида.
Транскодирование делает из всего под всё. Параметрами можно управлять прямо из экранного меню телевизора. Для умных устройств вроде телевизоров LG Smart TV и Apple TV поддержка выходит далеко за пределы протокола DLNA.
Есть поддержка собственного облачного сервиса, что позволяет смотреть домашнее видео удаленно — сервер подстроит параметры отправляемого видео под возможности устройства и канала связи.
Есть отдельно написанные клиенты под мобильные OS и плитки Windows 8.
Для Ubuntu, Fedora, CentOS и массовые модели NAS есть готовые пакеты. Под все остальное — устанавливается простой распаковкой. Из зависимостей требует лишь Avahi-daemon.
К сожалению механизм транскодирования слабо допускает вмешательства в работу — профили подправить можно, но возможности сильно ограничены.
Способен решить любые задачи в рамках темы, при этом бесплатен, стабилен и как ни странно — быстр.
Очень хотелось бы, что-бы кто-то этот список дополнил и/или внес изменения.
Источник