Skip to main content

Crate oximedia_packager

Crate oximedia_packager 

Source
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:

VideoAudioSubtitle
AV1OpusWebVTT
VP9VorbisSRT
VP8FLAC

§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-DATERANGE for 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.
PackagerBuilder
Builder for creating a packager with fluent configuration.