Skip to content

Announcements

Flex Video can automatically announce video streams to tactical systems, enabling seamless integration with ATAK, TAK Server, Lattice, and local network discovery.

Overview

When a pipeline starts playing, Flex Video can announce it to:

System Protocol Discovery
CoT/ATAK Multicast UDP Local network
TAK Server HTTPS REST API Enterprise
Lattice HTTPS REST API Cloud/Enterprise
mDNS Bonjour/Avahi Local network

CoT/ATAK Announcements

Cursor on Target (CoT) announcements allow ATAK, WinTAK, and iTAK clients to discover video streams on the local network.

How It Works

  1. Pipeline reaches PLAYING state
  2. CoT XML message is multicast to 239.2.3.1:6969
  3. TAK clients receive the message and display a video marker
  4. Periodic updates (every 5 seconds) keep the marker fresh

Enabling CoT

CoT announcements are enabled by default. To disable:

  1. Go to Settings in the web interface
  2. Toggle CoT Announcements off

Or via API:

curl -X PUT http://localhost:3539/flex/settings \
  -H "Content-Type: application/json" \
  -d '{"cot_enabled": false}'

CoT Metadata

Customize CoT announcements using pipeline metadata with the cot_ prefix:

"metadata": {
  "cot_type": "b-m-p-s-p-loc"
}
Key Type Description Default
cot_type string CoT event type code b-m-p-s-p-loc (sensor point)

CoT Type Codes

The cot_type field specifies the CoT event type, which determines how the marker appears in TAK applications. Common types:

Type Code Description
b-m-p-s-p-loc Sensor point location (default)
a-f-G-U-C Friendly ground unit (combat)
a-f-G-U-C-I Friendly ground unit infantry
a-f-A-M-F-Q Friendly air military fixed-wing UAV
a-n-G Neutral ground track
a-h-G Hostile ground track

Type Code Structure:

Position:    1   2   3   4   5   6   7
Example:     a - f - G - U - C - I
             │   │   │   │   │   │
             │   │   │   │   │   └─ Additional specifier
             │   │   │   │   └─ Function (C=Combat, R=Recon)
             │   │   │   └─ Unit type
             │   │   └─ Battle dimension (G=Ground, A=Air, S=Sea)
             │   └─ Affiliation (f=Friend, h=Hostile, n=Neutral, u=Unknown)
             └─ Atom type (a=Unit, b=Bits/location)

For complete type code reference, see the CoT Event Type Documentation

Viewing in ATAK

  1. Ensure ATAK is on the same network
  2. Start a pipeline with geolocation configured
  3. The video marker appears on the ATAK map
  4. Tap the marker to view stream details
  5. Tap "Play" to open the video feed

TAK Server Integration

TAK Server integration provides enterprise-grade video distribution through a central server. Unlike CoT multicast which only works on local networks, TAK Server enables video sharing across subnets and the internet.

When to Use TAK Server

Scenario CoT Multicast TAK Server
Local network, same subnet Works Optional
Multiple subnets Limited Required
Remote clients via internet No Required
Persistent video feed registry No Yes
Cross-organization sharing No Yes

Configuration

TAK Server uses mutual TLS (mTLS) for authentication. You'll need a client certificate from your TAK Server administrator.

  1. Go to Settings > TAK Server
  2. Enter the TAK Server URL (e.g., https://takserver.example.com:8443)
  3. Upload your client certificate (.p12 file)
  4. Enter the certificate password
  5. Optionally upload a CA truststore (if using a private CA)
  6. Set a public IP if behind NAT
  7. Click Save

Or via API:

curl -X PUT http://localhost:3539/flex/settings \
  -H "Content-Type: application/json" \
  -d '{
    "tak_server_url": "https://takserver.example.com:8443",
    "tak_server_cert_base64": "<base64-encoded-.p12>",
    "tak_server_cert_password": "your-password",
    "tak_server_truststore_base64": "<base64-encoded-truststore>",
    "tak_server_truststore_password": "truststore-password",
    "tak_server_public_ip": "203.0.113.42"
  }'

TAK Server Settings Reference

