Перейти к основному содержанию

Медиа сервер на базе Seafile + Jellyfin

Seafile

Я уже давно пользуюсь домашним облаком Seafile, которое развёрнуто дома на виртуальном сервере Ubuntu 18.

Seafile — это личное хранилище для хранения данных в стиле Dropbox. Seafile — замечательный инструмент для создания личного, семейного или корпоративного файлового хранилища. Не очень сложен в установке и настройке. Бесплатен.

Seafile — личное хранилище

Продолжаю тему развёртывания домашнего медиа сервера на базе Seafile. Цепочка Seafile → Fuse → DLNA позволила настроить медиа сервер с пакетом MiniDLNA.

DLNA (Digital Living Network Alliance) — набор стандартов, которые позволяют передавать и воспроизводить в реальном времени фото, видео и аудио файлы по домашней сети. Поддерживается проводная (Ethernet) и беспроводная (Wi-Fi) связь.

Это решение обладало рядом недостатков и достоинств, подробнее здесь:

Медиа сервер на базе Seafile + MiniDLNA

После этого я решил рассмотреть в качестве DLNA сервера бесплатный медиа сервер Emby. Этот вариант показался интересным, но тоже не без недостатков, читаем здесь:

Медиа сервер на базе Seafile + Emby

Переходим к следующему кандидату, это бесплатный медиа сервер Jellyfin.

jellyfin

Для настройки медиа сервера нужно решить две задачи:

  1. Получить доступ к данным Seafile как в обычной файловой системе.
  2. Поднять DLNA сервер.

По отдельности про решение этих двух задач можно почитать здесь:

  1. Seafile — расширение FUSE
  2. Медиа сервер Jellyfin на Ubuntu 18

В Seafile данные не хранятся в виде файлов а разбиты на блоки. Это позволяет эффективно использовать механизм дедупликации данных. Но для предоставления данных серверу DLNA эти блоки нужно превратить в обычные файлы. Для этого используется расширение seaf-fuse. Seaf-fuse является реализацией виртуальной файловой системы FUSE. Этот скрипт монтирует всё содержимое Seafile в папку (которая называется "mount point"), так что мы получаем доступ ко всем файлам Seafile так же, как к обычной папке на сервере.

https://manual.seafile.com/extension/fuse/

Доступ к зашифрованным папкам с помощью seaf-fuse не предоставляется, поэтому библиотеку с фильмами не шифруем. Данные доступны только для чтения, это нам подходит. В debian/centos для монтирования папки FUSE пользователь должен быть в группе "fuse".

Как использовать seaf-fuse

Создаём точку монтирования, назначаем владельцем пользователя, от имени которого работает seafile:

mkdir /opt/seafile-fuse
chown sf\: /opt/seafile-fuse

У меня Ubuntu, поэтому для монтирования директории пользователь должен быть участником группы fuse. Создадим группу и добавим в неё пользователя:

groupadd fuse
usermod -aG fuse sf

seafile

Для проверки можно запустить скрипт seaf-fuse от имени пользователя, под которым работает seafile:

/opt/seafile-server-latest/seaf-fuse.sh start /opt/seafile-fuse

В папке /opt/seafile-fuse появится содержимое Seafile. Теперь мы можем получить путь к папке с фильмами, например:

/opt/seafile-fuse/user@example.com/5403ac56-5552-4e31-a4f1-1de4eb889a5f_Video

Для остановки монтирования:

/opt/seafile-server-latest/seaf-fuse.sh stop

По умолчанию доступ к содержимому имеет пользователь root, дадим доступ всем пользователям сервера. Редактируем файл /etc/fuse.conf. Раскомментируем опцию:

user_allow_other

seafile

Для проверки можно запустить скрипт seaf-fuse от имени пользователя, под которым работает seafile, с параметрами:

/opt/seafile-server-latest/seaf-fuse.sh start -o allow_other /opt/seafile-fuse

В папке /opt/seafile-fuse появится содержимое Seafile. Доступ к содержимому имеют все пользователи.

Автоматизируем запуск seaf-fuse

