Expand description
Adaptive streaming packaging for OxiMedia.
oximedia-packager provides comprehensive support for packaging media content into
adaptive streaming formats:
- HLS (HTTP Live Streaming): Master playlists, media playlists, TS/fMP4 segments
- DASH (Dynamic Adaptive Streaming over HTTP): MPD manifests, CMAF segments
§Features
- Automatic bitrate ladder generation
- Multi-bitrate variant streams
- Segment creation (TS, fMP4, CMAF)
- Manifest generation (M3U8, MPD)
- Encryption support (AES-128, SAMPLE-AES, CENC)
- Keyframe alignment
- Fast start optimization
- S3/cloud upload integration
- Live and VOD packaging
§Green List Only
Like all OxiMedia crates, only patent-free codecs are supported:
| Video | Audio | Subtitle |
|---|---|---|
| AV1 | Opus | WebVTT |
| VP9 | Vorbis | SRT |
| VP8 | FLAC |
§Example: HLS Packaging
ⓘ
use oximedia_packager::{Packager, PackagerConfig};
use oximedia_packager::config::PackagingFormat;
use std::time::Duration;
// Create configuration
let config = PackagerConfig::new()
.with_format(PackagingFormat::HlsFmp4);
// Create packager
let mut packager = Packager::new(config)?;
// Package video to HLS
packager.package_hls("input.mkv", "output/hls").await?;§Example: DASH Packaging
ⓘ
use oximedia_packager::{Packager, PackagerConfig};
use oximedia_packager::config::PackagingFormat;
let config = PackagerConfig::new()
.with_format(PackagingFormat::Dash);
let mut packager = Packager::new(config)?;
packager.package_dash("input.mkv", "output/dash").await?;§Example: Custom Bitrate Ladder
ⓘ
use oximedia_packager::config::{BitrateEntry, BitrateLadder, PackagerConfig};
let mut ladder = BitrateLadder::new();
// Add 1080p variant
ladder.add_entry(BitrateEntry::new(5_000_000, 1920, 1080, "av1"));
// Add 720p variant
ladder.add_entry(BitrateEntry::new(3_000_000, 1280, 720, "av1"));
// Add 480p variant
ladder.add_entry(BitrateEntry::new(1_500_000, 854, 480, "av1"));
let config = PackagerConfig::new().with_ladder(ladder);§Example: With Encryption
ⓘ
use oximedia_packager::config::{EncryptionConfig, EncryptionMethod, PackagerConfig};
use oximedia_packager::encryption::KeyGenerator;
// Generate encryption key
let key = KeyGenerator::generate_aes128_key();
let iv = KeyGenerator::generate_iv();
let mut encryption = EncryptionConfig::default();
encryption.method = EncryptionMethod::Aes128;
encryption.key = Some(key);
encryption.iv = Some(iv);
encryption.key_uri = Some("https://example.com/key".to_string());
let config = PackagerConfig::new().with_encryption(encryption);Re-exports§
pub use config::BitrateEntry;pub use config::BitrateLadder;pub use config::EncryptionConfig;pub use config::EncryptionMethod;pub use config::OutputConfig;pub use config::PackagerConfig;pub use config::PackagingFormat;pub use config::SegmentConfig;pub use config::SegmentFormat;pub use dash::DashPackager;pub use dash::DashPackagerBuilder;pub use error::PackagerError;pub use error::PackagerResult;pub use hls::HlsPackager;pub use hls::HlsPackagerBuilder;pub use ladder::BitrateLadderGenerator;pub use ladder::LadderGenerator;pub use ladder::LadderRung;pub use ladder::SourceAnalysis;pub use ladder::SourceInfo;pub use multivariant_builder::DashAdaptationSetBuilder;pub use multivariant_builder::HlsMultivariantBuilder;pub use multivariant_builder::MultivariantPlaylistBuilder;pub use variant_stream::StreamCodec;pub use variant_stream::VariantSet;pub use variant_stream::VariantStream;
Modules§
- audio_
track - Multi-audio track support for adaptive streaming packaging.
- bandwidth_
estimator - Bandwidth estimation utilities for adaptive streaming.
- bitrate_
calc - Bitrate calculations and quality metrics for adaptive streaming.
- byte_
range - CMAF byte-range addressing for single-file segment storage.
- cmaf
- CMAF (Common Media Application Format) packaging support.
- cmaf_
byterange - CMAF byte-range addressing for single-file segment storage.
- config
- Configuration types for adaptive streaming packaging.
- content_
boundary - Content-aware segment boundary selection.
- dash
- DASH (Dynamic Adaptive Streaming over HTTP) packaging.
- dash_
event_ stream - DASH event stream support for timed metadata.
- drm_
info - DRM signaling support for the packager.
- drm_
packager - DRM integration for the packager output.
- encryption
- Encryption support for adaptive streaming.
- encryption_
info - Encryption metadata management for adaptive streaming packages.
- error
- Error types for the packager.
- hls
- HLS (HTTP Live Streaming) packaging.
- hls_
interstitial - HLS interstitial support —
EXT-X-DATERANGEfor ad insertion and timed events. - isobmff_
writer - ISOBMFF / CMAF fragmented MP4 writer.
- keyframe_
alignment - Keyframe alignment enforcement across multi-bitrate variants.
- ladder
- Bitrate ladder generation for adaptive streaming.
- low_
latency - Low-latency streaming support (LHLS/LL-DASH).
- manifest
- Common manifest generation utilities.
- manifest_
builder - Manifest building for HLS and DASH adaptive streams.
- manifest_
update - Live manifest update engine for adaptive streaming.
- metadata_
cache - Source file metadata caching for the packaging pipeline.
- multivariant
- Multivariant playlist management for adaptive streaming.
- multivariant_
builder - Multi-variant playlist generation from
VariantStream/VariantSet. - output
- Output management for packaged content.
- packaging_
config - High-level packaging configuration and validation.
- packaging_
optimizer - Intelligent packaging optimisation.
- parallel_
packager - Parallel multi-variant packaging using rayon.
- playlist_
generator - Playlist generation utilities for adaptive streaming.
- pre_
roll - Pre-roll and bumper injection at packaging time.
- pssh
- PSSH (Protection System Specific Header) box generation for DRM systems.
- scene_
segmenter - Scene-aligned segmentation for content-aware packaging.
- segment
- Segment creation for adaptive streaming.
- segment_
index - Segment index for tracking and querying packaged media segments.
- segment_
list - Segment list management for adaptive streaming packagers.
- segment_
naming - Segment file naming strategies and templates for adaptive streaming.
- segment_
timeline - DASH segment timeline and template generation.
- segment_
validator - Segment validation and integrity checking for adaptive streaming.
- ssai
- Server-Side Ad Insertion (SSAI) markers and manifest manipulation.
- streaming_
output - Streaming segment output — write segments as they are produced rather than buffering entire files in memory.
- subtitle_
track - Subtitle track packaging for adaptive streaming.
- thumbnail_
track - Thumbnail / trick-play track generation for adaptive streaming.
- timed_
metadata - Timed metadata support for adaptive streaming (ID3, EMSG, SCTE-35, event streams).
- variant_
stream - Variant stream management for multi-bitrate adaptive packaging.
Structs§
- Packager
- Main packager for adaptive streaming.
- Packager
Builder - Builder for creating a packager with fluent configuration.