Skip to main content

A Python library for parsing MISB/STANAG 4609 Key Length Value (KLV) metadata.

Project description

https://travis-ci.org/paretech/klvdata.svg?branch=master https://coveralls.io/repos/github/paretech/klvdata/badge.svg?branch=master https://img.shields.io/pypi/v/klvdata.svg

What?

Klvdata is a Python library for parsing and constructing Key Length Value (KLV) formatted binary streams. Common uses of the library would be parsing and displaying MISB ST 0601 Unmanned Air System (UAS) metadata from STANAG 4609 compliant MPEG-2 Transport Streams (TS) (MPEG-TS). Note that klvdata alone cannot de-mux KLV data from an MPEG-2 TS, but programs like FFmpeg and GStreamer can be used with klvdata in the workflow to perform the function.

Why?

Not many opensource options available.

Features

  • Parses KLV metadata streams.

  • Supports MISB ST 0601 UAS Datalink Local Set.

  • Supports MISB ST 0102 Security Metadata Local Set.

  • Built for Python >= 3.5

  • Requires no external Python dependencies.

Quick Start

Try these commands in your GNU/Linux terminal.

First:

$ pip3 install klvdata

$ wget https://raw.githubusercontent.com/paretech/klvdata/master/data/DynamicConstantMISMMSPacketData.bin

$ cat << EOF > klvdata_test.py
#!/usr/bin/env python3
import sys, klvdata;
for packet in klvdata.StreamParser(sys.stdin.buffer.read()): packet.structure()
EOF

And then:

$ python3 ./klvdata_test.py < DynamicConstantMISMMSPacketData.bin

    <class 'klvdata.misb0601.UASLocalMetadataSet'>
        <class 'klvdata.misb0601.PrecisionTimeStamp'>
        <class 'klvdata.misb0601.MissionID'>
        <class 'klvdata.misb0601.PlatformHeadingAngle'>
        <class 'klvdata.misb0601.PlatformPitchAngle'>
        <class 'klvdata.misb0601.PlatformRollAngle'>
        <class 'klvdata.misb0601.PlatformDesignation'>
        <class 'klvdata.misb0601.ImageSourceSensor'>
        <class 'klvdata.misb0601.ImageCoordinateSystem'>
        <class 'klvdata.misb0601.SensorLatitude'>
        <class 'klvdata.misb0601.SensorLongitude'>
        <class 'klvdata.misb0601.SensorTrueAltitude'>
        <class 'klvdata.misb0601.SensorHorizontalFieldOfView'>
        <class 'klvdata.misb0601.SensorVerticalFieldOfView'>
        <class 'klvdata.misb0601.SensorRelativeAzimuthAngle'>
        <class 'klvdata.misb0601.SensorRelativeElevationAngle'>
        <class 'klvdata.misb0601.SensorRelativeRollAngle'>
        <class 'klvdata.misb0601.SlantRange'>
        <class 'klvdata.misb0601.TargetWidth'>
        <class 'klvdata.misb0601.FrameCenterLatitude'>
        <class 'klvdata.misb0601.FrameCenterLongitude'>
        <class 'klvdata.misb0601.FrameCenterElevation'>
        <class 'klvdata.misb0102.SecurityLocalMetadataSet'>
            <class 'klvdata.misb0102.SecurityClassification'>
            <class 'klvdata.misb0102.UnknownElement'>
            <class 'klvdata.misb0102.UnknownElement'>
            <class 'klvdata.misb0102.UnknownElement'>
            <class 'klvdata.misb0102.UnknownElement'>
            <class 'klvdata.misb0102.UnknownElement'>
        <class 'klvdata.misb0601.UASLSVersionNumber'>
        <class 'klvdata.misb0601.UnknownElement'>
        <class 'klvdata.misb0601.Checksum'>

If you have FFmpeg installed and want to try it on real video from a drone with embedded KLV metadata (~97 MB Download):

$ wget http://samples.ffmpeg.org/MPEG2/mpegts-klv/Day%20Flight.mpg
$ ffmpeg -i Day\ Flight.mpg -map data-re -codec copy -f data - | python3 ./klvdata_test.py

    <class 'klvdata.misb0601.UASLocalMetadataSet'>
        <class 'klvdata.misb0601.PrecisionTimeStamp'>
        <class 'klvdata.misb0601.UASLSVersionNumber'>
        <class 'klvdata.misb0601.PlatformHeadingAngle'>
        <class 'klvdata.misb0601.PlatformPitchAngle'>
        <class 'klvdata.misb0601.PlatformRollAngle'>
        <class 'klvdata.misb0601.ImageSourceSensor'>
        <class 'klvdata.misb0601.ImageCoordinateSystem'>
        <class 'klvdata.misb0601.SensorLatitude'>
        <class 'klvdata.misb0601.SensorLongitude'>
        <class 'klvdata.misb0601.SensorTrueAltitude'>
        <class 'klvdata.misb0601.SensorHorizontalFieldOfView'>
        <class 'klvdata.misb0601.SensorVerticalFieldOfView'>
        <class 'klvdata.misb0601.SensorRelativeAzimuthAngle'>
        <class 'klvdata.misb0601.SensorRelativeElevationAngle'>
        <class 'klvdata.misb0601.SensorRelativeRollAngle'>
        <class 'klvdata.misb0601.SlantRange'>
        <class 'klvdata.misb0601.TargetWidth'>
        <class 'klvdata.misb0601.FrameCenterLatitude'>
        <class 'klvdata.misb0601.FrameCenterLongitude'>
        <class 'klvdata.misb0601.FrameCenterElevation'>
        <class 'klvdata.misb0601.TargetLocationLatitude'>
        <class 'klvdata.misb0601.TargetLocationLongitude'>
        <class 'klvdata.misb0601.TargetLocationElevation'>
        <class 'klvdata.misb0601.PlatformGroundSpeed'>
        <class 'klvdata.misb0601.GroundRange'>
        <class 'klvdata.misb0601.Checksum'>

        [...]

Documentation

Documentation is available at https://paretech.github.io/klvdata.

Contributing

Contributions are welcome! See Contributing for details.

Contributors List:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

klv_parser-0.0.6.tar.gz (32.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

klv_parser-0.0.6-py3-none-any.whl (31.3 kB view details)

Uploaded Python 3

File details

Details for the file klv_parser-0.0.6.tar.gz.

File metadata

  • Download URL: klv_parser-0.0.6.tar.gz
  • Upload date:
  • Size: 32.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.23

File hashes

Hashes for klv_parser-0.0.6.tar.gz
Algorithm Hash digest
SHA256 ff2169e18674d466f84ef79bd4ecd3017f7970c6a26622350e86f03e223e6f2c
MD5 6d8ad6835f99f5e9e914c530f4d584e8
BLAKE2b-256 62cae9e97039e74fab6e9f10e88815e414b7cbf8bab3c0cd7a802a844a6c8e82

See more details on using hashes here.

File details

Details for the file klv_parser-0.0.6-py3-none-any.whl.

File metadata

  • Download URL: klv_parser-0.0.6-py3-none-any.whl
  • Upload date:
  • Size: 31.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.23

File hashes

Hashes for klv_parser-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 99c3ac205d120bb9b05cb216372e7db01d0e1e111ac2ea7c19de4853a0356449
MD5 69f8296f80392a37bd26134c15ac05c6
BLAKE2b-256 8046dd60e534ac82fc2fdbf2856d0dfb8c0fa85fa1516f9aca7b498128cd47cd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page