Files
rk1/media

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.