Seeking - nothingveryobvious - 2025-02-08
Hello. When I locally direct play a 1080p video, bitrate 5 Mbps, I can play it and seek through it just fine. When I remotely (~ 20 miles away; via reverse proxy, Cloudflare DNS-only, no Cloudflare proxy) direct play the same 1080p video, bitrate 5 Mbps, it plays perfectly, but when I seek, it takes a very long time to finally play. Why is this? Is there a way to improve this?
My server's average speeds are 930 Mbps download and 175 Mbps upload. At the remote location ~ 20 miles away, their speeds are even faster.
It's been like this for a long time now, since earlier versions. I'm on Jellyfin 10.10.5. The client is Jellyfin Android TV 0.18.4.
I'd appreciate any help. Thank you!
RE: Seeking - TheDreadPirate - 2025-02-10
Is it transcoding?
RE: Seeking - nothingveryobvious - 2025-02-12
Hi, @TheDreadPirate. No, it is not transcoding. Dashboard indicates direct play.
RE: Seeking - TheDreadPirate - 2025-02-12
Which reverse proxy and can you share the config for it? Assuming it isn't caddy.
RE: Seeking - nothingveryobvious - 2025-02-13
Hey @TheDreadPirate, I'm using SWAG.
Here's the config:
## Version 2023/05/31
# make sure that your jellyfin container is named jellyfin
# make sure that your dns has a cname set for jellyfin
# if jellyfin is running in bridge mode and the container is named "jellyfin", the below config should work as is
# if not, replace the line "set $upstream_app jellyfin;" with "set $upstream_app <containername>;"
# or "set $upstream_app <HOSTIP>;" for host mode, HOSTIP being the IP address of jellyfin
# in jellyfin settings, under "Advanced/Networking" add subdomain.mydomain.tld as a known proxy
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name jellyfin.*;
include /config/nginx/ssl.conf;
client_max_body_size 0;
location / {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app jellyfin;
set $upstream_port 8096;
set $upstream_proto http;
proxy_pass http://10.0.0.94:8096;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
}
location ~ (/jellyfin)?/socket {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app jellyfin;
set $upstream_port 8096;
set $upstream_proto http;
proxy_pass http://10.0.0.94:8096;
}
}
RE: Seeking - TheDreadPirate - 2025-02-13
Does /config/nginx/proxy.conf or resolver.conf include this line?
Code: proxy_http_version 1.1;
RE: Seeking - nothingveryobvious - 2025-02-14
@TheDreadPirate
Yes, proxy.conf includes that line.
RE: Seeking - bitmap - 2025-02-14
Code: server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name jellyfin.*;
include /config/nginx/ssl.conf;
client_max_body_size 0;
location / {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app jellyfin;
set $upstream_port 8096;
set $upstream_proto http;
proxy_pass http://10.0.0.94:8096;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
}
location ~ (/jellyfin)?/socket {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app jellyfin;
set $upstream_port 8096;
set $upstream_proto http;
proxy_pass http://10.0.0.94:8096;
}
}
Are you using SWAG? This looks similar to my config that was originally a template. I'm wondering why you're invoking "set" and then specifying an IP below? The upstream_app variable can be used to set the IP address, but I don't think that's the issue. Sharing portions of my config because they're different than yours. My root location block includes:
Code: location / {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app $jellyfin;
set $upstream_port 8096;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
# Disable buffering when the nginx proxy gets very resource heavy upon streaming
proxy_buffering off;
}
And my socket location block includes:
Code: location ~ (/jellyfin)?/socket {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app $jellyfin;
set $upstream_port 8096;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
}
I don't see any headers for your socket location and the only other big one I see is proxy_buffering. You also should be aware that invoking http2 in the way you have is deprecated and should be revised to this:
Code: server {
listen 443 ssl;
http2 on;
You may also try setting the client_max_body_size to something like 10M or 20M but I don't think that will make much (if any) difference. TDP can advise you better than I can...they helped me iron out the kinks in my own config...
|