access_unit/
lib.rs

1use bytes::Bytes;
2
3pub mod aac;
4pub mod chunk;
5pub mod flac;
6pub mod h264;
7
8pub const PSI_STREAM_MP3: u8 = 0x04; // ISO/IEC 13818-3 Audio
9pub const PSI_STREAM_PRIVATE_DATA: u8 = 0x06;
10pub const PSI_STREAM_H264: u8 = 0x1b; // H.264
11pub const PSI_STREAM_AAC: u8 = 0x0f;
12pub const PSI_STREAM_MPEG4_AAC: u8 = 0x1c;
13pub const PSI_STREAM_AUDIO_OPUS: u8 = 0x9c;
14
15#[derive(Debug, Clone, Copy, PartialEq)]
16pub enum AudioType {
17    Unknown,
18    AAC,
19    FLAC,
20    Opus,
21}
22
23#[derive(Debug, Clone)]
24pub struct Fmp4 {
25    pub init: Option<Bytes>,
26    pub key: bool,
27    pub data: Bytes,
28    pub duration: u32,
29}
30
31#[derive(Debug, Clone)]
32pub struct AccessUnit {
33    pub key: bool,
34    pub pts: u64,
35    pub dts: u64,
36    pub data: Bytes,
37    pub stream_type: u8,
38    pub id: u64,
39}
40
41pub fn detect_audio(data: &[u8]) -> AudioType {
42    if flac::is_flac(data) {
43        AudioType::FLAC
44    } else if aac::is_aac(data) {
45        AudioType::AAC
46    } else {
47        AudioType::Unknown
48    }
49}