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. Visual bug in x264 media during transcoding. Blocky mess. Everything else is fine. Note FPS counter. 2560x1600 25Mbps to 1080p 10Mbps video (the game is WARNO from Eugen Systems): Video info. Screen with transcoding stats /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.
Grafana with CPU utilization
Jellyfin + RKMPP. Docker-compose file and some notes