Docker image for custom version of Jellyfin built for watching livestreams with friends.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
renovate-bot 579933aecc Update mcr.microsoft.com/dotnet/sdk Docker tag to v5.0.401 (#47) 5 days ago
.drone.yml Wrong read only secret [CI SKIP] 3 weeks ago
.hadolint.yaml Initial commit 3 months ago
Dockerfile Update mcr.microsoft.com/dotnet/sdk Docker tag to v5.0.401 (#47) 5 days ago
LICENSE Initial commit 3 months ago
README.md Update README 1 month ago
jellyfin_livestream.patch Add script to easily start transcode and change name for transcode files to just be the filename. Fixes #3 3 months ago
renovate.json Update location of renovate presets [CI SKIP] 2 months ago
start-transcode.sh Update transcode script to cleanup transcode files when exiting. Add option to set custom transcode directory. Add linting of transcode script to pipeline. 2 months ago

README.md

docker-jellyfin-livestream

Build Status Docker Pulls

Docker image for custom version of Jellyfin available at Docker Hub.

For questions head and source code over to the git repo here or on GitHub.

Please note, this container should only be used for watching livestreams via SyncPlay and is not ideal for normal usage.

Setup

Container

The container is intended to be a drop-in replacement for the official one, with one required and one optional config option. If you're unsure how to get started with the official docker container you can have a look at the instruction from the Jellyfin wiki here.

The two options are configured through environment variables and are JELLYFIN_LIVESTREAM_TRANSCODE_DIR and JELLYFIN_LIVESTREAM_DEFAULT_MEDIA_PATH.

JELLYFIN_LIVESTREAM_TRANSCODE_DIR has to be set to the transcode directory used by Jellyfin, or it won't work properly. By default, it is set to /config/transcodes.

JELLYFIN_LIVESTREAM_DEFAULT_MEDIA_PATH is a quality of life option allowing you to set the path to the media library that will contain the livestreams. This allows you to run the helper script with just the name of the file instead of the absolute path. Remember it should be the path to the library inside the container.

When you have the container up and running and a livestream download going you can start the transcode using the below command:

docker exec -it CONTAINER_NAME start-transcode livestream.mkv

If you didn't specify a default media path, use the absolute path to livestream.mkv inside the container instead. To stop the transcode you can just do a Ctrl+C, that will stop the FFmpeg process and clean up the transcode cache.

A livestream and a long MKV file.

To get a livestream you want to watch with some friends, I would recommend Streamlink. It's a great program and very easy to use. Now most if not all livestreams you download will be stored in a .mp4 container where we want an MKV container. To get that you have two options.

First options is to either pipe the stream directly to FFmpeg and have FFmpeg remux the stream into a mkv container with an arbitrarily long length. In this example I use 6 hours.

streamlink -O "LIVESTREAM_LINK" best | ffmpeg -i pipe: -codec copy -t 06:00:00 livestream.mkv

Or you can save the .mp4 and then have FFmpeg read from that file in real-time.

streamlink -o temp.mp4 "LIVESTREAM_LINK" best

And then

ffmpeg -re -i temp.mp4 -codec copy -t 06:00:00 livestream.mkv

The first option is nice because you don't have to store the video twice, but I have experienced issue with the audio being delay using that method. If you run into that as well try out the second method.

To manage it all I can definitely recommend having a look at tmux or screen to make everything easier.