Provided by: ezstream_1.0.2-2_amd64 bug

NAME

       ezstream — source client for Icecast with external de-/encoder support

SYNOPSIS

       ezstream [-hqrVv] -c configfile [-p pidfile]
       ezstream -s file

DESCRIPTION

       ezstream is a command line source client for media streams, primarily for streaming to Icecast servers.

       It allows the creation of media streams based on input from files or standard input that is piped through
       an  optional  external de- and encoder.  As every part of this chain is highly configurable, ezstream can
       be useful in a large number of streaming setups.

   Command line arguments
       -c configfile
               Use the XML configuration in configfile.

       -h      Print a summary of available command line arguments with short descriptions and exit.

       -p pidfile
               Write the ezstream process ID (a single number) to pidfile.  The file will be written  even  when
               it already exists.  A file lock is maintained until the main ezstream process terminates.  If the
               file cannot be written for any reason, ezstream will log this, but not consider it a fatal error.

       -q      Be more quiet.  Suppress the output that external programs send to standard error.

       -r      Maintain  a  line  of real-time status information about the stream on standard output.  (Implies
               -q.)

       -s file
               Run ezstream as a line-based shuffling utility.  If a playlist argument of “-” is given,  a  list
               of  media  file  names  is read from standard input instead of an input file.  After successfully
               reading the entire list, it is shuffled and printed to standard output, and ezstream will exit.

       -V      Print the ezstream version number and exit.

       -v      Increase logging verbosity.  May be used up to three times to also include debug logging output.

   Runtime control
       Ezstream offers limited runtime control via signals.  By sending a signal to the ezstream  process,  e.g.
       with the kill(1) utility, a certain action will be triggered.

       SIGHUP
            Rereads  the playlist file after the track that is currently streamed.  If the playlist is not to be
            shuffled, ezstream attempts to find the previously streamed file and continue with the one following
            it, or restarts from the beginning of the list otherwise.

       SIGUSR1
            Skips the currently playing track and moves on to the next in playlist mode, or restarts the current
            track when streaming a single file.

       SIGUSR2
            Triggers rereading of metadata for the stream by running the configured program or script.  This  is
            the only meaningful signal when streaming from standard input.

CONFIGURATION FILE SYNTAX

       The  ezstream  utility  uses a simple XML configuration file format.  It has a tree-like structure and is
       made up of XML elements.  Of all the possible XML features, only regular elements that  contain  text  or
       other elements, and comments, appear in an ezstream configuration file.

       Each  element  in  the  configuration  file  consists  of  a start tag, its content, and an end tag.  For
       example:

             <filename>playlist.m3u</filename>
             <!-- XML comments look like this. -->

