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

  1. Avoid using microSD card as a transcoding medium - it's slow, at least my cheap card (Kingston Canvas with 25mb/s write speed).
  2. 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.
  1. 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