Architecture
As of version 1.5.0, OpenTAKServer is split into three parts, the API, the EUD handler, and the CoT parser. Each part runs as its own separate process. This solves a bottleneck issue caused by the Python Global Interpreter Lock (GIL).
EUD Handler
The EUD Handler listens on a TCP port, specified by OTS_TCP_STREAMING_PORT
or OTS_SSL_STREAMING_PORT
, and is the main point of
interaction between OpenTAKServer and EUDs. When an EUD sends a CoT message, eud_handler
will publish it to RabbitMQ for cot_parser
to parse. Likewise, when another EUD publishes a CoT message, eud_handler
consume the message and send it to the EUD.
CoT Parser
The CoT Parser connects to the RabbitMQ server and parses CoT messages sent by EUDs. There can be multiple instances of CoT parsers
running at once. This allows you to take full advantage of your CPU cores if you have a high number of incoming CoT messages per second.
If there are too many incoming CoT messages for the server to handle, additional servers can run more instances of cot_parser
for extra processing power.
Ports
Below is a table of all default ports used by OpenTAKServer. For unencrypted TCP communications, ports 80, 8080, and 8088 are required. For SSL encrypted communications, ports 443, 8443, 8446, and 8089 are required. In either case, the rest of the ports are optional.
Port |
Component |
Protocol |
Interface |
Description |
---|---|---|---|---|
80 |
Nginx |
TCP |
All |
Web UI and proxy for HTTP API requests to OpenTAKServer port 8081 |
443 |
Nginx |
TCP |
All |
Web UI and proxy for HTTPS requests to OpenTAKServer port 8081 |
1883 |
RabbitMQ |
TCP |
All |
Unencrypted MQTT port used for Meshtastic |
1935 |
MediaMTX |
TCP |
All |
Publish and view RTMP video streams |
1936 |
MediaMTX |
TCP |
All |
Publish and view RTMPS video streams |
5672 |
RabbitMQ |
TCP |
All |
For AMPQ clients, should be blocked from external access in most cases |
6502 |
Mumble Server |
TCP |
Loopback (127.0.0.1) |
Mumble’s ICE server, used by OpenTAKServer to provide authentication |
8000 |
MediaMTX |
UDP |
All |
Publish and view RTP video streams |
8001 |
MediaMTX |
UDP |
All |
Publish and view RTCP video streams |
8080 |
Nginx |
TCP |
All |
Web UI and proxy for HTTP API requests to OpenTAKServer port 8081 |
8081 |
OpenTAKServer |
TCP |
Loopback (127.0.0.1) |
OTS listens on this port on the loopback interface for HTTP(S) requests |
8189 |
MediaMTX |
UDP |
All |
WebRTC |
8088 |
OpenTAKServer |
TCP |
All |
TCP CoT streaming port |
8089 |
OpenTAKServer |
TCP |
All |
SSL CoT streaming port |
8443 |
Nginx |
TCP |
All |
Web UI and proxy for HTTPS API requests to OpenTAKServer port 8081 |
8446 |
Nginx |
TCP |
All |
Web UI and proxy for certificate enrollment to OpenTAKServer port 8081 |
8322 |
MediaMTX |
TCP |
All |
Publish and view RTSP(S) video streams |
8554 |
MediaMTX |
TCP/UDP |
All |
Publish and view RTSP video streams |
8883 |
RabbitMQ |
TCP |
All |
Encrypted MQTT port used for Meshtastic |
8888 |
MediaMTX |
TCP |
All |
View HLS video streams |
8889 |
MediaMTX |
TCP |
All |
Publish and view WebRTC streams |
8890 |
MediaMTX |
UDP |
All |
Publish and view SRT streams |
9997 |
MediaMTX |
TCP |
Loopback (127.0.0.1) |
MediaMTX’s API |
25672 |
RabbitMQ |
TCP |
All |
RabbitMQ Federation, external access should be blocked in most cases |
64738 |
Mumble Server |
TCP/UDP |
All |
Mumble server voice streams |
Diagram
Here is an attempt at a diagram to help visualize the components used in OpenTAKServer and how they interact.