Домашний стриминговый сервис с помощью Jellyfin
14 января 2024 г. linux self-hosted
У меня дома стоит Qnap в качестве домашнего медиаплеера. С него я стримлю на телевизор фильмы через DLNA. Всё прекрасно, но эта схема работает только внутри локальной сети, а я хочу лежать в отпуске под пальмой и по десятому кругу пересматривать все сезоны Друзей, которых больше нет на Кинопоиске.
В гугле подсказали чудесный open-source проект Jellyfin. Запуск в докере за две минуты:
#mkdir /opt/jellyfin/config && mkdir /opt/jellyfin/cache
#docker run -d --name=jellyfin --net=host --restart=always -v /opt/jellyfin/config:/config -v /opt/jellyfin/cache:/cache -v /media/root/complete:/media --net=host jellyfin/jellyfin:latest
И вуаля — self-hosted нетфликс ready for accept connections. Но, как обычно бывает с open-source-ом, есть нюанс.
Нюанс
Первоначальная настройка не вызывает никаких проблем. Я просто замаунтил папку с фильмами внутрь контейнера, и на порту 8096 нашел веб-интерфейс jellyfin. Далее->Далее->Готово.
Нюанс заключается в том, что если на клиенте нет кодека, которым упакован проигрываемый файл, то jellyfin начинает его перекодировать на сервере с помощью ffmpeg. Процесс этот очень тяжелый, а если это 4к видео, то 4 ядра моего Celeron J1900 упираются в полку, и видео начинает тормозить. FullHD прожёвывает, но на пределе. А если же кодек на клиенте есть, то jellyfin просто стримит данные без ffmpeg, почти не занимая процессорное время, даже если это 4к.
Далее выясняется, что на разных клиентах разная поддержка кодеков. Вообще я думал, что проблема отсутствия кодеков осталась где-то в 2007. Не так я представлял себе его возвращение.
Вот таблица наличия кодеков у разных клиентов
На iOS я установил Swiftfin, и это отличный клиент. Он умеет большинство кодеков, поэтому даже 4к видео играет без задержек.
Десктоп клиент, который есть под все ОС работает тоже хорошо.
А вот с Android есть проблемы. Я не смог найти нормальный клиент, который умел бы столько же форматов, как Swiftfin. А некоторые видео вообще не открывает (об этом есть информация в таблице). Пользоваться можно, но только если тщательно подходить к выбору кодеков у фильмов.
DLNA
У Jellyfin есть поддержка DLNA для стриминга в локалке. Но здесь тоже всплывает проблема перекодировки. Сервер не знает о кодеках на клиенте и запускает ffmpeg на всех видео. Настройки перекодирования пока отсутствуют. Надеюсь добавят в будущих версиях, а пока для DLNA продолжу использовать Kodi.
Мой сетап
В итоге получилась такая конфигурация:
Очень понравился интерфейс выбора фильмов у Jellyfin. Автоматически скачивает обложки для фильмов, показывает рейтинги IMDB и RottenTomatoes, список актёров с фото. Выбор аудиодорожек и субтитров тоже есть. Словом, почти нетфликс. Иногда, правда, промахивается с определением фильма по имени файла, но это редко происходит, и скорее связано с кривыми именами файлов.
Для оффлайн просмотра на телефоне можно скачивать файлы, но только через браузер. В мобильных приложениях такой функции нет.