XML CONFIGURATION

       In this section, each available element is listed and described.  Note that for  this  purpose,  elements
       are introduced in their short, i.e. empty form.  In the configuration file, they need to be used as start
       tag + content + end tag, like in the introductory example shown above.

   Root element
       <ezstream />
            (Mandatory.) The configuration file's root element.  It contains all other configuration elements.

   Servers block
       <servers />
            This element contains all server blocks as child elements.  Its parent is the <ezstream /> element.

            A  configuration  file  may  contain multiple named server configurations.  The stream configuration
            determines what server configuration should be used.

   Server block
       <server />
            (Mandatory.) This element contains a complete server configuration as child elements.  Its parent is
            the <servers /> element.

   Server configuration
       <name />
            Set the name of the server configuration.  This may be referenced in a <stream />.

            The name is case-aware, but not case-sensitive.

            Default: default

       <protocol />
            Transport protocol used to stream to the server:

            HTTP       Plain-text HTTP.  The <tls /> option defines, if TLS  via  RFC2817  or  RFC2818  is  also
                       attempted.
            HTTPS      HTTP over TLS.  This option implies that <tls /> is set to "required".
            ICY        ICY streaming protocol
            RoarAudio  RoarAudio streaming protocol

            Default: HTTP

       <hostname />
            (Mandatory.) The FQDN host name or IP address of the server.

       <port />
            Port number on which the server is listening.

            Default: 8000

       <user />
            User to authenticate as on the server.

            Default: source

       <password />
            (Mandatory.) Password to authenticate with on the server.

       <reconnect_attempts />
            Number  of  reconnect  attempts in case of connection issues with the server, or 0 (zero) for trying
            indefinitely.

            Default: 0

       <tls />
            Configure the TLS encryption requirement for the server connection.  Possible values are:

            None        No TLS encryption will be attempted.
            May         Opportunistic TLS encryption may be used, if the server supports it
            Required    TLS encryption is required.  This is the only setting that is providing security against
                        both passive and active attackers.

            Default: May

            This option is ignored when <protocol /> is set to HTTPS, which implies a value of Required.

       <tls_cipher_suite />
            Configure allowed cipher suites for TLS.

            For example (modern cipher suites, PFS, TLS 1.2 or better): HIGH:!RSA:!SHA:!DH:!aNULL:!eNULL:!TLSv1.

            Default: libshout default cipher suite

       <ca_dir />
            Directory in which OpenSSL finds root CA certificates for validating the HTTPS server identity.

            Default: system default

       <ca_file />
            Path of a root CA bundle file for validating the HTTPS server identity.

            Default: system default

       <client_cert />
            X.503 client certificate and key (in PEM format containing both certificate  and  key  in  the  same
            file) for authentication on an HTTPS server.

            Default: no client certificate authentication

   Streams block
       <streams />
            This element contains all stream blocks as child elements.  Its parent is the <ezstream /> element.

            Note:  While  multiple  stream  configurations  are  supported  by  the  file  format,  only the one
            configuration with the name default will be used by ezstream.

   Stream block
       <stream />
            (Mandatory.) This element contains the entire stream configuration as child elements.  Its parent is
            the <streams /> element.

   Stream configuration
       <name />
            Set the name of the stream configuration.

            The name is case-aware, but not case-sensitive.

            Note: At this time, only the stream configuration with the default name is used and must be present.

            Default: default

       <mountpoint />
            (Mandatory.) Stream mountpoint on the server.

       <public />
            Boolean setting of whether the broadcast may be listed in a public YP directory, or not.

            0|No|False  The broadcast is private (the default).
            1|Yes|True  The broadcast is public.

       <intake />
            Use the intake (input media) configuration with the provided symbolic name for this stream.

            Default: default

       <server />
            Use the server configuration with the provided symbolic name for this stream.

            Default: default

       <format />
            (Mandatory.) The stream format.

            Ogg       Ogg media format
            MP3       MP3 audio format
            WebM      WebM media format
            Matroska  Matroska media format

       <encoder />
            Use the encoder configuration with the provided symbolic name  (see  below),  for  (re)encoding  the
            stream.  Not configuring an encoder makes ezstream stream input media files as-is.

            The configured encoder's output stream format must match what is configured in <format />.

       <stream_name />
            Informational name of the broadcast.

            Default: none

       <stream_url />
            Informational URL associated with the broadcast, e.g. the web site.

            Default: none

       <stream_genre />
            Informational genre of the broadcast.

            Default: none

       <stream_description />
            Informational description of the broadcast.

            Default: none

       <stream_quality />
            Informational quality setting of the VBR broadcast.

            Default: none

       <stream_bitrate />
            Informational bitrate setting of the CBR broadcast.

            Default: none

       <stream_samplerate />
            Informational sample rate of the broadcast audio.

            Default: none

       <stream_channels />
            Informational number of audio channels of the broadcast.

            Default: none

   Intakes block
       <intakes />
            This element contains all intake blocks as child elements.  Its parent is the <ezstream /> element.

            A  configuration  file  may  contain multiple named intake configurations.  The stream configuration
            determines what intake (media input) configuration should be used.

   Intake block
       <intake />
            (Mandatory.) This element contains the entire input media  configuration  as  child  elements.   Its
            parent is the <intakes /> element.

   Intake configuration
       <name />
            Set the name of the intake configuration.  This may be referenced in a <stream />.

            The name is case-aware, but not case-sensitive.

            Default: default

       <type />
            Configure the input media type:

            autodetect  Attempt  to  autodetect,  whether  the  input  is  a  playlist,  or a single media file.
                        Playlists are detected by their “.m3u” and “.txt” file name extensions.   (This  is  the
                        default.)
            file        The input is one single media file.
            playlist    The  input  is  a  playlist.   Playlists are a newline-delimited list of media file path
                        names.  Comments in playlists are introduced by a ‘#’ sign at the beginning  of  a  line
                        and ignored by ezstream.
            program     The input is an executable “Playlist Program”.  See SCRIPTING for more information.
            stdin       The input is read from standard input and streamed as-is without any reencoding.

       <filename />
            The input media file name; mandatory for all but the stdin type.

       <shuffle />
            Boolean setting of whether the playlist type media should be shuffled, or not.

            0|No|False  Stream the playlist content sequentially (the default).
            1|Yes|True  Shuffle the playlist prior to streaming its content.

       <stream_once />
            Boolean setting of whether ezstream should exit after streaming its media input, or start over.

            0|No|False  Attempt to start over whenever the end of the media input is reached (the default).
            1|Yes|True  After streaming all media input, exit.

   Metadata block
       <metadata />
            This  element  contains  the  entire  metadata  configuration  as child elements.  Its parent is the
            <ezstream /> element.

   Metadata configuration
       <program />
            Set an executable “Metadata Program” to be queried for all metadata on SIGUSR2  or  whenever  a  new
            track begins.  See SCRIPTING for more information.

            Default: use metadata as contained in media files

       <format_str />
            Set  the  format  of  the  string  that  should  be used for the ‘@M@’ placeholder, when quering for
            metadata from an executable.

            Default: @a@ - @t@

       <refresh_interval />
            Configure a time interval for additional metadata updates via a “Metadata Program”:

            -1  Do not trigger any additional metadata updates (the default).
            0   Trigger metadata updates at the highest reasonable frequency.
            >0  Configure the time (in seconds) in between additional metadata updates.

       <normalize_strings />
            Boolean setting of whether metadata strings should have excess whitespace removed, or not.

            0|No|False  Use metadata strings as-is (the default).
            1|Yes|True  Trim leading and trailing whitespace, as well as remove excess whitespace in  case  that
                        there is more than one in sequence.

       <no_updates />
            Boolean setting of whether metadata updates should be suppressed altogether, or not.

            0|No|False  Update metadata in the usual manner (the default).
            1|Yes|True  Disable all metadata updates, and keep existing metadata in streams untouched.

   Decoders block
       <decoders />
            This element contains all decoder blocks as child elements.  Its parent is the <ezstream /> element.

   Decoder block
       <decoder />
            This  element  contains  all  configuration  of  a  single  decoder.  Its parent is the <decoders />
            element.

   Decoder configuration
       <name />
            Set the name of the decoder configuration.

            The name is case-aware, but not case-sensitive.

            Default: default

       <program />
            (Mandatory.) Set the full command line to decode a  media  input  file,  represented  by  the  ‘@T@’
            placeholder, into a “canonical internal format” on standard output.

            The  canonical format should be the same for all configured decoders, e.g. RAW audio with a specific
            signedness, bitrate, and samplerate that can be consumed by encoders.

            For exotic use cases, metadata placeholders may be used here.

            Example:
                  <program>oggdec -R -o - @T@</program>

       <file_ext />
            (Mandatory.) Set a filename extension to be associated with this decoder.

            It is possible to specify more than one <file_ext /> element per decoder to associate more than  one
            file extension to the same decoder.

            A filename extension can only be associated with one decoder.

   Encoders block
       <encoders />
            This element contains all encoder blocks as child elements.  Its parent is the <ezstream /> element.

   Encoder block
       <encoder />
            This  element  contains  all  configuration  of  a  single  encoder.  Its parent is the <encoders />
            element.

   Encoder configuration
       <name />
            (Mandatory.) Set the name of the encoder configuration.  This may  be  referenced  in  a  <stream />
            block in case (re)encoding is desired.

            The name is case-aware, but not case-sensitive.

            Default: default

       <format />
            (Mandatory.)  Stream  format  produced  by  this  encoder.  This must be one of the available stream
            formats as specified for the <stream /> block.

       <program />
            (Mandatory.) Set the full command line to encode the “canonical internal format” from standard input
            into a supported stream format on standard output.

            Metadata placeholders may be used here.

            Example:
                  <program>oggenc -r -q 1.5 -t @M@ -</program>

