Klv Stream Injector


KlvStreamInjectorProc is a command line utility that adds MISB 0601.X metadata to transport streams sent over UDP (online processing) or to TS files (offline processing)
The metadata source can be RAW Klv or Json packets sent over Udp or .csv / .json / .bin files.

STANAG 4609 metadata injector.

Klv Stream Injector

Main features

  • Insert RAW Klv packets (file / UDP / REST) into TS over UDP streams.
  • Insert Klv metadata from .csv / .json / .bin files into TS file (offline processing)
  • Encode video captured with frame grabber and add Klv metadata. Low latency support.
  • MISB 0601 (with nested MISB 0102 and MISB 0903 VMTI) on-the-fly encoding from JSON formatted packet
  • Network and file targets (simultaneous streaming and recording to file).
  • Video flywheel generator
  • Automation over REST
  • Video preview
  • Data preview (real time) with StMonitor

User Guide

Input parameters:

Short Command Description
-i --input Input url. For example: udp:// To specify the network interface, add nic argument: udp://
-c --captureDevice Input Video capture device name or id returned by List capture devices call
--audioCaptureDevice Input Audio capture device name or id returned by List capture devices call
-o --output Output url (network). For example, udp:// To specify the NIC, add nic argument: udp://
-f --file File target Output url.
-u --udpIn UDP Input url. The Injector will insert RAW KLV packets received at this url.
-j --jsonUdpIn UDP Input url. The Injector will insert JSON packets received at this url.
-d --dataUdpIn UDP Input url. The Injector will insert private data bin packets received at this url.
--dataFileIn Data file for offline processing.
--klvPid Klv Pid. If Klv is found in the stream, it's Pid number will be used. If not present and not provided, 0X1F1 will be used
--dataPid Private data Pid, if needs to be inserted.
-a --autostart Start processing immediately, without user prompt.
-p --packet Default Klv packet to insert. Can be either RAW Klv or Json.
-t --insertionInterval Klv insertion interval (for default packet). If set to 0 (default), will be inserted with every frame.
--existingKlv Defines what to do with existing klv data. : keep = 0, drop = 1. Default - keep.
-v --video Show video during processing. Default - false.
--maxDelay Max sync delay. Max delay between the video and klv.
--caching Network caching. Increase the value if the network stream has jitter. Decrease, to lower the latency.
--id Id. Application specific Id. Used for Ddp identification.
--firstKlvDateTime First Klv Date Time (ISO8601). If not set, existing klv time will be used, or if no is klv present - current DateTime will be set as the first Klv time.
--captureMode Capture Mode: 0 (Compressed) / 1 Uncompressed / 2 (Extracted Klv). Default: 0 (Compressed).
--syncKlvMode SyncKlv Mode. Default - false (generates ASYNC KLV).
--ddp Optional DDP (Meteor) url.
--transcodeMisb104 Transcode Misb 104.5 to Misb 601
--flywheelInfoFile A path to file that describes the input stream info (video, klv, audio etc) to be used for synthetic stream generation (flywheel). The file is created upon valid input detection. It is then used when the injector is started without a source.
--flywheelInfoReadOnly If set to true, the file flywheelInfoFile will not be updated when a valid source is detected. This can be used in case the info XML is created manually and should be used for all input streams.
--flywheelVideoFrameFile A path to a Bitmap file (with extension .bmp) or H.264 IDR frame, preceded by sps+pps (with extension .mpv or .mpg). More info \ref pageFlywheel.
--frameResolution Frame resolution - 'Width'x'Heigth'. Default 720x480.
--videoFrameType Video Frame Type: -1 (NONE), 0 (RGB24), 1 (RGB32), 2 (YV12)
--inputFramesRecordingPath Path for recording of incoming frames. If extension set to .bin - records raw data. If set to bmp, saves bitmaps, but only if the internal data comes as RGB
--encodingResolution Frame resolution - 'Width'x'Heigth'. Default is the source resolution.
-b --bitrate Encoding bitrate (in KBit/s). Default 2000.
--framerate Frame rate. Default 30.
--encodingProfile Baseline = 0, HighProfile = 1, MainProfile = 2. Default 0 (baseline)
--lowLatencyMode Set low latency mode. Default - false
--restSelfHost Rest Self Host url. Can be used for remote control of KlvStreamInjector.
--licenseFile License File path. If not set, Injector will try to load KlvInjector.lic file in Application.StartupPath directory.
--licenseKey License key.
--silent Set silent mode.
-? --help Help.


  • S - Start Processing
  • P - Pause Processing
  • E - Stop Processing
  • I - Show incoming Klvs. Launch StMonitor.
  • O - Show inserted Klvs. Launch StMonitor.
  • D - Show CC detection
  • C - Select Capture Device
  • N - Show NodeInfo
  • H - Show arguments
  • Q - Quit


No license is needed for application evaluation - it will work in demo mode (with some restrictions - like a maximum limit on the number of processed packets and support for only lower tags (<15) ).

KlvStreamInjector is a node-locked software, so you have to get a license (after purchasing the SW) in order to lift demo restrictions. Please install it and fill out an online form, providing the Node Info string (IMPORTANT!!!) for the target machine.
Node Info string can be seen when you run the application (or press N - Show NodeInfo), as shown below.

C:\Program Files\ImpleoTV\KlvStreamInjector\Bin\x64\KlvStreamInjectorProc.exe

NodeInfo string Please copy-paste Node Info, don't send an image...

You'll receive a license file (or a license file and a key, for older versions).

To run KlvStreamInjector with the license, pass --licenseFile (with the full path) or a --licenseFile and --licenseKey (with the string found in the .Key.txt file) arguments, for older versions). If the license file path contains spaces, use quotes "C:\Program Files ....".

For example:

 --licenseFile "D:\Impleo\Licenses\KlvStreamInjector.lic"

Or, for older versions:

 --licenseFile "D:\Impleo\Licenses\KlvStreamInjector.lic"  --licenseKey DDD8460B-8419FF85-0B36C1B5-3FC6143C

If a license file is in the same directory as the .exe, you can skip the path.

License arguments are persistent, so you should provide them only once.

System Requirements

OS: Windows 10/11 64 bit.