version: '3.5'
services:
jellyfin:
#Switch to the Jellyfin 10.9 (with supposed RKMPP support) it's release
image: nyanmisaka/jellyfin:latest-rockchip
container_name: jellyfin
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
network_mode: 'host'
devices:
- '/dev/dri/card0:/dev/dri/card0' #Important - device for transcoding
- '/dev/dri/renderD128:/dev/dri/renderD128' #Important, same as above
- '/dev/dri:/dev/dri'
- '/dev/dma_heap:/dev/dma_heap' #Specific for RK35XX SoC
- '/dev/mali0:/dev/mali0' #Specific for RK35XX SoC
- '/dev/rga:/dev/rga' #Specific for RK35XX SoC
- '/dev/mpp_service:/dev/mpp_service' #Specific for RK35XX SoC
volumes:
#Config folder, leave as it is
- ./config:/config
#Transcoding folder. I decided to put it to M.2 SSD, not microSD card
- /mnt/KC2500/jellyfin/transcodes:/config/transcodes
#Media libraries
# Example:
#- /path/to/your/media/files:/data/your-folder-name
- /mnt/KC2500/media/completed/:/data/misc
- /mnt/wdblue/jellyfin/series:/data/tvseries
- /mnt/wdblue/jellyfin/movies:/data/movies
restart: 'unless-stopped'
\
UPDATE: see https://containercat.com/rockchip-rk35xx-and-jellyfin-update/ for quick update on Jellyfin 10.9.X and docker-compose file.
Some notes:
Add full HWA transcoding pipeline for Rockchip RKMPP by nyanmisaka · Pull Request #10748 · jellyfin/jellyfin
Web jellyfin/jellyfin-web#5056 FFmpeg jellyfin/jellyfin-ffmpeg#318 Changes Add full HWA transcoding pipeline for Rockchip RKMPP HW decoder (MPEG1, MPEG2, MPEG4, H264, HEVC, VP8, VP9, AV1)…
Merge request with RKMPP support
- Avoid using microSD card as a transcoding medium - it's slow, at least my cheap card (Kingston Canvas with 25mb/s write speed).
- There are some visual bugs in certain media files (x264), probably due to incorrectly installed drivers - I have Armbian, so drivers for Rockchip media processing engine was, let's say, not really easy.


- 2560x1600 25Mbps to 1080p 10Mbps video (the game is WARNO from Eugen Systems):


/usr/lib/jellyfin-ffmpeg/ffmpeg -analyzeduration 200M -probesize 1G -init_hw_device rkmpp=rk -hwaccel rkmpp -hwaccel_output_format drm_prime -afbc rga -autorotate 0 -i file:"/data/misc/warno-brrrt.mp4" -autoscale 0 -map_metadata -1 -map_chapters -1 -threads 0 -map 0:0 -map 0:1 -map -0:s -codec:v:0 h264_rkmpp -b:v 9807693 -maxrate 9807693 -bufsize 19615386 -profile:v:0 high -level 42 -g:v:0 240 -keyint_min:v:0 240 -vf "setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,scale_rkrga=format=nv12:afbc=1" -codec:a:0 copy -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 4 -hls_segment_type mpegts -start_number 0 -hls_segment_filename "/config/transcodes/02e9f844ea8555c9308bc95e01265615%d.ts" -hls_playlist_type vod -hls_list_size 0 -y "/config/transcodes/02e9f844ea8555c9308bc95e01265615.m3u8"
ffmpeg version 6.0.1-Jellyfin Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12 (Debian 12.2.0-14)
configuration: --prefix=/usr/lib/jellyfin-ffmpeg --target-os=linux --extra-version=Jellyfin --disable-doc --disable-ffplay --disable-ptx-compression --disable-static --disable-libxcb --disable-sdl2 --disable-xlib --enable-lto --enable-gpl --enable-version3 --enable-shared --enable-gmp --enable-gnutls --enable-chromaprint --enable-opencl --enable-libdrm --enable-libass --enable-libfreetype --enable-libfribidi --enable-libfontconfig --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libopenmpt --enable-libdav1d --enable-libsvtav1 --enable-libwebp --enable-libvpx --enable-libx264 --enable-libx265 --enable-libzvbi --enable-libzimg --enable-libfdk-aac --arch=arm64 --cross-prefix=/usr/bin/aarch64-linux-gnu- --toolchain=hardened --enable-cross-compile --enable-rkmpp --enable-rkrga
libavutil 58. 2.100 / 58. 2.100
libavcodec 60. 3.100 / 60. 3.100
libavformat 60. 3.100 / 60. 3.100
libavdevice 60. 1.100 / 60. 1.100
libavfilter 9. 3.100 / 9. 3.100
libswscale 7. 1.100 / 7. 1.100
libswresample 4. 10.100 / 4. 10.100
libpostproc 57. 1.100 / 57. 1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'file:/data/misc/warno-brrrt.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.45.100
Duration: 00:00:13.95, start: 0.000000, bitrate: 26484 kb/s
Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 26348 kb/s, 60.07 fps, 60 tbr, 15360 tbn (default)
Metadata:
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 192 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Stream mapping:
Stream #0:0 -> #0:0 (h264 (h264_rkmpp) -> h264 (h264_rkmpp))
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
Output #0, hls, to '/config/transcodes/02e9f844ea8555c9308bc95e01265615.m3u8':
Metadata:
encoder : Lavf60.3.100
Stream #0:0: Video: h264 (High), drm_prime(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 9807 kb/s, 60 fps, 90k tbn (default)
Metadata:
encoder : Lavc60.3.100 h264_rkmpp
Stream #0:1: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 192 kb/s (default)
frame= 2 fps=0.0 q=-0.0 size=N/A time=00:00:00.03 bitrate=N/A speed=21.9x
frame= 91 fps=0.0 q=-0.0 size=N/A time=00:00:01.52 bitrate=N/A speed=3.03x
frame= 198 fps=197 q=-0.0 size=N/A time=00:00:03.31 bitrate=N/A speed= 3.3x
[hls @ 0xaaaae47b63c0] Opening '/config/transcodes/02e9f844ea8555c9308bc95e012656150.ts' for writing
frame= 299 fps=199 q=-0.0 size=N/A time=00:00:04.97 bitrate=N/A speed=3.31x
frame= 405 fps=202 q=-0.0 size=N/A time=00:00:06.75 bitrate=N/A speed=3.36x
[hls @ 0xaaaae47b63c0] Opening '/config/transcodes/02e9f844ea8555c9308bc95e012656151.ts' for writing
frame= 492 fps=196 q=-0.0 size=N/A time=00:00:08.20 bitrate=N/A speed=3.26x
frame= 595 fps=197 q=-0.0 size=N/A time=00:00:09.92 bitrate=N/A speed=3.29x
frame= 697 fps=198 q=-0.0 size=N/A time=00:00:11.61 bitrate=N/A speed= 3.3x
[hls @ 0xaaaae47b63c0] Opening '/config/transcodes/02e9f844ea8555c9308bc95e012656152.ts' for writing
frame= 794 fps=198 q=-0.0 size=N/A time=00:00:13.23 bitrate=N/A speed=3.29x
[hls @ 0xaaaae47b63c0] Opening '/config/transcodes/02e9f844ea8555c9308bc95e012656153.ts' for writing
frame= 836 fps=198 q=-0.0 Lsize=N/A time=00:00:13.89 bitrate=N/A speed=3.29x
video:15885kB audio:327kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
ffmpeg log
So... use Ubuntu image with RKMPP drivers (or Armbian and install drivers manually). Everything else should work just fine.
