Origin Application - Storm Streaming Server
The Origin application is one of the core components used to build streaming clusters in Storm Streaming Server. It accepts incoming streams from broadcasters and makes them available to other nodes in the cluster — edge applications for viewer distribution and transcode applications for multi-quality encoding.
A single origin application can serve multiple edge and transcode connections simultaneously. Stream information is published to one or more ClusterManagers (supervisors), which coordinate stream discovery across the entire cluster.
The origin application is structurally very similar to the Mono Application, with the addition of the <StreamingClusterSettings> block and without <StreamSecuritySettings> and <StreamKeyAliasSettings> (these are handled by edge nodes facing the viewers).
For more information about building clusters, see the Scaling & Cluster Guide.
Sample Configuration
<Application name="live" type="origin">
<!--
Cluster connection settings — registers this node with the ClusterManager
and exposes it for edge/transcode connections.
-->
<StreamingClusterSettings>
<SupervisorList>
<ClusterManager hostname="clustermanager01.example.com" port="443" isSSL="true">
<Priority>1</Priority>
<Secret>your-cluster-secret</Secret>
</ClusterManager>
</SupervisorList>
<NodeAccessSettings hostname="origin01.example.com" port="1935" isSSL="false" />
<NodePriority>10</NodePriority>
</StreamingClusterSettings>
<!--
General configuration settings related to this application and its streams.
-->
<GeneralSettings>
<Description>Origin application</Description>
<BroadcastLimit>250</BroadcastLimit>
<StatInterval>2</StatInterval>
<AutoThumbnails enabled="false">
<Interval>2</Interval>
<ThumbWidth />
<ThumbHeight />
</AutoThumbnails>
</GeneralSettings>
<!--
Configuration related to ingesting streams into the application.
-->
<IngestSettings>
<AllowStreamIngest>true</AllowStreamIngest>
<AutoStreamPublish>true</AutoStreamPublish>
<AllowStreamOverwrite>false</AllowStreamOverwrite>
<Authorization enabled="true" type="request">
<RequestURL>https://api.example.com/storm/auth/{streamKey}</RequestURL>
<XApiKey>your-api-key-here</XApiKey>
</Authorization>
</IngestSettings>
<!--
List of enabled live transcoding presets for this application.
-->
<LiveTranscoding enabled="true">
<Preset name="360p" />
<Preset name="480p" />
<Preset name="720p" />
</LiveTranscoding>
<!--
Recording configuration for saving live streams to disk.
-->
<RecordingSettings enabled="false">
<FileFormat>fMP4</FileFormat>
<SavePath>/var/recordings</SavePath>
<MaxFileSize>10</MaxFileSize>
<MaxFileDuration>10</MaxFileDuration>
<CacheSize>1</CacheSize>
<MaxStorageSize>1500</MaxStorageSize>
<RemoveOldFiles>true</RemoveOldFiles>
</RecordingSettings>
</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 origin for this application type. |
Configuration Blocks
The origin 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 <NodePriority> for load-balanced stream routing. |
| General Settings | Application description, broadcast limits, statistics interval, and automatic thumbnail generation. |
| Ingest Settings | Stream publishing control and broadcaster authorization. |
| Live Transcoding | Selection of transcoding presets. In a cluster, encoding work can be delegated to transcode nodes. |
| Recording Settings | Recording live streams to disk in fMP4, FLV, or MKV format with storage management. |
Environment Variables
All configuration fields support environment variables using the ${EV:VARIABLE_NAME} syntax. This is especially useful for cluster settings where hostnames and ports differ between environments.
<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.