Setting Required Description
tak_server_url Yes TAK Server API URL (e.g., https://takserver.example.com:8443)
tak_server_cert_base64 Yes Client certificate (.p12) as base64
tak_server_cert_password Yes Password for the client certificate
tak_server_truststore_base64 No CA truststore (.p12) as base64 for private CAs
tak_server_truststore_password No Password for the truststore
tak_server_public_ip No Public IP override for RTSP URLs (required if behind NAT)

Getting Certificates

  1. Log in to your TAK Server admin console (https://<takserver>:8443/Marti)
  2. Go to User Management > Generate Certificate
  3. Download the generated .p12 file and note the password
  4. If using a private CA, also download the truststore

TAK Server Metadata

Customize TAK Server announcements using pipeline metadata with the tak_ prefix:

"metadata": {
  "tak_alias": "Main Entrance Camera"
}
Key Type Description Default
tak_alias string Video feed display name in TAK Server and clients Pipeline ID

Supported Output Schemes

TAK Server announcements only work with RTSP streams:

Scheme Supported
rtsp://
rtsps://
udp://
srt://
rtmp://

Lattice Integration

Lattice provides cloud-based situational awareness with video streaming support. When configured, Flex Video automatically creates and updates entities in Lattice with video stream information.

For complete API documentation and ontology reference, see the Anduril Developer Documentation.

Configuration

  1. Go to Settings > Lattice
  2. Enter the Lattice host (without https://)
  3. Enter your environment API token
  4. Optionally enter a sandbox token for development
  5. Set a public IP if behind NAT
  6. Click Save

Or via API:

curl -X PUT http://localhost:3539/flex/settings \
  -H "Content-Type: application/json" \
  -d '{
    "lattice_host": "lattice.example.com",
    "lattice_token": "your-api-token",
    "lattice_sandbox_token": "your-sandbox-token",
    "lattice_public_ip": "203.0.113.42"
  }'
Setting Required Description
lattice_host Yes Lattice instance hostname (without https://)
lattice_token Yes Environment-level API token for Bearer authentication
lattice_sandbox_token No Account-level sandbox token (enables sandbox mode)
lattice_public_ip No Override auto-detected IP for RTSP URLs (required if behind NAT)

Lattice Metadata Reference

Customize Lattice entity properties using metadata keys prefixed with lattice_. All keys are optional.

"metadata": {
  "lattice_title": "Entrance Camera",
  "lattice_camera_name": "CAM-001",
  "lattice_modality": "EO",
  "lattice_disposition": "FRIENDLY",
  "lattice_environment": "LAND",
  "lattice_nationality": "USA",
  "lattice_platform_type": "Video Sensor",
  "lattice_mil_std_2525_symbol": "SFGPUCSR-------"
}

Metadata Keys

Key Type Description Default
lattice_title string Video stream title displayed in Lattice Flex Video - {pipelineId}
lattice_camera_name string Camera/sensor name Pipeline ID
lattice_entity_id string Associate with an existing Lattice entity instead of creating a new one Auto-generated (flex-video-{pipelineId})
lattice_platform_type string Ontology platform type Video Sensor
lattice_disposition string Friend/foe identity classification PENDING
lattice_environment string Operating environment/domain (none)
lattice_nationality string Country or alliance affiliation (none)
lattice_modality string Sensor modality type EO
lattice_mil_std_2525_symbol string MIL-STD-2525C symbol identification code (SIDC) (none)

Disposition Values

Disposition indicates the friend/foe classification of the entity. See the Anduril Developer Documentation for the complete ontology reference.

Value Aliases Description
FRIENDLY FRIEND Allied or own forces
HOSTILE ENEMY Enemy forces
NEUTRAL - Non-aligned entity
SUSPECT SUSPICIOUS Potentially hostile, requires further identification
ASSUMED_FRIENDLY - Likely friendly but not confirmed
PENDING - Unknown, awaiting identification (default)

Environment Values

Environment specifies the operating domain of the entity.

Value Aliases Description
AIR - Airborne platform (aircraft, UAV, helicopter)
LAND GROUND Land-based platform (vehicle, fixed installation)
SURFACE SEA Water surface platform (ship, boat)
SUB_SURFACE SUBSURFACE, UNDERWATER Underwater platform (submarine, UUV)
SPACE - Space-based platform (satellite)

Nationality Values

Nationality identifies the country or alliance affiliation. Common values include:

Value Aliases Description
USA US, UNITED_STATES, UNITED_STATES_OF_AMERICA United States of America
UK GB, UNITED_KINGDOM, GREAT_BRITAIN United Kingdom
NATO - North Atlantic Treaty Organization
AUSTRALIA AU, AUS Australia
CANADA CA, CAN Canada
FRANCE FR, FRA France
GERMANY DE, DEU Germany
ISRAEL IL, ISR Israel
ITALY IT, ITA Italy
JAPAN JP, JPN Japan
SOUTH_KOREA KOREA, REPUBLIC_OF_KOREA, KR, KOR Republic of Korea
POLAND PL, POL Poland
TAIWAN TW, TWN Taiwan
UKRAINE UA, UKR Ukraine

Values are case-insensitive and spaces are normalized. For the complete list of supported nationalities, see the Anduril Developer Documentation.

Modality Values

Modality specifies the sensor type used to capture the video stream.

Value Aliases Description
EO - Electro-optical (visible light camera) - default
LWIR IR Long-wave infrared (thermal imaging, 8-14 μm)
MWIR - Mid-wave infrared (3-5 μm)
SWIR - Short-wave infrared (1-3 μm)
SAR - Synthetic aperture radar
RV_MAP - Rendered view / map overlay

MIL-STD-2525 Symbol Codes

The lattice_mil_std_2525_symbol key accepts a 15-character Symbol Identification Code (SIDC) following the MIL-STD-2525C standard. This enables military symbology display in Lattice.

SIDC Structure:

Position:  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
Example:   S   F   G   P   U   C   S   R   -   -   -   -   -   -   -
           │   │   │   │   └───────────────┴───────────────────────┘
           │   │   │   │         Function ID + Modifiers
           │   │   │   └─ Battle Dimension (G=Ground, A=Air, S=Sea)
           │   │   └─ Category
           │   └─ Affiliation (F=Friend, H=Hostile, N=Neutral, U=Unknown)
           └─ Coding Scheme (S=Warfighting)

Common Examples:

SIDC Description
SFGPUCSR------- Friendly ground reconnaissance unit
SFGPUCVRA------ Friendly ground armored reconnaissance
SHGPUCFM------- Hostile ground mechanized unit
SUGPUCI-------- Unknown ground infantry unit
SFAPMFQ-------- Friendly air fixed-wing UAV

For complete symbol code reference, consult MIL-STD-2525C documentation.

Using External Entities

When lattice_entity_id is provided, Flex Video associates the video stream with an existing Lattice entity instead of creating a new one:

"metadata": {
  "lattice_entity_id": "existing-entity-uuid-12345",
  "lattice_title": "UAV Feed",
  "lattice_modality": "LWIR"
}

Behavior with external entity:

  • Video ingress is attached to the specified entity
  • Entity creation/updates are skipped (entity is managed externally)
  • Entity is not marked as "not live" when the stream stops

This is useful when video streams should be attached to entities created by other systems (e.g., a UAV platform publishing its own entity).

Supported Output Schemes

Lattice announcements only work with RTSP streams:

Scheme Supported
rtsp://
rtsps://
udp://
srt://
rtmp://

Complete Example

{
  "id": "perimeter-cam-1",
  "mode": "simple",
  "on_demand": false,
  "source": {
    "uri": "file:///dev/video0"
  },
  "encoding": {
    "width": 1920,
    "height": 1080,
    "fps": 30,
    "bitrate": 2000,
    "codec": "h264"
  },
  "output": {
    "uri": "rtsp://localhost:8554/perimeter-cam-1"
  },
  "geolocation": {
    "latitude": 37.7749,
    "longitude": -122.4194,
    "altitude": 15.0,
    "heading": 90.0,
    "is_dynamic": false
  },
  "metadata": {
    "lattice_title": "Perimeter Camera North",
    "lattice_camera_name": "CAM-NORTH-01",
    "lattice_modality": "EO",
    "lattice_disposition": "FRIENDLY",
    "lattice_environment": "LAND",
    "lattice_nationality": "USA",
    "lattice_platform_type": "Video Sensor",
    "lattice_mil_std_2525_symbol": "SFGPUCSR-------"
  }
}

mDNS Announcements

mDNS (Bonjour/Avahi) enables local network discovery without multicast CoT.

mDNS Metadata

"metadata": {
  "mdns_name": "Lobby Camera"
}
Key Description Default
mdns_name Service display name Pipeline ID

Geolocation Requirements

Most announcement systems require geolocation to display the video source on a map:

"geolocation": {
  "latitude": 38.8977,
  "longitude": -77.0365,
  "altitude": 100.0,
  "heading": 45.0,
  "is_dynamic": false
}

Static vs. Dynamic

Setting Behavior
is_dynamic: false Position is fixed
is_dynamic: true Position updates from KLV metadata

KLV Metadata Extraction

For streams with embedded MISB ST 0601 metadata, Flex Video can automatically extract and update geolocation:

"klv_config": {
  "auto_extract_geolocation": true,
  "update_interval_ns": 2000000000
}

This updates the pipeline's geolocation every 2 seconds, which in turn updates all announcement systems.

Troubleshooting

CoT Not Appearing in ATAK

  1. Verify ATAK is on the same network
  2. Check multicast is not blocked by firewall
  3. Ensure geolocation is configured
  4. Verify CoT is enabled in settings

TAK Server Connection Failed

  1. Check server URL is correct (include port)
  2. Verify certificate is valid and not expired
  3. Check certificate password
  4. Verify network connectivity to TAK Server

Lattice Entity Not Created

  1. Verify API token has write permissions
  2. Check Lattice host is accessible
  3. Ensure geolocation is provided
  4. Check API response for error details

Announcements Stop Working

  1. Check pipeline is still in PLAYING state
  2. Verify network connectivity
  3. Check system logs for errors
  4. Restart the pipeline