Найти тему

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

Оглавление

Я уже давно пользуюсь домашним облаком 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.

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

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

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

В 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
-2

Для проверки можно запустить скрипт 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
-3

Для проверки можно запустить скрипт 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
-4

Проверяем:

systemctl start seafile-fuse
systemctl status seafile-fuse
-5

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

Jellyfin

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

Ссылки

https://jellyfin.org/

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

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

-6

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

-7

Работаем под 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
-8

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

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

netstat -tanu | grep 8096
-9

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

http://localhost:8096

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

-10

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

-11

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

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

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

-12

Jellyfin по DLNA

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

-13

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

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

-14

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

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

-15

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

-16

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

-17

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

-18

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

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

-19

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

-20

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

-21

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

-22

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

-23

Результаты

На базе домашнего облака 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, ждите новый статей.

Источник:
https://internet-lab.ru/seafile_mediaserver_jellyfin

💰 Поддержать проект

Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.