RK1 media stack
This directory builds an ARM64-only Kodi/GBM appliance stack for an RK3588
running Armbian Debian 13 (Trixie) with the Rockchip vendor 6.1 kernel. All
third-party inputs are immutable Git commits recorded in sources.lock.json.
The result is a Debian package whose custom libraries and programs live under
/opt/rkmedia; it does not replace Debian's FFmpeg or Kodi packages.
Why the compatibility MPP and RGA branches are pinned
The current kodi-rockchip-deb recipe uses nyanmisaka's jellyfin-mpp and
jellyfin-rga branches. FFmpeg-Rockchip 8.1 checks for MPP package version
1.3.9 and the mpp_buffer_sync_begin_f symbol, and checks the RGA APIs
c_RkRgaBlit and querystring. These exact branches satisfy that interface.
The official Rockchip MPP/RGA heads inspected when this lock was generated are
recorded as reference metadata, but are deliberately not substituted into the
matched build without a complete hardware regression run.
Build
Run this on an aarch64 Debian Trixie installation. The native build is large and can take several hours.
sudo ./scripts/install-build-deps.sh --install
./scripts/build-media.sh
Outputs are written to out/ by default:
rk1-media-stack_<version>_arm64.deb- an unpacked
stage/tree for inspection - cloned, detached source trees and component build directories
Useful options:
./scripts/fetch-sources.sh --dest /path/to/sources
./scripts/build-media.sh --source-dir /path/to/sources --work-dir /path/to/work --output-dir /path/to/output --jobs 8
./scripts/build-media.sh --no-fetch
Set RKMEDIA_ALLOW_UNSUPPORTED_HOST=1 only for development. Packages built on
anything other than Trixie are unsupported because their generated shared
library dependencies will describe the build host, not the target image.
Fast candidate repack
For image composition and hardware validation, the pinned July 2026 upstream Trixie package can be deterministically repacked in a few minutes instead of performing the multi-hour native compile:
./scripts/repack-upstream-deb.sh
The script downloads the exact asset in upstream-deb.lock.json, verifies its
size and SHA-256 before extraction, removes approximately 270 MB of static
FFmpeg archives and all development pkg-config files, and emits the same
rk1-media-stack package format. Kodi remains at /usr/local, its compiled
prefix. FFmpeg, FFprobe, MPP, RGA, dav1d, and display-info move under
/opt/rkmedia; the launcher supplies the corresponding library path.
Use --deb PATH to repack an already-downloaded copy without network access.
The prebuilt asset is reproducible as an input but its original recipe used
moving source branches; its verified asset digest, rather than reconstructed
Git commit guesses, is the provenance boundary.
Install and operate
Install with APT so runtime dependencies are resolved:
sudo apt install ./rk1-media-stack_<version>_arm64.deb
sudo systemctl enable --now kodi-rk.service
The package creates a locked kodi system account, grants it only the existing
video, render, audio, and input group memberships, and gives it persistent
state under /var/lib/kodi. Kodi takes DRM master on tty1, so a display manager
or another program holding the KMS device must not be active.
The service is enabled during package configuration but is not started inside
an image-build chroot. Edit /etc/rkmedia/kodi.env for supported environment
overrides, then restart kodi-rk.service.
The following commands are exposed without replacing system FFmpeg:
ffmpeg-rk -hide_banner -decoders
ffmpeg-rk -hide_banner -encoders
ffmpeg-rk -hide_banner -filters
ffprobe-rk media-file.mkv
Expected hardware entries include h264_rkmpp, hevc_rkmpp, vp9_rkmpp,
av1_rkmpp, mjpeg_rkmpp, and the scale_rkrga, vpp_rkrga, and
overlay_rkrga filters. Runtime access is provided through conservative udev
rules for the DRM, dma-heap, RGA, IEP, VPU, and MPP device nodes.
Boundaries
- The package does not install or select the kernel, device tree, Panthor overlay, Mesa, firmware, or bootloader. Those belong to the parent image.
- The package does not claim HDMI link, HDR, passthrough, or codec acceptance; those require testing on the actual RK1/carrier/TV combination.
- Kodi is pinned to a mainline commit because the current Rockchip GBM work is newer than a stable Kodi release. Update the lock only as a tested set.