Origin Application - Storm Streaming Server
                    
                        An Origin-type application is one of the core modules used to build clusters in the Storm
                        Streaming Server. This guide provides information about all its parameters and settings.
                    
                
                
                    Sample Configuration
                    
                        An origin application is the basis for creating video streaming clusters. It is very similar
                        to a live application, with just a few minor differences. A single origin-type application
                        will accept multiple connections from edge and
                        transcode applications
                    
                    
                        The basic origin-type application configuration stored in
                        config/preferences.xml looks as follow:
                    
                    
                        
                            
<Application name="origin" type="origin">
    <!--
        Cluster Connection Settings
    -->
    <StreamingClusterSettings>
        <SupervisorList>
            <ClusterManager host="mydomain.com" port="443" isSSL="false">
                <Priority>1</Priority>
                <Secret>qwerty*1234556</Secret>
            </ClusterManager>
        </SupervisorList>
        <PeerAccessSettings host="mydomain.com" port="443" isSSL="false"/>
    </StreamingClusterSettings>
    <!--
        General configuration settings related to this application and its streams.
    -->
    <GeneralSettings>
		<Description>Default application</Description>
		<BroadcastLimit>unlimited</BroadcastLimit>
		<StatInterval>2</StatInterval>
	</GeneralSettings>
    <!--
        Configuration related to ingesting streams into the application.
    -->
    <IngestSettings>
		<AllowStreamIngest>true</AllowStreamIngest>
		<AutoStreamPublish>true</AutoStreamPublish>
		<AllowStreamOverwrite>true</AllowStreamOverwrite>
		<Authorization enabled="false" type="request">
			<RequestURL>https://acme.com/auth/${streamKey}</RequestURL>
			<XApiKey>as33dd4we34x5srxw6tbn</XApiKey>
		</Authorization>
	</IngestSettings>
    <!--
        Basic MP4 muxing settings.
    -->
	<MP4MuxerSettings>
		<VariableFPS>true</VariableFPS>
		<KeyFrameCompensation>false<KeyFrameCompensation>
	</MP4MuxerSettings>
    <!--
        Recording configuration for saving live streams to disk.
    -->
	<RecordingSettings enabled="false">
		<FileFormat>fMP4</FileFormat>
		<SavePath>/Users/szymon/Desktop</SavePath>
        <MaxFileSize>10</MaxFileSize>
        <MaxFileDuration>10</MaxFileDuration>
        <CacheSize>1</CacheSize>
        <MaxStorageSize>1500</MaxStorageSize>
        <RemoveOldFiles>true</RemoveOldFiles>
	</RecordingSettings>
    <!--
        List of enabled live transcoding presets for this application.
    -->
	<LiveTranscoding enabled="true">
		<Preset name="360p" />
		<Preset name="480p" />
        <Preset name="720p" />
	</LiveTranscoding>
