3 个版本
0.1.2 | 2023 年 3 月 25 日 |
---|---|
0.1.1 | 2023 年 3 月 25 日 |
0.1.0 | 2023 年 3 月 22 日 |
#2149 in 解析器实现
每月 31 次下载
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