Expand description
A pure Rust implementation of the H.264 (header only) builder and parser.
This crate is designed to provide a simple and safe interface to build and parse H.264 headers.
See the changelog for a full release history.
§Feature flags
docs
— Enables changelog and documentation of feature flags
§Examples
§Parsing
use std::io;
use bytes::Bytes;
use scuffle_h264::{AVCDecoderConfigurationRecord, Sps};
// A sample h264 bytestream to parse
// Parsing
let result = AVCDecoderConfigurationRecord::parse(&mut io::Cursor::new(bytes)).unwrap();
// Do something with it!
// You can also parse an Sps from the Sps struct:
let sps = Sps::parse_with_emulation_prevention(io::Cursor::new(&result.sps[0]));
For more examples, check out the tests in the source code for the parse function.
§Building
use bytes::Bytes;
use scuffle_h264::{AVCDecoderConfigurationRecord, AvccExtendedConfig, Sps, SpsExtended};
let extended_config = AvccExtendedConfig {
chroma_format_idc: 1,
bit_depth_luma_minus8: 0,
bit_depth_chroma_minus8: 0,
sequence_parameter_set_ext: vec![SpsExtended {
chroma_format_idc: 1,
separate_color_plane_flag: false,
bit_depth_luma_minus8: 2,
bit_depth_chroma_minus8: 3,
qpprime_y_zero_transform_bypass_flag: false,
scaling_matrix: vec![],
}],
};
let config = AVCDecoderConfigurationRecord {
configuration_version: 1,
profile_indication: 100,
profile_compatibility: 0,
level_indication: 31,
length_size_minus_one: 3,
sps: vec![
Bytes::from_static(b"spsdata"),
],
pps: vec![Bytes::from_static(b"ppsdata")],
extended_config: Some(extended_config),
};
// Creating a buffer to store the built bytestream
let mut built = Vec::new();
// Building
config.build(&mut built).unwrap();
// Do something with it!
For more examples, check out the tests in the source code for the build function.
§License
This project is licensed under the MIT or Apache-2.0 license. You can choose between one of them if you use this work.
SPDX-License-Identifier: MIT OR Apache-2.0
Modules§
- changelog
- Changelogs generated by [scuffle_changelog]
Structs§
- AVCDecoder
Configuration Record - The AVC (H.264) Decoder Configuration Record. ISO/IEC 14496-15:2022(E) - 5.3.2.1.2
- Avcc
Extended Config - The AVC (H.264) Extended Configuration. ISO/IEC 14496-15:2022(E) - 5.3.2.1.2
- NALUnit
Type - NAL (Network Abstraction Layer) unit types as defined by ISO/IEC 14496-10:2022 (Table 7-1).
- Aspect
Ratio Idc - The
AspectRatioIdc
is a nutype enum foraspect_ratio_idc
as defined in ISO/IEC-14496-10-2022 - E.2.1 Table E-1. - Video
Format - The
VideoFormat
is a nutype enum forvideo_format
as defined in ISO/IEC-14496-10-2022 - E.2.1 Table E-2. - SpsExtended
- The Sequence Parameter Set extension. ISO/IEC-14496-10-2022 - 7.3.2
- Timing
Info TimingInfo
contains the fields that are set whentiming_info_present_flag == 1
.- Sps
- The Sequence Parameter Set. ISO/IEC-14496-10-2022 - 7.3.2