6个版本 (破坏性更新)

0.7.0 2023年5月30日
0.6.0 2022年8月8日
0.5.0 2021年6月9日
0.4.0 2020年3月31日
0.2.0 2019年6月1日

#91 in 视频

Download history 663/week @ 2024-03-13 549/week @ 2024-03-20 628/week @ 2024-03-27 648/week @ 2024-04-03 719/week @ 2024-04-10 665/week @ 2024-04-17 353/week @ 2024-04-24 326/week @ 2024-05-01 264/week @ 2024-05-08 313/week @ 2024-05-15 399/week @ 2024-05-22 651/week @ 2024-05-29 322/week @ 2024-06-05 394/week @ 2024-06-12 378/week @ 2024-06-19 250/week @ 2024-06-26

1,446 每月下载量
用于 6 个crate(4个直接使用)

MIT/Apache

220KB
5K SLoC

h264-reader

H264比特流语法的读取器,用Rust编写。

crates.io version Documentation

旨在提供对流元数据的访问;实际上不解码视频。

实现尝试最小化源数据的复制,以提高效率,但代价是更复杂的API

支持的语法

以下列表显示了每个H264语法元素的当前支持状态

  • 字节流格式
    • 附件B格式(例如,在MPEG-TS中)
    • AVCC格式(例如,在MP4中)
  • 网络抽象层单元(NAL单元)
    • slice_layer_without_partitioning_rbsp()
    • slice_data_partition_a_layer_rbsp()
    • slice_data_partition_b_layer_rbsp()
    • slice_data_partition_c_layer_rbsp()
    • slice_layer_without_partitioning_rbsp()
    • sei_rbsp() 补充增强信息 标题 - 支持以下有效负载
      • buffering_period()
      • pic_timing()
      • pan_scan_rect()
      • filler_payload()
      • user_data_registered_itu_t_t35()
      • user_data_unregistered()
      • recovery_point()
      • dec_ref_pic_marking_repetition()
      • spare_pic()
      • scene_info()
      • sub_seq_info()
      • sub_seq_layer_characteristics()
      • sub_seq_characteristics()
      • full_frame_freeze()
      • full_frame_freeze_release()
      • full_frame_snapshot()
      • progressive_refinement_segment_start()
      • progressive_refinement_segment_end()
      • motion_constrained_slice_group_set()
      • film_grain_characteristics()
      • deblocking_filter_display_preference()
      • stereo_video_info()
      • post_filter_hint()
      • tone_mapping_info()
      • 附件G标题
      • 附件H标题
      • 附件I标题
      • 附件J标题
      • frame_packing_arrangement()
      • display_orientation()
      • mastering_display_colour_volume()
      • colour_remapping_info()
      • alternative_transfer_characteristics()
      • alternative_depth_info()
    • seq_parameter_set_rbsp()
    • pic_parameter_set_rbsp()
    • access_unit_delimiter_rbsp()
    • end_of_stream_rbsp()
    • filler_data_rbsp()
    • seq_parameter_set_extension_rbsp()
    • prefix_nal_unit_rbsp()
    • subset_seq_parameter_set_rbsp()
    • depth_parameter_set_rbsp()
    • slice_layer_without_partitioning_rbsp()
    • slice_layer_extension_rbsp()
    • slice_layer_extension_rbsp()

设计目标

避免复制

解析组件可以接受部分数据以避免将数据复制到中间缓冲区。这是为了支持以下常见情况:

  • 嵌入在MPEG-TS数据包中的数据,其中h264数据与MPEG-TS头部数据交织
  • 从网络读取的数据,在任何时刻可用的数据可能是不完整的

接受部分数据的替代方案是取多个部分数据

懒解析

实现应该编写为在调用访问器方法之前延迟解析数据结构。这可能意味着为不关心所有数据的调用者节省解析成本。将这个原则普遍应用可能很困难,所以有些地方我们不必费心,而是直接进行“贪婪解析”(尤其是按位定义的结构,而不是按字节定义的结构)。

依赖项

~760KB