#传输流 #aac #mpeg #adt #iso-13818-7

adts-reader

Rust 版 Audio Data Transport Stream (ADTS) 帧解析器

3 个版本 (破坏性更新)

0.3.0 2019年7月2日
0.2.0 2019年6月1日
0.1.0 2017年10月13日

#841 in 音频

Download history 428/week @ 2024-03-10 235/week @ 2024-03-17 226/week @ 2024-03-24 325/week @ 2024-03-31 249/week @ 2024-04-07 121/week @ 2024-04-14 94/week @ 2024-04-21 56/week @ 2024-04-28 112/week @ 2024-05-05 209/week @ 2024-05-12 254/week @ 2024-05-19 314/week @ 2024-05-26 52/week @ 2024-06-02 6/week @ 2024-06-09 5/week @ 2024-06-16 22/week @ 2024-06-23

每月88次下载

MIT/Apache

33KB
628

adts-reader

用于承载编码的 AAC 音频数据的 Audio Data Transport Stream 封装格式的 Rust 解析器。

crates.io version Documentation

👉 注意 这不是一个 AAC 解码器,也不能解析 ADTS 有效负载内 AAC 位流的语法。

调用代码应,

  • 提供 AdtsConsumer 的实现,该实现将在找到 ADTS 帧有效负载时接收回调
  • 将包含 ADTS 数据的缓冲区传递到 AdtsParser::push() 方法

增量解析

传递给 push() 的字节切片不必正好结束在 ADTS 帧的边界处。在给定切片末尾剩余的 ADTS 数据将被解析器内部缓冲,并且必须在后续调用 push() 时提供 ADTS 数据的续集。这种结构旨在方便传递常见的包含 ADTS 数据的各个 MPEG 传输流 包的有效负载,而无需付出重新组装整个 PES 包 的代价。

编码器配置

ADTS 帧包含指示 AAC 编码器配置的头数据,该配置将通过提供的 AdtsConsumer::new_config() 实现提供给调用代码。

配置数据在流开始时提供,为了简化调用代码,解析器只有在发现音频配置已更改时才会再次调用 AdtsConsumer::new_config()

支持的 ADTS 语法

  • 固定头字段
    • mpeg_version
    • protection
    • audio_object_type
    • sampling_frequency
    • private_bit
    • channel_configuration
    • originality
    • home
  • 可变头字段数据
    • copyright_identifier / copyright_number - 由于我没有看到任何使用它们的示例位流,因此不支持推导这些值
    • buffer_fullness
    • 块数量
    • crc - 目前不可用(此外,CRC不适用于所有有效载荷字节;循环冗余校验需要解析AAC比特流)
  • AAC有效载荷数据
    • 一个包含完整ADTS帧有效载荷的&[u8]字节切片(根据块数量,可能由一个或多个AAC块组成)

无运行时依赖