Запуск служб Seafile у меня уже автоматизирован:

Seafile — автозапуск

Добавим автозапуск seaf-fuse в systemd.

${seafile_dir} — измените переменную на путь к вашей директории Seafile. У меня /opt.
User и Group — измените на своего пользователя и группу.

Работаем под рутом. Создаём сервис seafile-fuse:

sudo vim /etc/systemd/system/seafile-fuse.service

Сервис будет запускаться после seafile и seahub. Содержимое:

[Unit]
Description=Seafile fuse
After=network.target seafile.service seahub.service

[Service]
Type=forking
ExecStart=${seafile_dir}/seafile-server-latest/seaf-fuse.sh start -o allow_other /opt/seafile-fuse
ExecStop=${seafile_dir}/seafile-server-latest/seaf-fuse.sh stop
LimitNOFILE=infinity
User=sf
Group=sf

[Install]
WantedBy=multi-user.target

Настраиваем автозагрузку:

systemctl daemon-reload
systemctl enable seafile-fuse

seafile

Проверяем:

systemctl start seafile-fuse
systemctl status seafile-fuse

seafile

Теперь после загрузки сервера папка с содержимым Seafile будет монтироваться автоматически.

Jellyfin

На базе Emby существует форк под названием Jellyfin. Этот медиа сервер должен быть чуточку свободнее и без назойливой рекламы. Проект развивается сообществом и полностью зависит от вклада добровольцев в его совершенствование.

Ссылки

https://jellyfin.org/

Установка Jellyfin на Ubuntu 18

Заходим на официальный сайт.

jellyfin

Переходим в раздел Download now и находим инструкцию для установки медиа сервера на Ubuntu.

jellyfin

Работаем под sudo. Устанавливаем вспомогательный пакет apt-transport-https:

apt install apt-transport-https

Устанавливаем репозиторий jellyfin:

cd /tmp
wget -O - https://repo.jellyfin.org/jellyfin_team.gpg.key | sudo apt-key add -
echo "deb [arch=$( dpkg --print-architecture )] https://repo.jellyfin.org/$( awk -F'=' '/^ID=/{ print $NF }' /etc/os-release ) $( awk -F'=' '/^VERSION_CODENAME=/{ print $NF }' /etc/os-release ) main" | sudo tee /etc/apt/sources.list.d/jellyfin.list

Обновляем репозитории:

apt update

Устанавливаем пакет jellyfin:

apt install jellyfin

Медиа сервер jellyfin установлен. Проверим состояние службы:

service jellyfin status

jellyfin

После установки веб-интерфейс для настройки доступен по адресу http://localhost:8096. Служба HTTPS по умолчанию выключена, если включить, то она работает на порту 8920 — или https://localhost:8920. Аналогично серверу Emby.

Проверяю работающий порт 8096:

netstat -tanu | grep 8096

jellyfin

Порт работает, дальнейшую настройку можно производить в браузере:

http://localhost:8096

Начальная настройка Jellyfin

jellyfin

Проходим квест по первоначальной настройке сервера.

jellyfin

При создании библиотеки указываем путь к видео, который мы создали с помощью seaf-fuse, например:

/opt/seafile-fuse/user@example.com/5403ac56-5552-4e31-a4f1-1de4eb889a5f_Video

В итоге получаем работающий медиа сервер, который распознаёт фильмы.

jellyfin

Jellyfin по DLNA

Меня больше всего интересует вопрос работы Jellyfin по DLNA. Прошлый опыт с Emby был не очень удачен, на старом телевизоре Philips ничего не заработало. Поскольку Jellyfin, похоже, использует тот же самый плагин, то результат может быть таким же.

jellyfin

Здесь нужно выбрать пользователя по умолчанию, чьи библиотеки будут транслироваться по DLNA. Настройки DLNA такие же как у Emby.

Стоит обратить внимание на вкладку "Profiles".

jellyfin

Здесь можно выбрать профиль по умолчанию для DLNA сервера. Я выбрал LG Smart TV. Выбираем системный профиль, нажимаем OK. Далее настройки профиля можно переопределить.

