ff-stream
Produce HLS and DASH adaptive bitrate output from any video source. Define a rendition ladder, point it at an input file, and receive a standards-compliant package ready for CDN delivery.
Project status (as of 2026-06-04): The library foundation is in place. Development continues through avio-editor-demo, a real-world video editing application built on
avio, which surfaces bugs and drives API improvements. Pull requests, bug reports, and feature requests are welcome — see the main repository for full context.
Installation
[]
= "0.15"
HLS Output
HlsOutput is a consuming builder. Setters take self and return Self; validation is
deferred to build(), and write() performs the encode-and-mux.
use HlsOutput;
use Duration;
new
.input
.segment_duration
.keyframe_interval
.build?
.write?;
// Writes hls_output/playlist.m3u8 and numbered segments (segment000.ts, …).
DASH Output
use DashOutput;
use Duration;
new
.input
.segment_duration
.build?
.write?;
// Writes dash_output/manifest.mpd and the corresponding segments.
Rendition Ladder
AbrLadder produces multi-rendition HLS or DASH output from a single input. Each Rendition
specifies the output resolution and target bitrate. The ladder owns its own terminal methods:
hls(output_dir) and dash(output_dir).
use ;
new
.add_rendition
.add_rendition
.add_rendition
.hls?;
// Writes hls_output/master.m3u8 plus a numbered sub-directory per rendition.
| Field | Type | Description |
|---|---|---|
width |
u32 |
Output frame width in pixels |
height |
u32 |
Output frame height in pixels |
bitrate |
u64 |
Target video bitrate in bits per second |
Error Handling
| Variant | When it occurs |
|---|---|
StreamError::InvalidConfig |
Missing input, empty ladder, or conflicting options |
StreamError::Encode |
Wrapped EncodeError from a rendition encode stage |
StreamError::Io |
Write failure on the output directory |
MSRV
Rust 1.93.0 (edition 2024).
License
MIT OR Apache-2.0