</Application>
                        
                     
                
                
                    Main Parameters Explanation
                    
                        
                            
                                
                                
                                    | Application:name
                                     | 
                                    
                                        Name of this application. If there are more applications within your
                                        config/preferences.xml they all must
                                        have
                                        unique names.
                                     | 
                                
                                
                                    | Application:type | 
                                    
                                        This value must be set to origin for
                                        this type of Application. Other types are
                                        live (which you can learn more about
                                        here),
                                        transcode (which you can learn more
                                        about
                                        here)
                                        and edge (which you can learn more
                                        about
                                        here).
                                     | 
                                
                                
                            
                         
                        Table 1. Main parameters table
                     
                
                
                    StreamingClusterSettings
                    
                        This block defines a list of ClusterManagers to which information about streams and their status
                        within the cluster is sent. Later, edge or transcode applications connected to these same
                        ClusterManager will be able to locate the stream on
                        the appropriate server with an Origin-type
                        application.
                    
                    
                        It is possible to define more than one ClusterManager
                        in the list for the purpose of redundancy.
                    
                    
                        
                            
                                
                                
                                    | ClusterManager:host | 
                                    
                                        URL or IP to a server hosting ClusterManager instance.
                                     | 
                                
                                
                                    | ClusterManager:port | 
                                    Port for ClusterManager connection.
                                     | 
                                
                                
                                    | ClusterManager:isSSL | 
                                    True/false depending on whenever SSL layer is required. | 
                                
                                
                                    | Priority | 
                                    
                                        Priority for ClusterManager (if more
                                        available). Higher the number, higher the
                                        priority.
                                     | 
                                
                                
                                    | Secret | 
                                    A secret for connection authorization. | 
                                
                                
                                    | PeerAccessSettings:host | 
                                    
                                        Public host or IP address of this application, so other applications (like edge or transcode)
                                        know where to connect.
                                     | 
                                
                                
                                    | PeerAccessSettings:port | 
                                    
                                        Public port of this application, so other applications know where to connect
                                        (indicate a port with an active RTMP protocol).
                                     | 
                                
                                
                                    | PeerAccessSettings:isSSL | 
                                    
                                        Whether the connection should use SSL.
                                     | 
                                
                                
                            
                         
                        Table 2. StreamingClusterSettings table
                     
                
                
                    GeneralSettings
                    
                        This block defines general configuration settings for the application itself.
                    
                    
                        
                            
                                
                                
                                    | Description | 
                                    
                                        A custom description of the application explaining its purpose and
                                        functionality.
                                     | 
                                
                                
                                    | BroadcastLimit | 
                                    
                                        Specifies the maximum number of concurrent broadcasts allowed within this
                                        application.
                                     | 
                                
                                
                                    | StatInterval | 
                                    
                                        Determines how frequently statistics are processed for this application,
                                        expressed in seconds (2 seconds by default).
                                     | 
                                
                                
                            
                         
                        Table 3. GeneralSettings table
                     
                
                
                    IngestSettings
                    
                        This settings block manages stream publishing to the application.
                    
                    
                        
                            
                                
                                
                                    | AllowStreamIngest
                                     | 
                                    
                                        Specifies whether publishing streams to this application is allowed (e.g., via
                                        OBS).
                                     | 
                                
                                
                                    | AutoStreamPublish | 
                                    Determines whether a newly created stream is automatically set to PUBLISHED, allowing immediate
                                        playback.
                                     | 
                                
                                
                                    | AllowStreamOverwrite | 
                                    
                                        Defines whether existing streams can be overwritten by new incoming ones.
                                     | 
                                
                                
                            
                         
                        Table 4. IngestSettings table
                        
                     
                    
                        
                            
                                
                                
                                    | Authorization:enabled | 
                                    
                                        If set to true, stream ingest authorization is
                                        required.
                                     | 
                                
                                
                                    | Authorization:type | 
                                    
                                         Specifies the active authorization method. 
                                        
                                            - 
                                                URL-based Authorization
                                                
Sample configuration: 
                                                
                                                    
                                                        
<Authorization enabled="true" type="request">
     <RequestURL>https://acme.com/api/storm/auth/{streamKey}</RequestURL>
     <XApiKey>bd34ddawe34v51rxw6tbn</XApiKey>
</Authorization>
                                                    
                                                 
                                                Supported request template variables: 
                                                
                                                    - {streamKey} – Stream
                                                        key of the requested stream
                                                    
 
                                                    - {username} – Username
                                                        used for authentication
                                                    
 
                                                    - {ipAddress} – IP
                                                        address of the incoming connection
                                                    
 
                                                 
                                                Expected JSON response format: 
                                                
                        
{
  "username": "admin",
  "password": "qwerty"
}
                                                
                                                HTTP response codes: 
                                                
                                                    - 200 – OK
 
                                                    - 401 – Access Denied
 
                                                    - 404 – Not Found
 
                                                    - (other standard codes apply)
 
                                                 
                                             
                                            - 
                                                File-based Authorization
                                                
Sample configuration: 
                                                
                                                    
                                                        
