Blame

012023 Mayekkuzu 2025-05-13 11:33:44 1
# Jellyfin
2
3
Jellyfin - стриминговый сервер, позволяющий организовать стриминг кинчиков, сериальчиков. Так же имеет фунционал для организации стриминга музыки и даже чтения книжек/комиксов, но удобство использования последних оставляет желать лучшего.
4
5
Поддерживает рендер видео на лету используя ресурсы CPU, что долго и ориентировано на 1 пользователя максимум, или же использование аппаратного рендера средствами QuickSync, VA-API, NVENC. По видеокарточкам - Nvidia GTX 1050 и выше, по QuickSync - Intel CPU 9 поколение+ желательно (Но без индекса F).
6
7
## Установка с пакета (но через скрипт)
8
В debian/ubuntu - лучших традициях через внешний sh скрипт
9
```bash
10
curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash
11
sudo bash install-debuntu.sh
12
```
13
14
## Установка через бинарник
15
Создадим папку и перейдем
16
```bash
17
sudo mkdir /opt/jellyfin
18
cd /opt/jellyfin
19
```
20
21
Находим на странице [репозитория](https://repo.jellyfin.org/?path=/server/linux) ссылку на последнюю версию и копируем tar.gz. Далее скачаем и распакуем. После распаковки создадим символическую ссылку и создадим папки.
22
```bash
23
sudo wget https://repo.jellyfin.org/files/server/linux/latest-stable/amd64/jellyfin_10.10.7-amd64.tar.gz
24
sudo tar xvzf jellyfin_10.10.7-amd64.tar.gz
25
sudo ln -s jellyfin_10.10.7 jellyfin
26
sudo mkdir data cache config log
27
```
28
29
Бинарник готов, осталось организовать FFmpeg. В связке с Jellyfin рекомендуется использовать кастомный билд который можно взять так же в [репозитории](https://repo.jellyfin.org/?path=/ffmpeg). В моем случае это Debian, поэтому просто находим deb пакет и ставим.
30
```bash
31
wget https://repo.jellyfin.org/files/ffmpeg/debian/latest-7.x/amd64/jellyfin-ffmpeg7_7.1.1-2-bookworm_amd64.deb
32
sudo dpkg -i jellyfin-ffmpeg7_7.1.1-2-bookworm_amd64.deb
33
```
34
35
Создадим скрипт jellyfin.sh который будет запускаться как сервер
36
```
37
#!/bin/bash
38
JELLYFINDIR="/opt/jellyfin"
39
FFMPEGDIR="/usr/share/jellyfin-ffmpeg"
40
41
$JELLYFINDIR/jellyfin/jellyfin \
42
-d $JELLYFINDIR/data \
43
-C $JELLYFINDIR/cache \
44
-c $JELLYFINDIR/config \
45
-l $JELLYFINDIR/log \
46
--ffmpeg $FFMPEGDIR/ffmpeg
47
```
48
49
Файлу дадим права на запуск и назначим пользователя:
50
```bash
51
sudo chown -R user:group *
52
sudo chmod u+x jellyfin.sh
53
```
54
55
Далее создаем systemd службу которая будет запускаться автоматически при старте системы. Создадим файл `/etc/systemd/system/jellyfin.service`
56
```
57
[Unit]
58
Description=Jellyfin
59
After=network.target
60
61
[Service]
62
Type=simple
63
User=youruser
64
Restart=always
65
ExecStart=/opt/jellyfin/jellyfin.sh
66
67
[Install]
68
WantedBy=multi-user.target
69
```
70
71
По классике перезагружаем демон systemd и запускаем. Так же не забываем поставить на автостарт
72
```bash
73
sudo systemctl daemon-reload
74
sudo systemctl enable jellyfin.service
75
sudo systemctl start jellyfin.service
76
```
2fcfaa Mayekkuzu 2025-05-13 12:42:34 77
78
## NVENC в Jellyfin
79
Предварительно ознакомьтесь с разделом [Nvidia Driver и NVENC в Debian](/Hardware/GPU#nvidia-driver-nvenc-debianubuntu)
80
81
В разделе Administration -> Playback -> Transcoding переключите на Nvidia NVENC. В зависимости от желаемого поведения, поставьте галочки напротив интересующих кодеков. Чаще всего проставлять везде не обязательно, если фильмы храните в каком-то определенном формате.
82
83
![](./image-1747139156782.png)
84
85
Далее запустите фильм в UI Jellyfin и попробуйте понизить качество, к примеру до 10 Mbit
86
87
![](./image-1747139648220.png)
88
89
Если настроенно корректно, то в панели статистики увидите что производится транскодинг, будет указана причина почему он происходит и в nvidia-smi увидим процесс который использует NVENC.
90
91
Важно уточнить, что транскодинг производится в случаях когда:
92
- Не хватает скорости интернет-соединения
93
- Когда принудительно выставлена скорость потока воспроизведения
94
- Когда исходный кодек несовместим с устроиством воспроизведения. К примеру браузер компьютера не может воспроизводить HEVC нативно. (см. скрин выше).
95
96
Если происходит ошибка воспроизведения при запуске, то или некорректно работает NVENC, или же несовместимый кодек. О проблеме можно узнать почитав логи воспроизведения которые есть так же в UI админки. Так же убедитесь, что места для транскодинга видео достаточно, обычно - не меньше 8 ГБ
efbf5c Mayekkuzu 2025-05-13 13:03:20 97
98
## Jellyfin за реверспрокси Nginx
99
100
Базовая конфигурация выглядит так:
101
```
102
server {
103
listen 443 ssl;
104
listen [::]:443 ssl;
105
http2 on;
106
107
server_name YOUR_HOSTNAME;
108
ssl_protocols TLSv1.3 TLSv1.2;
109
# Здесь серты Let's Encrypt
110
ssl_certificate /etc/letsencrypt/live/YOUR_HOSTNAME/fullchain.pem;
111
ssl_certificate_key /etc/letsencrypt/live/YOUR_HOSTNAME/privkey.pem;
112
include /etc/letsencrypt/options-ssl-nginx.conf;
113
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
114
ssl_trusted_certificate /etc/letsencrypt/live/YOUR_HOSTNAME/chain.pem;
115
116
location / {
117
# Proxy main Jellyfin traffic
118
proxy_pass http://IP_YOUR_INSTANCE:8096;
119
proxy_set_header Host $host;
120
proxy_set_header X-Real-IP $remote_addr;
121
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
122
proxy_set_header X-Forwarded-Proto $scheme;
123
proxy_set_header X-Forwarded-Protocol $scheme;
124
proxy_set_header X-Forwarded-Host $http_host;
125
126
# Disable buffering when the nginx proxy gets very resource heavy upon streaming
127
proxy_buffering off;
128
}
129
130
location /socket {
131
# Proxy Jellyfin Websockets traffic
132
proxy_pass http://IP_YOUR_INSTANCE:8096;
133
proxy_http_version 1.1;
134
proxy_set_header Upgrade $http_upgrade;
135
proxy_set_header Connection "upgrade";
136
proxy_set_header Host $host;
137
proxy_set_header X-Real-IP $remote_addr;
138
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
139
proxy_set_header X-Forwarded-Proto $scheme;
140
proxy_set_header X-Forwarded-Protocol $scheme;
141
proxy_set_header X-Forwarded-Host $http_host;
142
}
143
}
144
145
server {
146
listen 80;
147
listen [::]:80;
148
server_name YOUR_HOSTNAME;
149
return 301 https://$host$request_uri;
150
}
151
```