Refactor configuration (work in progress)
* Move -m and -n command line options into the config file
* Restructure configuration file:
- Group into "server", "stream", "media", "metadata", "decoders", and
"encoders"
- Untangle decoder and encoder:
o Decoders match on file extensions and convert to a canonical "internal"
format
o Encoders create one of the supported stream formats, potentially using
different parameters (like bitrate)
- Consistently specify stream format
- Enable reencoding by selecting an encoder
* Architecturally separate configuration file storage from parsing
- Allows for different configuration back-ends in the future, like
YAML, SQL, REST API, ...
* Support roll-back in case of error on (re)load
* Anticipate HTTPS support
2015-05-02 06:48:53 -04:00
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
|
|
|
2015-05-21 12:50:22 -04:00
|
|
|
<!--
|
|
|
|
EXAMPLE: A valid configuration that contains every configuration option
|
2015-05-21 17:30:51 -04:00
|
|
|
|
|
|
|
NB: /ezstream/metadata/program is commented out so that this configuration
|
|
|
|
can work without scripting.
|
2015-05-21 12:50:22 -04:00
|
|
|
-->
|
|
|
|
|
|
|
|
<!-- Ezstream configuration root element -->
|
Refactor configuration (work in progress)
* Move -m and -n command line options into the config file
* Restructure configuration file:
- Group into "server", "stream", "media", "metadata", "decoders", and
"encoders"
- Untangle decoder and encoder:
o Decoders match on file extensions and convert to a canonical "internal"
format
o Encoders create one of the supported stream formats, potentially using
different parameters (like bitrate)
- Consistently specify stream format
- Enable reencoding by selecting an encoder
* Architecturally separate configuration file storage from parsing
- Allows for different configuration back-ends in the future, like
YAML, SQL, REST API, ...
* Support roll-back in case of error on (re)load
* Anticipate HTTPS support
2015-05-02 06:48:53 -04:00
|
|
|
<ezstream>
|
|
|
|
|
2015-05-21 12:50:22 -04:00
|
|
|
<!--
|
|
|
|
Server configuration
|
|
|
|
-->
|
2017-11-17 19:54:14 -05:00
|
|
|
<servers>
|
|
|
|
<server>
|
2018-01-22 11:34:31 -05:00
|
|
|
<!-- Identifying name (default: "default") -->
|
|
|
|
<name>Test Server</name>
|
2017-11-17 19:54:14 -05:00
|
|
|
|
2020-01-22 16:55:59 -05:00
|
|
|
<!--
|
|
|
|
Transport protocol:
|
|
|
|
HTTP (default), HTTPS (implies <tls>required</tls>), ICY, RoarAudio
|
|
|
|
-->
|
2017-11-17 19:54:14 -05:00
|
|
|
<protocol>HTTP</protocol>
|
|
|
|
<!-- Server address -->
|
|
|
|
<hostname>127.0.0.1</hostname>
|
2018-01-22 11:34:31 -05:00
|
|
|
<!-- Server port (default: 8000) -->
|
2017-11-17 19:54:14 -05:00
|
|
|
<port>8000</port>
|
|
|
|
|
2018-01-22 11:34:31 -05:00
|
|
|
<!-- Login user (default: "source") -->
|
2017-11-17 19:54:14 -05:00
|
|
|
<user>source</user>
|
|
|
|
<!-- Login password (check file permissions, or everyone can see this) -->
|
|
|
|
<password>hackme</password>
|
|
|
|
|
|
|
|
<!--
|
2018-01-22 11:34:31 -05:00
|
|
|
Configure TLS requirement: none, may, required (default: "may")
|
2020-01-18 18:45:47 -05:00
|
|
|
|
|
|
|
For compatibility reasons, the default configuration and this example
|
|
|
|
is "may". THIS IS INSECURE. It allows a MitM to intercept the
|
|
|
|
password and tamper with the stream. It is recommended to set this to
|
|
|
|
"required" when configuring TLS to secure streaming over untrusted
|
|
|
|
networks.
|
2017-11-17 19:54:14 -05:00
|
|
|
-->
|
2020-01-18 18:45:47 -05:00
|
|
|
<tls>May</tls>
|
2017-11-17 19:54:14 -05:00
|
|
|
|
|
|
|
<!--
|
2020-02-11 10:45:41 -05:00
|
|
|
Configure allowed cipher suites for TLS other than the libshout
|
|
|
|
default.
|
2017-11-17 19:54:14 -05:00
|
|
|
See openssl(1)/ciphers(1) for details.
|
|
|
|
-->
|
2020-01-22 10:42:09 -05:00
|
|
|
<tls_cipher_suite>HIGH:!RSA:!SHA:!DH:!aNULL:!eNULL:!TLSv1</tls_cipher_suite>
|
2017-11-17 19:54:14 -05:00
|
|
|
|
|
|
|
<!--
|
|
|
|
Directory to use for server certificate verification in "hash format".
|
|
|
|
See openssl(1)/verify(1) for details.
|
2020-02-11 10:45:41 -05:00
|
|
|
|
|
|
|
One of the <ca_dir /> or <ca_file /> settings must be enabled for
|
|
|
|
certificate verification to succeed.
|
2017-11-17 19:54:14 -05:00
|
|
|
-->
|
2020-02-11 10:45:41 -05:00
|
|
|
<!-- <ca_dir>/etc/ssl/certs</ca_dir> -->
|
2017-11-17 19:54:14 -05:00
|
|
|
|
|
|
|
<!--
|
|
|
|
CA bundle for both server certificate verification and building the
|
|
|
|
client certificate chain.
|
2020-02-11 10:45:41 -05:00
|
|
|
|
|
|
|
One of the <ca_dir /> or <ca_file /> settings must be enabled for
|
|
|
|
certificate verification to succeed.
|
2017-11-17 19:54:14 -05:00
|
|
|
-->
|
2020-02-11 10:45:41 -05:00
|
|
|
<!-- <ca_file>/etc/ssl/certs/ca-certificates.crt</ca_file> -->
|
2017-11-17 19:54:14 -05:00
|
|
|
|
|
|
|
<!--
|
|
|
|
X.503 client certificate, in PEM format, containing both certificate
|
2020-02-11 10:45:41 -05:00
|
|
|
(with public key) and private key in the same file, for
|
|
|
|
authentication.
|
2017-11-17 19:54:14 -05:00
|
|
|
-->
|
2020-01-22 17:30:43 -05:00
|
|
|
<!-- <client_cert>/etc/ssl/private/ezstream.crt</client_cert> -->
|
2018-01-22 11:34:31 -05:00
|
|
|
|
|
|
|
<!-- Number of reconnection attempts, before giving up (default: 0) -->
|
|
|
|
<reconnect_attempts>20</reconnect_attempts>
|
2017-11-17 19:54:14 -05:00
|
|
|
</server>
|
|
|
|
</servers>
|
Refactor configuration (work in progress)
* Move -m and -n command line options into the config file
* Restructure configuration file:
- Group into "server", "stream", "media", "metadata", "decoders", and
"encoders"
- Untangle decoder and encoder:
o Decoders match on file extensions and convert to a canonical "internal"
format
o Encoders create one of the supported stream formats, potentially using
different parameters (like bitrate)
- Consistently specify stream format
- Enable reencoding by selecting an encoder
* Architecturally separate configuration file storage from parsing
- Allows for different configuration back-ends in the future, like
YAML, SQL, REST API, ...
* Support roll-back in case of error on (re)load
* Anticipate HTTPS support
2015-05-02 06:48:53 -04:00
|
|
|
|
2015-05-21 12:50:22 -04:00
|
|
|
<!--
|
|
|
|
Stream configuration
|
|
|
|
-->
|
2017-11-17 19:54:14 -05:00
|
|
|
<streams>
|
|
|
|
<stream>
|
2018-01-22 11:34:31 -05:00
|
|
|
<!--
|
|
|
|
Identifying name (default: "default")
|
|
|
|
|
|
|
|
NB: Only the "default" stream is supported at this point.
|
|
|
|
-->
|
|
|
|
<!-- <name>default</name> -->
|
2017-11-17 19:54:14 -05:00
|
|
|
|
|
|
|
<!-- Mount point on server -->
|
|
|
|
<mountpoint>/stream.ogg</mountpoint>
|
|
|
|
|
2017-11-23 12:34:57 -05:00
|
|
|
<!-- Name of the intake entry to use (default: "default") -->
|
2018-01-22 11:34:31 -05:00
|
|
|
<intake>Test Input</intake>
|
2017-11-23 12:34:57 -05:00
|
|
|
|
2017-11-17 19:54:14 -05:00
|
|
|
<!-- Name of the server entry to use (default: "default") -->
|
2018-01-22 11:34:31 -05:00
|
|
|
<server>Test Server</server>
|
2017-11-17 19:54:14 -05:00
|
|
|
|
2018-01-22 11:34:31 -05:00
|
|
|
<!--
|
|
|
|
Setting to allow stream to be listed in public YP directory
|
|
|
|
(default: no)
|
|
|
|
-->
|
2017-11-17 19:54:14 -05:00
|
|
|
<public>No</public>
|
|
|
|
|
2020-01-24 17:27:02 -05:00
|
|
|
<!-- Stream format: Ogg, MP3, WebM, Matroska -->
|
|
|
|
<format>Ogg</format>
|
2017-11-17 19:54:14 -05:00
|
|
|
|
|
|
|
<!-- Encoder name (defined below) to use for (re)encoding -->
|
|
|
|
<encoder>OggEnc-Q1.5</encoder>
|
|
|
|
|
|
|
|
<!-- Various other informational settings -->
|
|
|
|
<stream_name>Test Stream</stream_name>
|
|
|
|
<stream_url>http://localhost:8000/</stream_url>
|
|
|
|
<stream_genre>Beeps</stream_genre>
|
|
|
|
<stream_description>Test tones and noise</stream_description>
|
|
|
|
<stream_quality>1.5</stream_quality>
|
|
|
|
<stream_bitrate>16</stream_bitrate>
|
|
|
|
<stream_samplerate>44100</stream_samplerate>
|
|
|
|
<stream_channels>2</stream_channels>
|
|
|
|
</stream>
|
|
|
|
</streams>
|
Refactor configuration (work in progress)
* Move -m and -n command line options into the config file
* Restructure configuration file:
- Group into "server", "stream", "media", "metadata", "decoders", and
"encoders"
- Untangle decoder and encoder:
o Decoders match on file extensions and convert to a canonical "internal"
format
o Encoders create one of the supported stream formats, potentially using
different parameters (like bitrate)
- Consistently specify stream format
- Enable reencoding by selecting an encoder
* Architecturally separate configuration file storage from parsing
- Allows for different configuration back-ends in the future, like
YAML, SQL, REST API, ...
* Support roll-back in case of error on (re)load
* Anticipate HTTPS support
2015-05-02 06:48:53 -04:00
|
|
|
|
2015-05-21 12:50:22 -04:00
|
|
|
<!--
|
2017-11-23 12:34:57 -05:00
|
|
|
Intake configuration
|
2015-05-21 12:50:22 -04:00
|
|
|
-->
|
2017-11-23 12:34:57 -05:00
|
|
|
<intakes>
|
|
|
|
<intake>
|
2018-01-22 11:34:31 -05:00
|
|
|
<!-- Identifying name (default: "default") -->
|
|
|
|
<name>Test Input</name>
|
2017-11-23 12:34:57 -05:00
|
|
|
|
2018-01-22 11:34:31 -05:00
|
|
|
<!--
|
|
|
|
Media type: autodetect, file, playlist, program, stdin
|
|
|
|
(default: autodetect)
|
|
|
|
-->
|
|
|
|
<type>playlist</type>
|
2015-05-21 12:50:22 -04:00
|
|
|
|
2018-01-22 11:34:31 -05:00
|
|
|
<!-- Input file, program name, or "stdin" keyword (deprecated) -->
|
2017-11-23 12:34:57 -05:00
|
|
|
<filename>playlist.m3u</filename>
|
2015-05-21 12:50:22 -04:00
|
|
|
|
2017-11-23 12:34:57 -05:00
|
|
|
<!-- Setting to shuffle playlists -->
|
|
|
|
<shuffle>Yes</shuffle>
|
2015-05-21 12:50:22 -04:00
|
|
|
|
2017-11-23 12:34:57 -05:00
|
|
|
<!-- Setting whether to stream intake indefinitely or only once -->
|
2018-01-22 11:34:31 -05:00
|
|
|
<stream_once>Yes</stream_once>
|
2017-11-23 12:34:57 -05:00
|
|
|
</intake>
|
|
|
|
</intakes>
|
Refactor configuration (work in progress)
* Move -m and -n command line options into the config file
* Restructure configuration file:
- Group into "server", "stream", "media", "metadata", "decoders", and
"encoders"
- Untangle decoder and encoder:
o Decoders match on file extensions and convert to a canonical "internal"
format
o Encoders create one of the supported stream formats, potentially using
different parameters (like bitrate)
- Consistently specify stream format
- Enable reencoding by selecting an encoder
* Architecturally separate configuration file storage from parsing
- Allows for different configuration back-ends in the future, like
YAML, SQL, REST API, ...
* Support roll-back in case of error on (re)load
* Anticipate HTTPS support
2015-05-02 06:48:53 -04:00
|
|
|
|
2015-05-21 12:50:22 -04:00
|
|
|
<!--
|
|
|
|
Metadata configuration
|
|
|
|
-->
|
Refactor configuration (work in progress)
* Move -m and -n command line options into the config file
* Restructure configuration file:
- Group into "server", "stream", "media", "metadata", "decoders", and
"encoders"
- Untangle decoder and encoder:
o Decoders match on file extensions and convert to a canonical "internal"
format
o Encoders create one of the supported stream formats, potentially using
different parameters (like bitrate)
- Consistently specify stream format
- Enable reencoding by selecting an encoder
* Architecturally separate configuration file storage from parsing
- Allows for different configuration back-ends in the future, like
YAML, SQL, REST API, ...
* Support roll-back in case of error on (re)load
* Anticipate HTTPS support
2015-05-02 06:48:53 -04:00
|
|
|
<metadata>
|
2015-05-21 12:50:22 -04:00
|
|
|
<!-- Program to query for metadata instead of from media files -->
|
2017-09-15 12:52:47 -04:00
|
|
|
<!-- <program>meta.sh</program> -->
|
2015-05-21 12:50:22 -04:00
|
|
|
|
|
|
|
<!-- Metadata format -->
|
|
|
|
<format_str>@a@ - @t@</format_str>
|
|
|
|
|
2018-01-22 11:34:31 -05:00
|
|
|
<!-- Interval for additional metadata refreshes (default: -1 (none)) -->
|
2015-05-21 12:50:22 -04:00
|
|
|
<refresh_interval>-1</refresh_interval>
|
|
|
|
|
2018-01-22 11:34:31 -05:00
|
|
|
<!-- Setting to clean up extraneous whitespace (default: no) -->
|
2015-05-21 12:50:22 -04:00
|
|
|
<normalize_strings>Yes</normalize_strings>
|
|
|
|
|
2018-01-22 11:34:31 -05:00
|
|
|
<!-- Setting to suppress all metadata udpates (default: no) -->
|
|
|
|
<no_updates>Yes</no_updates>
|
Refactor configuration (work in progress)
* Move -m and -n command line options into the config file
* Restructure configuration file:
- Group into "server", "stream", "media", "metadata", "decoders", and
"encoders"
- Untangle decoder and encoder:
o Decoders match on file extensions and convert to a canonical "internal"
format
o Encoders create one of the supported stream formats, potentially using
different parameters (like bitrate)
- Consistently specify stream format
- Enable reencoding by selecting an encoder
* Architecturally separate configuration file storage from parsing
- Allows for different configuration back-ends in the future, like
YAML, SQL, REST API, ...
* Support roll-back in case of error on (re)load
* Anticipate HTTPS support
2015-05-02 06:48:53 -04:00
|
|
|
</metadata>
|
|
|
|
|
2015-05-21 12:50:22 -04:00
|
|
|
<!--
|
|
|
|
Decoder configurations
|
|
|
|
-->
|
Refactor configuration (work in progress)
* Move -m and -n command line options into the config file
* Restructure configuration file:
- Group into "server", "stream", "media", "metadata", "decoders", and
"encoders"
- Untangle decoder and encoder:
o Decoders match on file extensions and convert to a canonical "internal"
format
o Encoders create one of the supported stream formats, potentially using
different parameters (like bitrate)
- Consistently specify stream format
- Enable reencoding by selecting an encoder
* Architecturally separate configuration file storage from parsing
- Allows for different configuration back-ends in the future, like
YAML, SQL, REST API, ...
* Support roll-back in case of error on (re)load
* Anticipate HTTPS support
2015-05-02 06:48:53 -04:00
|
|
|
<decoders>
|
|
|
|
<decoder>
|
2015-05-21 12:50:22 -04:00
|
|
|
<!-- Decoder name -->
|
|
|
|
<name>OggDec</name>
|
|
|
|
<!-- Program and options -->
|
2015-05-21 17:30:51 -04:00
|
|
|
<program>oggdec -R -b 16 -e 1 -s 1 -o - @T@</program>
|
2015-05-21 12:50:22 -04:00
|
|
|
<!-- File extensions to use this decoder for -->
|
|
|
|
<file_ext>.ogg</file_ext>
|
|
|
|
<file_ext>.oga</file_ext>
|
|
|
|
</decoder>
|
|
|
|
|
|
|
|
<decoder>
|
|
|
|
<name>MadPlay</name>
|
|
|
|
<program>madplay -b 16 -R 44100 -S -o raw:- @T@</program>
|
|
|
|
<file_ext>.mp3</file_ext>
|
|
|
|
</decoder>
|
|
|
|
|
|
|
|
<decoder>
|
|
|
|
<name>Flac</name>
|
|
|
|
<program>flac -s -d --force-raw-format --sign=signed --endian=little -o - @T@</program>
|
|
|
|
<file_ext>.flac</file_ext>
|
Refactor configuration (work in progress)
* Move -m and -n command line options into the config file
* Restructure configuration file:
- Group into "server", "stream", "media", "metadata", "decoders", and
"encoders"
- Untangle decoder and encoder:
o Decoders match on file extensions and convert to a canonical "internal"
format
o Encoders create one of the supported stream formats, potentially using
different parameters (like bitrate)
- Consistently specify stream format
- Enable reencoding by selecting an encoder
* Architecturally separate configuration file storage from parsing
- Allows for different configuration back-ends in the future, like
YAML, SQL, REST API, ...
* Support roll-back in case of error on (re)load
* Anticipate HTTPS support
2015-05-02 06:48:53 -04:00
|
|
|
</decoder>
|
|
|
|
</decoders>
|
|
|
|
|
2015-05-21 12:50:22 -04:00
|
|
|
<!--
|
|
|
|
Encoder configurations
|
|
|
|
-->
|
Refactor configuration (work in progress)
* Move -m and -n command line options into the config file
* Restructure configuration file:
- Group into "server", "stream", "media", "metadata", "decoders", and
"encoders"
- Untangle decoder and encoder:
o Decoders match on file extensions and convert to a canonical "internal"
format
o Encoders create one of the supported stream formats, potentially using
different parameters (like bitrate)
- Consistently specify stream format
- Enable reencoding by selecting an encoder
* Architecturally separate configuration file storage from parsing
- Allows for different configuration back-ends in the future, like
YAML, SQL, REST API, ...
* Support roll-back in case of error on (re)load
* Anticipate HTTPS support
2015-05-02 06:48:53 -04:00
|
|
|
<encoders>
|
|
|
|
<encoder>
|
2015-05-21 12:50:22 -04:00
|
|
|
<!-- Encoder name -->
|
|
|
|
<name>OggEnc-Q1.5</name>
|
|
|
|
<!-- Output stream format -->
|
2020-01-24 17:27:02 -05:00
|
|
|
<format>Ogg</format>
|
2015-05-21 12:50:22 -04:00
|
|
|
<!-- Program and options -->
|
2020-02-11 18:59:18 -05:00
|
|
|
<program>oggenc -r -B 16 -C 2 -R 44100 --raw-endianness 0 -q 1.5 -t @M@ -</program>
|
2015-05-21 12:50:22 -04:00
|
|
|
</encoder>
|
|
|
|
|
2020-02-11 18:59:44 -05:00
|
|
|
<encoder>
|
|
|
|
<name>Opus-VBR96</name>
|
|
|
|
<format>Ogg</format>
|
|
|
|
<program>opusenc --vbr --bitrate 96 --title @t@ --artist @a@ --raw --raw-rate 44100 - -</program>
|
|
|
|
</encoder>
|
|
|
|
|
2015-05-21 12:50:22 -04:00
|
|
|
<encoder>
|
|
|
|
<name>Lame-CBR128</name>
|
|
|
|
<format>MP3</format>
|
|
|
|
<program>lame --preset cbr 128 -r -s 44.1 --bitwidth 16 - -</program>
|
Refactor configuration (work in progress)
* Move -m and -n command line options into the config file
* Restructure configuration file:
- Group into "server", "stream", "media", "metadata", "decoders", and
"encoders"
- Untangle decoder and encoder:
o Decoders match on file extensions and convert to a canonical "internal"
format
o Encoders create one of the supported stream formats, potentially using
different parameters (like bitrate)
- Consistently specify stream format
- Enable reencoding by selecting an encoder
* Architecturally separate configuration file storage from parsing
- Allows for different configuration back-ends in the future, like
YAML, SQL, REST API, ...
* Support roll-back in case of error on (re)load
* Anticipate HTTPS support
2015-05-02 06:48:53 -04:00
|
|
|
</encoder>
|
|
|
|
</encoders>
|
|
|
|
|
|
|
|
</ezstream>
|