<Authorization enabled="true" type="file">
     <FileURL>/home/storm/server/config/auth_publish.xml<FileURL>
</Authorization>
                                                    
                                                 
                                                Required XML structure: 
                                                
                                                    
                                                        
<?xml version="1.0" encoding="UTF-8" ?>
<Authorization version="1.0">
    <AuthorizationList>
        <AuthItem username="admin" password="qwerty" />
        <AuthItem username="john" password="superpass" />
    </AuthorizationList>
</Authorization>
                                                    
                                                 
                                             
                                            - 
                                                Local Authorization
                                                
Sample configuration: 
                                                
                                                    
                                                        
<Authorization enabled="true" type="local">
    <AuthorizationList>
        <AuthItem username="admin" password="qwerty" />
        <AuthItem token="62cjdj" expire="2022-02-01 16:22:00" />
    </AuthorizationList>
</Authorization>
                                                    
                                                 
                                                Token-based AuthItem entries are only supported when
                                                    using the local authorization type.
                                                 
                                             
                                         
                                     | 
                                
                                
                            
                         
                        Table 5. Ingest authorization settings table
                     
                
                
                    MP4MuxerSettings
                    
                        MP4MuxerSettings block defines basic options for MP4 packager that is used for MSE/HLS
                        connections.
                    
                    
                        
                            
                                
                                
                                    | VariableFPS | 
                                    
                                        If the source stream has no const frame rate (e.g. WebRTC-based source) muxer
                                        will try to fix the stream by adjusting composition times for selected frames.
                                     | 
                                
                                
                                    | KeyFrameCompensation | 
                                    
                                        Enables mechanism where “empty” frames are inserted into a stream if Audio/Video
                                        desynchronization is detected.
                                     | 
                                
                                
                            
                         
                        Table 6. MP4MuxerSettings table
                     
                
                
                    RecordingSettings
                    
                        Recording option allows for recording video streams into media files.
                    
                    
                        
                            
                                
                                
                                    | RecordingSettings:enabled | 
                                    Defines whenever recording is enabled. | 
                                
                                
                                    | SavePath | 
                                    Path were MP4 files should be saved. | 
                                
                                
                                    | CacheSize | 
                                    
                                        Defines how much of a video stream should be kept in memory before being flushed
                                        to a file.
                                     | 
                                
                                
                                    | MaxFileSize | 
                                    
                                        Maximum video file size. If a stream reaches this size, it will be split into
                                        additional files. This parameter is optional, and if not present or set to zero,
                                        no limit will be in effect.
                                     | 
                                
                                
                                    | MaxFileDuration | 
                                    
                                        Maximum video file duration (time). If a stream exceeds this duration, it will
                                        be split into multiple files. This parameter is optional, and if not specified
                                        or set to zero, there will be no limit in effect.
                                     | 
                                
                                
                                    | MaxStorageSize | 
                                    
                                        Storm will calculate sum of all saved video files in particular folder and
                                        either stop saving new ones, or it'll start overwriting older files if
                                        RemoveOldFiles is set to true. This parameter is optional and if not present
                                        or set to 0 no limitation will be added.
                                     | 
                                
                                
                                    | RemoveOldFiles | 
                                    
                                        If set to true and combined with MaxStorageSize, older video files
                                        will be removed to make space for new ones.
                                     | 
                                
                                
                            
                         
                        Table 7. RecordingSettings table
                     
                
                
                    LiveTranscoding
                    
                        For each individual application a set of presets for transcoding can be selected. Please keep
                        in mind that presets must be already defined in your config/preferences.xml
                        file. If you would like to define your own presets and learn more about transcoding check
                        our
                            Transcoding Guide.
                    
                    
                        
                            
                                
                                
                                    | LiveTranscoding:enabled | 
                                    If set to false, no video stream will be transcoded. | 
                                
                                
                                    | preset:name | 
                                    Name of a template, previously defined in main Transcoder tag. | 
                                
                                
                            
                         
                        Table 8. LiveTranscoding table