SCRIPTING

       The ezstream utility provides hooks for externally controlled playlist and metadata management.  This  is
       done by running external programs or scripts that need to behave in ways explained here.

   Common Rules
       -   The program must be an executable file.
       -   The program must write one line to standard output and exit.
       -   The  program  must  not require arbitrary command line options to function.  A wrapper script must be
           used if there is no other way.

   Playlist Programs
       -   The program must return only filenames, with one filename per execution.
       -   The program should not return an empty line unless ezstream is supposed to know that the end  of  the
           playlist has been reached.  This is significant when the <stream_once/> option is enabled.

   Metadata Programs
       -   The  program  must not return anything (just a newline character is okay) if it is called by ezstream
           with a command line argument that the program does not support.
       -   When called without command line arguments, the program should return a complete string  that  should
           be used for metadata.
       -   When  called  with  the  command  line  argument  "artist", the program should return only the artist
           information of the metadata.  (Optional.)
       -   When called with the command line  argument  "title",  the  program  should  return  only  the  title
           information of the metadata.  (Optional.)
       -   The supplied metadata must be encoded in UTF-8.

METADATA

       The  main  tool  for handling metadata with ezstream is placeholders in decoder and encoder commands that
       are replaced with real content during runtime.

       Note: All placeholders are replaced with content enclosed in single quotes, with escaped single quote and
       backslash characters in between, so that interpretation by the shell does not  occur.   Do  not  add  any
       additional quoting!

   Metadata Placeholders
       @T@  Replaced  with  the  media file name.  Required in /ezstream/decoders/decoder/program.  Available in
            /ezstream/metadata/format_str.

       @M@  Replaced  with  a  metadata  string.   (See  below  for  a  detailed  explanation.)   Available   in
            /ezstream/decoders/decoder/program and /ezstream/encoders/encoder/program.

       @a@  Replaced   with   the   artist   information.    Available   in  /ezstream/decoders/decoder/program,
            /ezstream/encoders/encoder/program and /ezstream/metadata/format_str.

       @t@  Replaced   with   the   title   information.    Available   in   /ezstream/decoders/decoder/program,
            /ezstream/encoders/encoder/program and /ezstream/metadata/format_str.

       @b@  Replaced   with   the   album   information.    Available   in   /ezstream/decoders/decoder/program,
            /ezstream/encoders/encoder/program and /ezstream/metadata/format_str.

       @s@  Replaced with the string returned by /ezstream/metadata/program when called without any command line
            arguments.  Available only in /ezstream/metadata/format_str.

   The @M@ Placeholder
       While all other placeholders are simply replaced with whatever data they are associated  with,  ‘@M@’  is
       context-sensitive.  The logic used by ezstream is the following:

             If ('@M@ is present')
                 If (/ezstream/metadata/program AND /ezstream/metadata/format_str)
                     Replace with format string result.
                 Else
                     If (NOT /ezstream/metadata/program AND '@t@ is present')
                         Replace with empty string.
                     else
                         Replace with generated metadata string.
                     Endif
                 Endif
             Endif

       The  generated  metadata  string  for  ‘@M@’  is of the format “Artist - Title”, if both artist and title
       information is available.  If one of the two is missing, the available one is displayed without a leading
       or trailing dash, e.g. just “Artist”.  If neither artist nor title are available, the name of  the  media
       file — without its file extension — is used.

   Metadata Caveats
       It  is  possible  to  generate  strange  results with odd combinations of placeholders, external metadata
       programs and updates during runtime via SIGUSR2.  If things start to become just confusing, simplify.

       Metadata updates during runtime are done with a  eccentric  feature  of  libshout.   Additional  metadata
       information  that  is  already  present in the stream sent via ezstream is usually destroyed and replaced
       with the new data.  It is not possible to properly discern between artist and  title  information,  which
       means that anything set with the SIGUSR2 feature will continue to end up entirely in the "Title" field of
       a stream.

       Additional  limitations  in Icecast may apply as well, where one historic example is that of all possible
       Ogg-based streams, only Ogg Vorbis can have its metadata manipulated.

       The ID3v1 tags (relevant when streaming in MP3 format) do not specify any character encoding, so ezstream
       operates in a manner of “best effort”.  In case of encoding issues, it  may  help  to  explicitly  set  a
       codeset  to  work with via the LC_CTYPE environment variable, as ezstream assumes ID3v1 tags to be in the
       user's current locale.  Note that, even though support for different locales  is  provided  by  ezstream,
       Icecast  itself  and  the  listening  clients  also  have  a  say  in the matter.  The only way to ensure
       consistent results with metadata in non-Ogg streams is to  use  only  the  characters  available  in  the
       ISO-8859-1 codeset.

       External  encoders  may  put  additional,  and  possibly  artificial, restrictions on valid characters in
       metadata.

FILES

       /usr/share/doc/ezstream/examples  Directory containing example configuration files for  various  uses  of
                                         ezstream, as well as example playlist and metadata scripts.

SEE ALSO

       ezstream-cfgmigrate(1), ezstream-file.sh(1)

AUTHORS

       ezstream was written by:

       Ed Zaleski <oddsock@oddsock.org>
       Moritz Grimm <mgrimm@mrsserver.net>

       This manual was written by Moritz Grimm.

ezstream 1.0.2                                   August 01, 2022                                     EZSTREAM(1)