rff-core 0.4.3

Remade FFmpeg (Rust): core media primitives — frames, packets, formats, errors (libavutil-equivalent).
Documentation

rff-core

Remade With Rust By Mata Network License: Apache-2.0

The dependency-free core of remade_ffmpeg_rs — the media primitives every other layer is written against: frames, packets, codec/pixel/sample enums, rationals, dictionaries and the shared error type. FFmpeg's libavutil, in safe Rust with a single dependency (thiserror).

  • Frames — VideoFrame (planar/packed pixels, PixelFormat), AudioFrame (interleaved f32, SampleFormat), unified by the Frame enum.
  • Packets — Packet with PTS/DTS, duration, stream index and PacketFlags (keyframe et al.).
  • Identifiers — CodecId, MediaType, PixelFormat, SampleFormat.
  • Plumbing — Rational timebases, Dictionary for FFmpeg-style -key value options, and Error/Result with the Again/Eof drain protocol every codec follows.
  • No I/O, no codecs, no allocator tricks — just the vocabulary types, so every downstream crate agrees on what a frame is.

Usage

use rff_core::{AudioFrame, CodecId, Error, MediaType, Packet, Rational, SampleFormat};

fn main() -> Result<(), Error> {
    // A 20 ms stereo frame at 48 kHz, interleaved f32.
    // `samples` counts samples PER CHANNEL; `planes` holds the raw bytes —
    // one plane for interleaved formats, one per channel for planar ones.
    let frame = AudioFrame {
        sample_rate: 48_000,
        channels: 2,
        format: SampleFormat::F32,
        planes: vec![vec![0u8; 960 * 2 * 4]],
        samples: 960,
        pts: Some(0),
    };
    println!("{} samples/ch, {} ch", frame.samples, frame.channels);

    // Timebases are exact rationals, never floats.
    let tb = Rational::new(1, 48_000);
    println!("timebase {}/{}", tb.num, tb.den);

    assert_eq!(CodecId::Opus.media_type(), MediaType::Audio);
    let _pkt = Packet::default();
    Ok(())
}

Error::Again means "feed more input" and Error::Eof means "flushed and fully drained" — the same EAGAIN/EOF contract FFmpeg uses, and the one every rff-codec-* and rff-format-* crate implements.

Part of Remade With Rust

This crate is one layer of remade_ffmpeg_rs — a ground-up, permissively-licensed Rust rebuild of FFmpeg: a drop-in ffmpeg/ffprobe CLI on pure-Rust codecs, with no copyleft. Most users want the remade-ffmpeg engine facade or the rff-cli binaries rather than this crate directly.

Also check out our sister project FFAI — media for an AI-first world — and the rest of github.com/remade-with-rust, including the standalone codec crates rusty_h264, rusty_vp9, rusty_mp3, rusty_aac, rusty-opus, rusty_vorbis, and the rusty-av1-toolkit forks.

About Mata Network

Mata Network builds sovereign, self-hostable infrastructure. Remade With Rust is our open-source home for the permissively-licensed building blocks that work depends on.

License

Apache-2.0. See the workspace LICENSE.