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 and WinTAK 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 -k -X PUT https://<encoder-ip>: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 Example Description
1 a Atom type (a=Unit, b=Bits/location)
2 f Affiliation (f=Friend, h=Hostile, n=Neutral, u=Unknown)
3 G Battle dimension (G=Ground, A=Air, S=Sea)
4 U Unit type
5 C Function (C=Combat, R=Recon)
6 I Additional specifier

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 -k -X PUT https://<encoder-ip>: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 -k -X PUT https://<encoder-ip>: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)

Tokens are write-only for security. GET /flex/settings returns lattice_configured: true instead of the token values.

Lattice Metadata Reference

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

"metadata": {
  "lattice_title": "Entrance Camera",
  "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_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_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.

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 Example Description
1 S Coding Scheme (S=Warfighting)
2 F Affiliation (F=Friend, H=Hostile, N=Neutral, U=Unknown)
3 G Category
4 P Battle Dimension (G=Ground, A=Air, S=Sea)
5–15 UCSR------- Function ID + Modifiers

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"
}

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": 750,
    "codec": "h264"
  },
  "output": {
    "uri": "rtsp://0.0.0.0:8731/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_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 zero-configuration discovery of Flex Video and its streams on the local network. Clients can find video streams without knowing the encoder's IP address in advance.

How It Works

  1. When Flex Video starts, it announces itself as a _flexvideo._tcp service on the local network
  2. When a pipeline starts playing, it is announced as both a _flex-video._tcp and _rtsp._tcp service (for RTSP outputs)
  3. Clients discover streams using standard DNS-SD queries (Bonjour on macOS, Avahi on Linux)
  4. Announcements are removed when the pipeline stops

mDNS is always enabled and requires no configuration.

Service Types

Each playing pipeline is announced under one or two service types:

Service Type Announced For Description
_flex-video._tcp All stream types Flex Video specific — includes full metadata
_rtsp._tcp RTSP/RTSPS only Standard RTSP service — compatible with VLC and other RTSP-aware clients

Discovering Streams

# Browse for all Flex Video streams
dns-sd -B _flex-video._tcp local.

# Resolve a specific stream to get host, port, and TXT records
dns-sd -L "Flex Video - camera-1" _flex-video._tcp local.

# Browse standard RTSP streams (compatible with VLC, ffplay, etc.)
dns-sd -B _rtsp._tcp local.
# Browse and resolve all Flex Video streams (-r resolves automatically)
avahi-browse -r _flex-video._tcp

# Browse standard RTSP streams
avahi-browse -r _rtsp._tcp

Example output (avahi-browse -r _flex-video._tcp):

= eth0 IPv4 Flex Video - camera-1          _flex-video._tcp    local
   hostname = [flex-encoder.local]
   address = [192.168.1.50]
   port = [8731]
   txt = ["pipeline_id=camera-1" "type=rtsp" "path=camera-1"]

From this you can construct the stream URI: rtsp://192.168.1.50:8731/camera-1

TXT Records

_flex-video._tcp includes full metadata:

TXT Record Description Example
pipeline_id Pipeline identifier camera-1
type Stream type rtsp, udp_multicast, udp_unicast, srt, rtmp
path Stream path (combine with host:port for full URI) camera-1
(custom) Any mdns_ metadata keys from the pipeline description=Lobby Camera

_rtsp._tcp follows the IANA-registered RTSP service type (RFC 2326/7826). The spec defines no required TXT keys, so Flex Video includes:

TXT Record Description Example
pipeline_id Pipeline identifier camera-1
path RTSP stream path camera-1

mDNS Metadata

Customize mDNS announcements using pipeline metadata with the mdns_ prefix. Any mdns_ key is included as a TXT record (with the prefix removed):

"metadata": {
  "mdns_name": "Lobby Camera",
  "mdns_description": "Main Lobby Camera",
  "mdns_codec": "h264",
  "mdns_location": "building-a"
}
Key Description Default
mdns_name Service display name Pipeline ID
mdns_description Human-readable stream description (none)
mdns_codec Video codec information (none)
mdns_* Any custom key/value as TXT record (none)

Requirements

  • mDNS port 5353 (UDP) must not be blocked by the host firewall
  • Client and encoder must be on the same subnet (mDNS is link-local)
  • No additional software or configuration is needed on the encoder

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
}

You can also provide an MGRS coordinate instead of latitude/longitude:

"geolocation": {
  "mgrs": "18SUJ2337006519",
  "altitude": 100.0,
  "is_dynamic": false
}

If both MGRS and latitude/longitude are provided, latitude/longitude take precedence. Responses include latitude, longitude, and computed mgrs.

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

TAK Server Certificate Rejected

If the TAK Server connection fails with a certificate error, the server's TLS certificate is not trusted by the system. This happens when the TAK Server uses a self-signed certificate or a certificate issued by a private Certificate Authority (CA), which is common in tactical environments.

To resolve this, upload a truststore in the TAK Server settings:

  1. Open Settings > TAK Server
  2. In the Truststore field, upload the CA certificate (.p12 or .pem) that signed the TAK Server's TLS certificate
  3. Enter the truststore password if required
  4. Save and verify the connection succeeds

Where to get the truststore:

  • If your organization runs its own TAK Server, the TAK Server administrator can export the CA certificate from the server's certificate store
  • For TAK Server instances using the default setup, the truststore is typically generated during initial server configuration
  • The truststore file should contain the root CA (and any intermediate CAs) that issued the TAK Server's certificate

Without a truststore, only TAK Servers with certificates signed by a publicly trusted CA will connect successfully.

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