I currently have a jellyfin setup running on my pc which I access when away from home by tailscaling into my home network. This works great for my partner and I while we are away from home.
I have given my siblings access to my jellyfin setup as well, and I’ve added them to the tailscale network too. They live in a different country though and have had some latency issues (media buffering constantly) making it kinda suck to use.
I would love to be able to improve this performance but I dont really know where to start. Would this be a bandwidth issue somewhere between my pc, tailscale, my router, their router, and their device? Would this be caused by some setting in my jellyfin setup or in the jellyfin client on their device? I would really appreciate any advice on where I should start to troubleshoot to improve this performance.
- You might want to set an appropriate bitrate and video quality for transcoding for these users that works acceptably for their latency and bandwidth.
- The reason netflix, prime, Disney+, etc work as well as they do is because they have CDN peering, so your version of Game of Thrones comes from somewhere much closer to you in a network sense. You can change your tailscale relay, or you can lock down jellyfin to their ip and specific port and skip the tailscale (I don’t recommend it unless you know what you’re doing) and let routing tables help with latency.
If both your Jellyfin server and your siblings are behind residential CGNAT, then high chance your connections are relayed through Tailscale’s DERP servers. You can check with
tailscale ping
-ing your sibilings’ nodes.If this is the case, you may consider selfhosting your own DERP somewhere close to you, but I’d argue the performance gains are minimal compared to the extra costs. Another solution would be to enable IPv6 for both you and your siblings, skipping NAT traversal. I just hope both ISPs support it and support it properly in $CURRENT_YEAR.
This is all assuming you can direct play (i.e. not transcoding) your media. If you’re transcoding, then it’s good to look into hardware acceleration like the other comment mentioned, too
Tailscale can use relays if it cant find a way to make a p2p connection. Check the documentation. There is a command you can run to see whats using the relay.
The siblings could run
tailscale ping nodeIP/nodeName
This not only shows if they are connected via a DERP (relay) but also retries to connect them directly a few times.
If that doesn’t work out it can sadly be quite hard figuring out why a DERP is used instead of a direct connection.This is the first thing I’d look at too.
When they are streaming is it transcoding?
If not, it should be reducing the stream quality to adjust to the available bandwidth.
If it is, it could be limited to your pc’s available resources. You may want to turn on hardware transcoding.
Jellyfin has logs that will tell you if its transcoding and how well it’s working.
Tailscale does add additional hops to their route and has bandwidth limitations but it should be fine for streaming.
I believe that jellyfin has been transcoding using jellyfin-ffmpeg. I do have logs labelled “FFmpeg.Transcode-…” which seem to look fine. I have just turned on hardware acceleration though. Is that what you meant by “hardware transcoding”?
Ill check to see if the buffering is improved and will let you know how it goes! Thanks for the advice!
Yes, hardware transcoding = using hardware acceleration for decoding/re-encoding the video files. CPUs do it pretty slowly (or they use a ton of electricity if they’re fast enough to do it quickly) but the special decoder/encoder chips on GPUs (including integrated graphics GPUs) can handle that sort of task no sweat in most cases as long as you’ve got it preperly configured.
If it’s cable internet you might just be constrained by the available upload speed. I tend to put my media in Storj then run a VPS somewhere between all the clients that serves the media via WebDAV with
rclone
. This gets around the slow upload speed of cable internet at home, and I can cache the remote content on my NAS at home too.All the answers so far could point in the right direction. I’m lurking to see which one pans out.
Sames, I have a bunch of users(2) all streaming jellyfin fine over tailscale, except one house which buffers sporadically over the day. There’s no rhyme or reason to the when, or the what that needs to be buffered. As in it’ll buffer direct plays/HEVCs/AV1s, or it’ll play them fine. Some times it’ll buffer at night, sometimes during the day, sometimes neither or both. Worse, I’m getting all my information via users, so maybe theres a common thread, but they haven’t found it.
Their internet speed is fine. It could be WiFi being saturated in their area. It could be the relay being a very old rPi3 just isn’t up to it (The pi, captures their requests through Pi-Hole and proxyies their traffic over tailscale). It could be the laptop they’re using as a client isn’t up to it. Or it could be some setting somewhere.
It’s annoying whatever it is.