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¶
- Pipeline reaches
PLAYINGstate - CoT XML message is multicast to
239.2.3.1:6969 - TAK clients receive the message and display a video marker
- Periodic updates (every 5 seconds) keep the marker fresh
Enabling CoT¶
CoT announcements are enabled by default. To disable:
- Go to Settings in the web interface
- 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:
| 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¶
- Ensure ATAK is on the same network
- Start a pipeline with geolocation configured
- The video marker appears on the ATAK map
- Tap the marker to view stream details
- 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.
- Go to Settings > TAK Server
- Enter the TAK Server URL (e.g.,
https://takserver.example.com:8443) - Upload your client certificate (.p12 file)
- Enter the certificate password
- Optionally upload a CA truststore (if using a private CA)
- Set a public IP if behind NAT
- 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¶
- Log in to your TAK Server admin console (
https://<takserver>:8443/Marti) - Go to User Management > Generate Certificate
- Download the generated .p12 file and note the password
- If using a private CA, also download the truststore
TAK Server Metadata¶
Customize TAK Server announcements using pipeline metadata with the tak_ prefix:
| 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¶
- Go to Settings > Lattice
- Enter the Lattice host (without
https://) - Enter your environment API token
- Optionally enter a sandbox token for development
- Set a public IP if behind NAT
- 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¶
| 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:
This updates the pipeline's geolocation every 2 seconds, which in turn updates all announcement systems.
Troubleshooting¶
CoT Not Appearing in ATAK¶
- Verify ATAK is on the same network
- Check multicast is not blocked by firewall
- Ensure geolocation is configured
- Verify CoT is enabled in settings
TAK Server Connection Failed¶
- Check server URL is correct (include port)
- Verify certificate is valid and not expired
- Check certificate password
- Verify network connectivity to TAK Server
Lattice Entity Not Created¶
- Verify API token has write permissions
- Check Lattice host is accessible
- Ensure geolocation is provided
- Check API response for error details
Announcements Stop Working¶
- Check pipeline is still in
PLAYINGstate - Verify network connectivity
- Check system logs for errors
- Restart the pipeline