#传感器 #gopro #地理空间 #英雄

nightly gpmf

正在开发中的 gpmf 实现

3 个版本

0.1.2 2023 年 3 月 25 日
0.1.1 2023 年 3 月 25 日
0.1.0 2023 年 3 月 22 日

#2149 in 解析器实现

每月 31 次下载

MIT/Apache

44KB
561 代码行

gpmf

GoPro 元数据格式(GPMF)的解析器和编写器

正在开发中:目前成功解析所有原始测试数据并记录结果。

设计目标

  • Linux 哲学,每个工具只做一件事,并且做好
  • 可以集成到其他工具中,以及除 Rust 以外的其他语言
  • 关注清洁、易于理解的代码(无宏)
  • 性能良好(但不以牺牲前一项为代价)
  • 易于阅读详细日志,以便能够调试问题
  • 内存安全解析器
  • 零安全漏洞。避免其他工具中发现的错误,例如:GoPro GPMF-parser 漏洞
  • 从不生成异常,即:不应引发恐慌。
  • 应通过模糊测试,即:处理损坏或垃圾数据
  • 应避免 DOS 攻击。可能添加最大缓冲区长度。
  • 优雅地恢复错误
  • 处理未知标签
  • 往返传感器数据(不丢失精度或更改数据类型)

报告问题

如果您有无法处理的文件,请提交问题,并附加原始元数据文件

功能路线图

  • 解析器(正在开发中)目前仅打印数据
  • 创建一个用于保存数据的结构
  • 处理缩放
  • 处理多个传感器数据 'mp4 boxes/atoms',如 mp4 文件中包含的
  • 使用迭代器和锦标赛树按时间顺序返回数据
  • 通过 WiFi 和 Rtmp Url 在实时中提取直播流中的元数据
  • 处理图像中的 EXIF 数据
  • 编写器
  • 往返传感器数据

示例

use std::path::Path;
use gpmf::byteorder_gpmf::parse_gpmf;

fn main() -> anyhow::Result<()> {
    let path = Path::new("samples/karma.raw");
    let text = std::fs::read(path)?;
    let res=parse_gpmf(text.as_slice())?;
    println!("{:?}",res);
    Ok(())
}

带有日志的示例

use std::path::Path;
use gpmf::byteorder_gpmf::parse_gpmf;
use tracing::Level;
use tracing_subscriber::FmtSubscriber;

fn main() -> anyhow::Result<()> {
    let subscriber = FmtSubscriber::builder()
        .with_max_level(Level::DEBUG)
        .finish();
    tracing::subscriber::set_global_default(subscriber)?;

    let path = Path::new("samples/Fusion.raw");
    let text = std::fs::read(path)?;
    let res=parse_gpmf(text.as_slice())?;
    println!("{:?}",res);
    Ok(())
}

许可:MIT 或 Apache-2.0

依赖项

~6–12MB
~137K SLoC