Проверяю работу Emby DLNA на телевизоре LG

jellyfin

Сначала я расстроился из-за того, что превьюшки не показываются.

jellyfin

Однако, покопавшись в настройках Jellyfin, я понял, что проблема легко устраняется установкой плагина Fanart. Этот плагин добавляет дополнительные типы изображений, которые настраиваются в медиатеке.

jellyfin

Теперь превьюшки отображаются.

jellyfin

И фильм проигрывается.

Проверяю работу Emby DLNA на старом телевизоре Philips

jellyfin

О чудо! При первой загрузке телевизор не завис, как в Emby.

seafile

Внутри, однако, всё ещё наблюдается вывод папок в бесконечном цикле.

jellyfin

Если клювом не щёлкать и оперативно управлять пультом, то можно вывести список фильмов.

jellyfin

И даже посмотреть.

jellyfin

Результаты

На базе домашнего облака Seafile + Jellyfin получилось сделать домашний медиа сервер. Работу музыки я не тестировал. Протестировал медиатеку с фотографиями, всё работает. Только на превьюшках папок фотографии автоматически не поворачиваются вертикально.

Минусы

  • DLNA на Philips заработало, но не без ошибок. Внутри всё ещё наблюдается вывод папок в бесконечном цикле, но фильм можно запустить.
  • По умолчанию содержимое медиа библиотеки обновляется раз в 12 часов. Однако, содержимое папки можно обновить вручную через web GUI.
  • Нет встроенной возможности запустить Jellyfin под нужным пользователем, так что seaf-fuse монтируем только с доступом на чтение всем пользователям.
  • Нет пользователя для автоматического входа в локальной сети, однако, это обходится созданием пользователя без пароля.
  • Телегид сожрал 100 ГБ кэша, пришлось от него отказаться из-за нехватки места.
  • Обнаружил косяк в вёрстке при работе сайта на небольших разрешениях, когда сцены не отображались.

Плюсы

  • Фильмы по DLNA заработали на телевизоре LG. Есть превьюшки.
  • Фильмы по DLNA заработали на телевизоре Philips. Превьюшек для видео нет, только для фото. Работает с ошибками.
  • Эфирное телевидение работает без премиального доступа, в отличие от Emby.
  • Протестировал медиатеку с фотографиями, всё работает.
  • Есть возможность трансляции фильма из браузера на телевизор. На LG работает, на Philips работает не со всеми форматами видео. Возможно, требуется настроить профиль для Philips.
  • Jellyfin и Seafile не требовательны к ресурсам, процессор и память сильно не жрут.
  • Есть кодирование на лету. Вот тогда могут использоваться ресурсы.
  • Есть красивый web интерфейс с возможностью просмотра фильмов.
  • Содержимое папки можно обновить вручную через web GUI.
  • А ведь можно запустить несколько разных серверов DLNA, у меня вместе работает Jellyfinи MiniDLNA.
  • Нет рекламы.

Заметки

  • Фильмы высокого качества по Wi-Fi тормозят, нужно подключать телевизор к проводной сети Ethernet.
  • Часто фильмы не распознаются или распознаются неправильно, пришлось научиться распознавать фильмы.
  • Попробовал смеха ради воткнуть ссылку на домашний медиа сервер в приложение Yandex на Smart TV, всё равно яндекс отказался от него. Жалко, Jellyfin не заработал, возможно, с cookies плохо работает или ещё что-то, не стал разбираться.
  • Отображение фонов (задников) постоянно отключается. Баг? Или эта штука через куки работает и нужно включать в каждом браузере?

В целом впечатление от Jellyfin хорошее, мне этот медиа сервер понравится больше, чем Emby. Связка Seafile + Jellyfin + MiniDLNA решила все поставленные задачи. Если бы без DLNA работало без ошибок, то MiniDLNA можно было бы и не ставить, но второй DLNA сервер каши не просит, пусть остаётся.

Я буду пробовать и другие медиа серверы с поддержкой DLNA, ждите новый статей.

Теги

 

Похожие материалы