#transport-stream #parser #packet-parser #video-stream #unmanned-aerial-vehicles #klv #uas

klv-uas

一个简单的库,用于从原始数据解析UAS KLV数据

2个版本

0.1.1 2024年7月29日
0.1.0 2024年7月29日

75视频

Download history 278/week @ 2024-07-28 5/week @ 2024-08-04

每月283次下载

MIT许可证

40KB
533

klv-uas

Crates.io Total Downloads docs.rs Crates.io Version GitHub Repo stars Crates.io License

一个用于从传输流数据包有效载荷中提取KLV数据的库。此库不旨在用于将KLV数据注入视频流。

警告

当前,您必须启用功能 ignore_incomplete。我希望用户了解,一些数据类型还无法正确解析,因此他们必须手动允许此操作。

示例

extern crate klv_uas;

use std::env;
use klv_uas::tag::Tag;
use ts_analyzer::reader::TSReader;
use std::fs::File;
use std::io::BufReader;
use klv_uas::klv_packet::KlvPacket;

fn main() {
  env_logger::init();
  let filename = env::var("TEST_FILE").expect("Environment variable not set");

  let f = File::open(filename.clone()).expect("Couldn't open file");
  let buf_reader = BufReader::new(f);
  let mut reader = TSReader::new(&*filename, buf_reader).expect("Transport Stream file contains no SYNC bytes.");

  reader.add_tracked_pid(258);

  let klv;
  loop {
    // Get a payload from the reader. The `unchecked` in the method name means that if an error
    // is hit then `Some(payload)` is returned rather than `Ok(Some(payload))` in order to reduce
    // `.unwrap()` (or other) calls.
    let payload = match reader.next_payload() {
      Ok(payload) => payload.expect("Payload is None"),
      Err(e) => panic!("Could not get payload due to error: {}", e),
    };

    // Try to parse a UAS LS KLV packet from the payload that was found. This will likely only
    // work if you have the `search` feature enabled as the UAS LS KLV record does not start at
    // the first byte of the payload.
    klv = match KlvPacket::from_bytes(payload) {
      Ok(klv) => klv,
      Err(e) => {
        continue
      },
    };

    break
  }

  println!("Timestamp of KLV packet: {:?}", klv.get(Tag::PrecisionTimeStamp).unwrap());
}

目标

  • 支持解析KLV字段的所有值类型。
    • int
    • int8
    • int16
    • int32
    • uint
    • uint8
    • uint16
    • uint32
    • uint64
    • IMAPB
    • Byte
    • DLP
    • VLP
    • FLP
    • Set
    • UTF8
  • 支持将所有类型的KLV值转换为实际值。
    • 例如,将KLV标签5(平台航向角)转换为由KLV值中存储的整数值表示的实际浮点角度。

测试

TEST_FILE="$HOME/Truck.ts"cargo run--特性搜索--示例 klv_timestamp


参考资料

  • 有关包含KLV数据的TS流的示例,请访问此处
  • 有关KLV元数据的标准,请访问此处。找到 MISB ST 0107.X 并单击 文件。当前链接为此处,但可能会更改。
  • UAS Datalink Local Set 的标准可以在这里找到。找到 MISB ST 0601.X 并点击 文件。当前链接为这里,但可能会更改。

依赖关系

~1.2–1.7MB
~41K SLoC