Edge Application - Storm Streaming Server
The Edge application is the viewer-facing component of a Storm Streaming Server cluster. It connects to the ClusterManager to discover available streams, pulls them from origin or transcode nodes, and distributes them to end viewers using various protocols (WebSocket/MSE, HLS, RTMP).
You cannot push streams directly into an edge application — it only pulls streams from other cluster nodes. This separation allows you to scale viewer capacity independently by adding more edge servers without affecting the origin infrastructure.
Edge applications handle stream security (token protection, domain restrictions) and stream key aliases, as they are the nodes that interact directly with viewers and their players.
For more information about building clusters, see the Scaling & Cluster Guide.
Sample Configuration
<Application name="edge" type="edge">
<!--
Cluster connection settings — connects to ClusterManager
to discover and pull streams from origin/transcode nodes.
-->
<StreamingClusterSettings>
<SupervisorList>
<ClusterManager hostname="clustermanager01.example.com" port="443" isSSL="true">
<Priority>1</Priority>
<Secret>your-cluster-secret</Secret>
</ClusterManager>
</SupervisorList>
<NodeAccessSettings hostname="edge01.example.com" port="1935" isSSL="false" />
<CopyOnPublish>false</CopyOnPublish>
</StreamingClusterSettings>
<!--
General configuration settings related to this application and its streams.
-->
<GeneralSettings>
<Description>Edge application</Description>
<BroadcastLimit>250</BroadcastLimit>
<StatInterval>2</StatInterval>
<AutoThumbnails enabled="false">
<Interval>2</Interval>
<ThumbWidth />
<ThumbHeight />
</AutoThumbnails>
</GeneralSettings>
<!--
Settings related to video playback for connected clients.
-->
<PlaybackSettings>
<AllowedHarnesses>
<Harness type="storm-hls" />
<Harness type="storm-mse" />
<Harness type="generic-hls" />
<Harness type="rtmp" />
</AllowedHarnesses>
<TotalViewerLimit>2500</TotalViewerLimit>
<StreamViewerLimit />
<FrameBufferSize>0</FrameBufferSize>
</PlaybackSettings>
<!--
Access control settings for WebSocket and HTML-based endpoints
(Storm Player Core & Storm Player UI).
-->
<StreamSecuritySettings>
<TokenProtection enabled="false">
<Secret>mysupersecret</Secret>
<HashAlgorithm>sha256</HashAlgorithm>
<TokenLifespan>10</TokenLifespan>
</TokenProtection>
<DomainAccessRights>
<AccessRight type="allow" domain="*" />
</DomainAccessRights>
</StreamSecuritySettings>
<!--
Stream key alias configuration for dynamic stream key resolution.
-->
<StreamKeyAliasSettings enabled="true">
<AliasAutoDiscovery enabled="true">
<RequestURL>https://api.example.com/alias/{aliasName}</RequestURL>
<XApiKey>your-api-key-here</XApiKey>
<AliasExpireTime>300</AliasExpireTime>
</AliasAutoDiscovery>
</StreamKeyAliasSettings>
<!--
nDVR settings for live streaming.
-->
<DVRSettings enabled="false">
<CacheSize>100</CacheSize>
</DVRSettings>
</Application>
Main Parameters
| Parameter | Description |
|---|---|
Application:name | Unique name of this application. All applications within config/preferences.xml must have unique names. |
Application:type | Must be set to edge for this application type. |
Configuration Blocks
The edge application supports the following configuration blocks. Click on each link for a detailed description of all available parameters.
| Block | Description |
|---|---|
| Streaming Cluster Settings | ClusterManager connections, node access settings, and <CopyOnPublish> to control eager vs. on-demand stream pulling. |
| General Settings | Application description, broadcast limits, statistics interval, and automatic thumbnail generation. |
| Playback Settings | Allowed connection types (harnesses), viewer limits, and frame buffer configuration. |
| Stream Security Settings | Token-based playback authorization and domain-level access control for Storm Player. |
| Stream Key Alias Settings | Dynamic stream key resolution via aliases, with auto-discovery and cluster-managed alias support. |
| DVR Settings | In-memory cache for live-stream rewind (nDVR). |
The edge application does not support Ingest Settings (streams are pulled from the cluster, not pushed by broadcasters), Live Transcoding, or Recording Settings.
Environment Variables
All configuration fields support environment variables using the ${EV:VARIABLE_NAME} syntax.
<NodeAccessSettings hostname="${EV:EXTERNAL_DOMAIN}" port="${EV:EXTERNAL_PORT}" isSSL="${EV:EXTERNAL_SSL}" />
Fields whose values are set via environment variables cannot be modified through the REST API.
If you have any questions or need assistance, please create a support ticket and our team will help you.