mirror of
https://github.com/fergalmoran/dss.docker.git
synced 2025-12-22 09:18:29 +00:00
Added deleted files
This commit is contained in:
22
radio/LICENSE.md
Normal file
22
radio/LICENSE.md
Normal file
@@ -0,0 +1,22 @@
|
||||
The MIT License
|
||||
===============
|
||||
|
||||
Copyright (c) **2013-2015 Manfred Touron <m@42.am> ([@moul](https://twitter.com/moul))**
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
60
radio/README.md
Normal file
60
radio/README.md
Normal file
@@ -0,0 +1,60 @@
|
||||
# Icecast in Docker [](https://travis-ci.org/moul/docker-icecast)
|
||||
|
||||
Icecast2 Dockerfile
|
||||
|
||||
[](https://index.docker.io/u/moul/icecast/)
|
||||
|
||||
## Run
|
||||
|
||||
Run with default password, export port 8000
|
||||
|
||||
```bash
|
||||
docker run -p 8000:8000 moul/icecast
|
||||
$BROWSER localhost:8000
|
||||
```
|
||||
|
||||
Run with custom password
|
||||
|
||||
```bash
|
||||
docker run -p 8000:8000 -e ICECAST_SOURCE_PASSWORD=aaaa -e ICECAST_ADMIN_PASSWORD=bbbb -e ICECAST_PASSWORD=cccc -e ICECAST_RELAY_PASSWORD=dddd moul/icecast
|
||||
```
|
||||
|
||||
Run with custom configuration
|
||||
|
||||
```bash
|
||||
docker run -p 8000:8000 -v /local/path/to/icecast/config:/etc/icecast2 moul/icecast
|
||||
docker run -p 8000:8000 -v /local/path/to/icecast.xml:/etc/icecast2/icecast.xml moul/icecast
|
||||
```
|
||||
|
||||
Extends Dockerfile
|
||||
|
||||
```Dockerfile
|
||||
FROM moul/icecast
|
||||
ADD ./icecast.xml /etc/icecast2
|
||||
```
|
||||
|
||||
Docker-compose
|
||||
|
||||
```yaml
|
||||
icecast:
|
||||
image: moul/icecast
|
||||
volumes:
|
||||
- logs:/var/log/icecast2
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
environment:
|
||||
- ICECAST_SOURCE_PASSWORD=aaa
|
||||
- ICECAST_ADMIN_PASSWORD=bbb
|
||||
- ICECAST_PASSWORD=ccc
|
||||
- ICECAST_RELAY_PASSWORD=ddd
|
||||
ports:
|
||||
- 8000:8000
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
- https://github.com/ultreme/scc-radio/
|
||||
|
||||
|
||||
## License
|
||||
|
||||
[MIT](https://github.com/moul/docker-icecast/blob/master/LICENSE.md)
|
||||
101
radio/etc/icecast2/admin/listclients.xsl
Normal file
101
radio/etc/icecast2/admin/listclients.xsl
Normal file
@@ -0,0 +1,101 @@
|
||||
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
|
||||
<xsl:output omit-xml-declaration="no" method="html" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
|
||||
<xsl:template match = "/icestats" >
|
||||
<html>
|
||||
<head>
|
||||
<title>Icecast Streaming Media Server</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||
</head>
|
||||
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
|
||||
<h2>Icecast2 Admin</h2>
|
||||
<br />
|
||||
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<table border="0" cellpadding="1" cellspacing="3">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a class="nav" href="stats.xsl">Admin Home</a>
|
||||
<a class="nav" href="listmounts.xsl">List Mountpoints</a>
|
||||
<a class="nav" href="moveclients.xsl">Move Listeners</a>
|
||||
<a class="nav" href="/status.xsl">Index</a>
|
||||
</td></tr>
|
||||
</table>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
|
||||
|
||||
<h1>Listener Stats</h1>
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<div class="newscontent">
|
||||
<xsl:for-each select="source">
|
||||
<div class="streamheader">
|
||||
<table cellspacing="0" cellpadding="0" >
|
||||
<colgroup align="left" />
|
||||
<colgroup align="right" width="300" />
|
||||
<tr>
|
||||
<td><h3>Mount Point <xsl:value-of select="@mount" /></h3></td>
|
||||
<xsl:choose>
|
||||
<xsl:when test="authenticator">
|
||||
<td align="right"><a class="auth" href="/auth.xsl">Login</a></td>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<td align="right">
|
||||
<a href="{@mount}.m3u">M3U</a>
|
||||
<a href="{@mount}.xspf">XSPF</a></td>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</tr></table>
|
||||
</div>
|
||||
|
||||
<table border="0" cellpadding="1" cellspacing="5" bgcolor="444444">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a class="nav2" href="listclients.xsl?mount={@mount}">List Clients</a>
|
||||
<a class="nav2" href="moveclients.xsl?mount={@mount}">Move Listeners</a>
|
||||
<a class="nav2" href="updatemetadata.xsl?mount={@mount}">Update Metadata</a>
|
||||
<a class="nav2" href="killsource.xsl?mount={@mount}">Kill Source</a>
|
||||
</td></tr>
|
||||
</table>
|
||||
<br />
|
||||
<table cellspacing="0" cellpadding="5" border="1" bordercolor="#C0C0C0" >
|
||||
<tr>
|
||||
<td ><center><b>IP</b></center></td>
|
||||
<td ><center><b>Seconds Connected</b></center></td>
|
||||
<td ><center><b>User Agent</b></center></td>
|
||||
<td ><center><b>Action</b></center></td>
|
||||
</tr>
|
||||
<xsl:variable name = "themount" ><xsl:value-of select="@mount" /></xsl:variable>
|
||||
<xsl:for-each select="listener">
|
||||
<tr>
|
||||
<td align="center"><xsl:value-of select="IP" /><xsl:if test="username"> (<xsl:value-of select="username" />)</xsl:if></td>
|
||||
<td align="center"><xsl:value-of select="Connected" /></td>
|
||||
<td align="center"><xsl:value-of select="UserAgent" /></td>
|
||||
<td align="center"><a href="killclient.xsl?mount={$themount}&id={ID}">Kick</a></td>
|
||||
</tr>
|
||||
</xsl:for-each>
|
||||
</table>
|
||||
<br />
|
||||
<br />
|
||||
</xsl:for-each>
|
||||
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
|
||||
</div>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
84
radio/etc/icecast2/admin/listmounts.xsl
Normal file
84
radio/etc/icecast2/admin/listmounts.xsl
Normal file
@@ -0,0 +1,84 @@
|
||||
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
|
||||
<xsl:output omit-xml-declaration="no" method="html" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
|
||||
<xsl:template match = "/icestats" >
|
||||
<html>
|
||||
<head>
|
||||
<title>Icecast Streaming Media Server</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||
</head>
|
||||
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
|
||||
<h2>Icecast2 Admin</h2>
|
||||
<br />
|
||||
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<table border="0" cellpadding="1" cellspacing="3">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a class="nav" href="stats.xsl">Admin Home</a>
|
||||
<a class="nav" href="listmounts.xsl">List Mountpoints</a>
|
||||
<a class="nav" href="moveclients.xsl">Move Listeners</a>
|
||||
<a class="nav" href="/status.xsl">Index</a>
|
||||
</td></tr>
|
||||
</table>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
|
||||
<h1>Active Mountpoints</h1>
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<div class="newscontent">
|
||||
<xsl:for-each select="source">
|
||||
<div class="streamheader">
|
||||
<table cellspacing="0" cellpadding="0" >
|
||||
<colgroup align="left" />
|
||||
<colgroup align="right" width="300" />
|
||||
<tr>
|
||||
<td><h3>Mount Point <xsl:value-of select="@mount" /></h3></td>
|
||||
<xsl:choose>
|
||||
<xsl:when test="authenticator">
|
||||
<td align="right"><a class="auth" href="/auth.xsl">Login</a></td>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<td align="right">
|
||||
<a href="{@mount}.m3u">M3U</a>
|
||||
<a href="{@mount}.xspf">XSPF</a></td>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</tr></table>
|
||||
</div>
|
||||
|
||||
<table border="0" cellpadding="1" cellspacing="5" bgcolor="444444">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a class="nav2" href="listclients.xsl?mount={@mount}">List Clients</a>
|
||||
<a class="nav2" href="moveclients.xsl?mount={@mount}">Move Listeners</a>
|
||||
<a class="nav2" href="updatemetadata.xsl?mount={@mount}">Update Metadata</a>
|
||||
<a class="nav2" href="killsource.xsl?mount={@mount}">Kill Source</a>
|
||||
<xsl:if test="authenticator"><a class="nav2" href="manageauth.xsl?mount={@mount}">Manage Authentication</a></xsl:if>
|
||||
</td></tr>
|
||||
</table>
|
||||
<br />
|
||||
<p><xsl:value-of select="listeners" /> Listener(s)</p>
|
||||
<br></br>
|
||||
</xsl:for-each>
|
||||
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
|
||||
</div>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
98
radio/etc/icecast2/admin/manageauth.xsl
Normal file
98
radio/etc/icecast2/admin/manageauth.xsl
Normal file
@@ -0,0 +1,98 @@
|
||||
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
|
||||
<xsl:output omit-xml-declaration="no" method="html" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
|
||||
<xsl:template match = "/icestats" >
|
||||
<html>
|
||||
<head>
|
||||
<title>Icecast Streaming Media Server</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||
</head>
|
||||
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
|
||||
<h2>Icecast2 Admin</h2>
|
||||
<br />
|
||||
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<table border="0" cellpadding="1" cellspacing="3">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a class="nav" href="stats.xsl">Admin Home</a>
|
||||
<a class="nav" href="listmounts.xsl">List Mountpoints</a>
|
||||
<a class="nav" href="moveclients.xsl">Move Listeners</a>
|
||||
<a class="nav" href="/status.xsl">Index</a>
|
||||
</td></tr>
|
||||
</table>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<div class="newscontent">
|
||||
<xsl:for-each select="iceresponse">
|
||||
<xsl:value-of select="message" />
|
||||
</xsl:for-each>
|
||||
<xsl:for-each select="source">
|
||||
<h3>
|
||||
<xsl:if test="server_name"><xsl:value-of select="server_name" /> </xsl:if>
|
||||
(<xsl:value-of select="@mount" />)</h3>
|
||||
<table border="0" cellpadding="1" cellspacing="5" bgcolor="444444">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a class="nav2" href="listclients.xsl?mount={@mount}">List Clients</a>
|
||||
<a class="nav2" href="moveclients.xsl?mount={@mount}">Move Listeners</a>
|
||||
<a class="nav2" href="updatemetadata.xsl?mount={@mount}">Update Metadata</a>
|
||||
<a class="nav2" href="killsource.xsl?mount={@mount}">Kill Source</a>
|
||||
</td></tr>
|
||||
</table>
|
||||
<br></br>
|
||||
<form method="GET" action="manageauth.xsl">
|
||||
<table cellpadding="2" cellspacing="4" border="0" >
|
||||
<tr>
|
||||
<td ><b>User Id</b></td>
|
||||
<td ></td>
|
||||
</tr>
|
||||
<xsl:variable name = "themount" ><xsl:value-of select="@mount" /></xsl:variable>
|
||||
<xsl:for-each select="User">
|
||||
<tr>
|
||||
<td><xsl:value-of select="username" /></td>
|
||||
<td><a class="nav2" href="manageauth.xsl?mount={$themount}&username={username}&action=delete">delete</a></td>
|
||||
</tr>
|
||||
</xsl:for-each>
|
||||
</table>
|
||||
<table cellpadding="2" cellspacing="4" border="0" >
|
||||
<tr>
|
||||
<td ><b>User Id</b></td>
|
||||
<td ><b>Password</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td ><input type="text" name="username" /></td>
|
||||
<td ><input type="text" name="password" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2"><input type="Submit" name="Submit" value="Add New User" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
<input type="hidden" name="mount" value="{@mount}"/>
|
||||
<input type="hidden" name="action" value="add"/>
|
||||
</form>
|
||||
<br />
|
||||
<br />
|
||||
</xsl:for-each>
|
||||
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
|
||||
</div>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
63
radio/etc/icecast2/admin/moveclients.xsl
Normal file
63
radio/etc/icecast2/admin/moveclients.xsl
Normal file
@@ -0,0 +1,63 @@
|
||||
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
|
||||
<xsl:output omit-xml-declaration="no" method="html" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
|
||||
<xsl:template match = "/icestats" >
|
||||
<html>
|
||||
<head>
|
||||
<title>Icecast Streaming Media Server</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||
</head>
|
||||
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
|
||||
<h2>Icecast2 Admin</h2>
|
||||
<br />
|
||||
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<table border="0" cellpadding="1" cellspacing="3">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a class="nav" href="stats.xsl">Admin Home</a>
|
||||
<a class="nav" href="listmounts.xsl">List Mountpoints</a>
|
||||
<a class="nav" href="moveclients.xsl">Move Listeners</a>
|
||||
<a class="nav" href="/status.xsl">Index</a>
|
||||
</td></tr>
|
||||
</table>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<xsl:variable name = "currentmount" ><xsl:value-of select="current_source" /></xsl:variable>
|
||||
<h1>Moving Listeners From (<xsl:value-of select="current_source" />)</h1>
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<div class="newscontent">
|
||||
<h3>Move to which mountpoint ?</h3>
|
||||
<xsl:for-each select="source">
|
||||
<table border="0" cellpadding="1" cellspacing="5" >
|
||||
<tr>
|
||||
<td>Move from (<xsl:copy-of select="$currentmount" />) to (<xsl:value-of select="@mount" />)</td>
|
||||
<td><xsl:value-of select="listeners" /> Listeners</td>
|
||||
<td><a class="nav2" href="moveclients.xsl?mount={$currentmount}&destination={@mount}">Move Clients</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<br />
|
||||
<br />
|
||||
</xsl:for-each>
|
||||
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
|
||||
</div>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
56
radio/etc/icecast2/admin/response.xsl
Normal file
56
radio/etc/icecast2/admin/response.xsl
Normal file
@@ -0,0 +1,56 @@
|
||||
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
|
||||
<xsl:output omit-xml-declaration="no" method="html" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
|
||||
<xsl:template match = "/iceresponse" >
|
||||
<html>
|
||||
<head>
|
||||
<title>Icecast Streaming Media Server</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||
</head>
|
||||
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
|
||||
<img align="left" src="/icecast.png" /><h2><center>Icecast2 Admin</center></h2>
|
||||
<br />
|
||||
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<table border="0" cellpadding="1" cellspacing="3">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a class="nav" href="stats.xsl">Admin Home</a> |
|
||||
<a class="nav" href="listmounts.xsl">List Mountpoints</a> |
|
||||
<a class="nav" href="moveclients.xsl">Move Listeners</a> |
|
||||
<a class="nav" href="/status.xsl">Index</a>
|
||||
</td></tr>
|
||||
</table>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<h1>Icecast Server Response</h1>
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<div class="newscontent">
|
||||
<h3>Response</h3>
|
||||
<xsl:for-each select="/iceresponse">
|
||||
Message : <xsl:value-of select="message" /><br></br>
|
||||
Return Code: <xsl:value-of select="return" /><br></br>
|
||||
</xsl:for-each>
|
||||
<br />
|
||||
<br />
|
||||
</div>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
124
radio/etc/icecast2/admin/stats.xsl
Normal file
124
radio/etc/icecast2/admin/stats.xsl
Normal file
@@ -0,0 +1,124 @@
|
||||
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
|
||||
<xsl:output omit-xml-declaration="no" method="html" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
|
||||
<xsl:template match = "/icestats" >
|
||||
<html>
|
||||
<head>
|
||||
<title>Icecast Streaming Media Server</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||
</head>
|
||||
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
|
||||
<h2>Icecast2 Admin</h2>
|
||||
<br />
|
||||
<!--header menu -->
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<table border="0" cellpadding="1" cellspacing="3">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a class="nav" href="stats.xsl">Admin Home</a>
|
||||
<a class="nav" href="listmounts.xsl">List Mountpoints</a>
|
||||
<a class="nav" href="moveclients.xsl">Move Listeners</a>
|
||||
<a class="nav" href="/status.xsl">Index</a>
|
||||
</td></tr>
|
||||
</table>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<!--end header menu -->
|
||||
|
||||
<!--global server stats-->
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<div class="newscontent">
|
||||
<h3>Global Server Stats</h3>
|
||||
<table border="0" cellpadding="4">
|
||||
<xsl:for-each select="/icestats">
|
||||
<xsl:for-each select="*">
|
||||
<xsl:if test = "name()!='source'">
|
||||
<tr>
|
||||
<td width="130"><xsl:value-of select="name()" /></td>
|
||||
<td class="streamdata"><xsl:value-of select="." /></td>
|
||||
</tr>
|
||||
</xsl:if>
|
||||
</xsl:for-each>
|
||||
</xsl:for-each>
|
||||
</table>
|
||||
</div>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<!--end global server stats-->
|
||||
|
||||
<!--mount point stats-->
|
||||
<xsl:for-each select="source">
|
||||
<xsl:if test = "listeners!=''">
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<div class="newscontent">
|
||||
<div class="streamheader">
|
||||
<table cellspacing="0" cellpadding="0" >
|
||||
<colgroup align="left" />
|
||||
<colgroup align="right" width="300" />
|
||||
<tr>
|
||||
<td><h3>Mount Point <xsl:value-of select="@mount" /></h3></td>
|
||||
<xsl:choose>
|
||||
<xsl:when test="authenticator">
|
||||
<td align="right"><a class="auth" href="/auth.xsl">Login</a></td>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<td align="right">
|
||||
<a href="{@mount}.m3u">M3U</a>
|
||||
<a href="{@mount}.xspf">XSPF</a></td>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</tr></table>
|
||||
</div>
|
||||
<table border="0" cellpadding="1" cellspacing="5" bgcolor="444444">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a class="nav2" href="listclients.xsl?mount={@mount}">List Clients</a>
|
||||
<a class="nav2" href="moveclients.xsl?mount={@mount}">Move MountPoints</a>
|
||||
<a class="nav2" href="updatemetadata.xsl?mount={@mount}">Update Metadata</a>
|
||||
<a class="nav2" href="killsource.xsl?mount={@mount}">Kill Source</a>
|
||||
<xsl:if test="authenticator"><a class="nav2" href="manageauth.xsl?mount={@mount}">Manage Authentication</a></xsl:if>
|
||||
</td></tr>
|
||||
</table>
|
||||
<br />
|
||||
<table cellpadding="5" cellspacing="0" border="0">
|
||||
<xsl:for-each select="*">
|
||||
<tr>
|
||||
<td width="130"><xsl:value-of select="name()" /></td>
|
||||
<td class="streamdata"><xsl:value-of select="." /></td>
|
||||
</tr>
|
||||
</xsl:for-each>
|
||||
</table>
|
||||
</div>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
</xsl:if>
|
||||
</xsl:for-each>
|
||||
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
|
||||
|
||||
|
||||
<!--end mount point stats-->
|
||||
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
67
radio/etc/icecast2/admin/updatemetadata.xsl
Normal file
67
radio/etc/icecast2/admin/updatemetadata.xsl
Normal file
@@ -0,0 +1,67 @@
|
||||
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
|
||||
<xsl:output omit-xml-declaration="no" method="html" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
|
||||
<xsl:template match = "/icestats" >
|
||||
<html>
|
||||
<head>
|
||||
<title>Icecast Streaming Media Server</title>
|
||||
<link rel="stylesheet" type="text/css" href="/style.css" />
|
||||
</head>
|
||||
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
|
||||
<h2>Icecast2 Admin</h2>
|
||||
<br />
|
||||
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<table border="0" cellpadding="1" cellspacing="3">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a class="nav" href="stats.xsl">Admin Home</a>
|
||||
<a class="nav" href="listmounts.xsl">List Mountpoints</a>
|
||||
<a class="nav" href="moveclients.xsl">Move Listeners</a>
|
||||
<a class="nav" href="/status.xsl">Index</a>
|
||||
</td></tr>
|
||||
</table>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<h1>Update Metadata</h1>
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<div class="newscontent">
|
||||
<xsl:for-each select="source">
|
||||
<h3>
|
||||
<xsl:if test="server_name"><xsl:value-of select="server_name" /> </xsl:if>
|
||||
(<xsl:value-of select="@mount" />)</h3>
|
||||
|
||||
<form method="GET" action="/admin/metadata.xsl">
|
||||
<table border="0" cellpadding="4">
|
||||
<tr><td>Metadata : <input type="text" name="song"/></td></tr>
|
||||
<tr><td><input type="Submit" value="Update"/></td></tr>
|
||||
</table>
|
||||
<input type="hidden" name="mount" value="{@mount}"/>
|
||||
<input type="hidden" name="mode" value="updinfo"/>
|
||||
<input type="hidden" name="charset" value="UTF-8"/>
|
||||
</form>
|
||||
|
||||
<br />
|
||||
<br />
|
||||
</xsl:for-each>
|
||||
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
|
||||
</div>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="poster">Support icecast development at <a class="nav" href="http://www.icecast.org">www.icecast.org</a></div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
74
radio/etc/icecast2/admin/xspf.xsl
Normal file
74
radio/etc/icecast2/admin/xspf.xsl
Normal file
@@ -0,0 +1,74 @@
|
||||
<!--
|
||||
XSPF xslt stylesheet for Icecast 2.3.2 and above
|
||||
Copyright (C) 2007 Thomas B. Ruecker, tbr@ruecker-itk.de
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the
|
||||
Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
-->
|
||||
|
||||
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
|
||||
<xsl:output omit-xml-declaration="no" media-type="application/xspf+xml"
|
||||
method="xml" indent="yes" encoding="UTF-8" />
|
||||
<xsl:template match = "/icestats" >
|
||||
<playlist version="1" xmlns="http://xspf.org/ns/0/">
|
||||
<title><xsl:value-of select="server" /></title>
|
||||
<creator><xsl:value-of select="server" /></creator>
|
||||
<trackList >
|
||||
<!-- end of "header" -->
|
||||
|
||||
<xsl:for-each select="source">
|
||||
|
||||
<track>
|
||||
<location><xsl:value-of select="listenurl" /></location>
|
||||
|
||||
|
||||
<xsl:if test="artist"><creator><xsl:value-of select="artist" /></creator></xsl:if>
|
||||
<title><xsl:value-of select="title" /></title>
|
||||
<!-- The <xsl:text>\n</xsl:text> elements in the following part are used
|
||||
to enforce linebreaks this format seems to be expected by clients -->
|
||||
<annotation>
|
||||
<xsl:if test="server_name">Stream Title: <xsl:value-of select="server_name" /><xsl:text>
|
||||
</xsl:text></xsl:if>
|
||||
<xsl:if test="server_description">Stream Description: <xsl:value-of select="server_description" /></xsl:if>
|
||||
Content Type:<xsl:value-of select="server_type" /><xsl:text>
|
||||
</xsl:text>
|
||||
<xsl:if test="bitrate">Bitrate: <xsl:value-of select="bitrate" /><xsl:text>
|
||||
</xsl:text></xsl:if>
|
||||
<xsl:if test="quality">Quality: <xsl:value-of select="quality" /><xsl:text>
|
||||
</xsl:text></xsl:if>
|
||||
<xsl:if test="video_quality">Video Quality: <xsl:value-of select="video_quality" /><xsl:text>
|
||||
</xsl:text></xsl:if>
|
||||
<xsl:if test="frame_size">Framesize: <xsl:value-of select="frame_size" /><xsl:text>
|
||||
</xsl:text></xsl:if>
|
||||
<xsl:if test="frame_rate">Framerate: <xsl:value-of select="frame_rate" /><xsl:text>
|
||||
</xsl:text></xsl:if>
|
||||
<xsl:if test="listeners">Current Listeners: <xsl:value-of select="listeners" /><xsl:text>
|
||||
</xsl:text></xsl:if>
|
||||
<xsl:if test="listener_peak">Peak Listeners: <xsl:value-of select="listener_peak" /><xsl:text>
|
||||
</xsl:text></xsl:if>
|
||||
<xsl:if test="genre">Stream Genre: <xsl:value-of select="genre" /></xsl:if>
|
||||
</annotation>
|
||||
|
||||
<xsl:if test="server_url"><info><xsl:value-of select="server_url" /></info></xsl:if>
|
||||
|
||||
</track>
|
||||
|
||||
</xsl:for-each>
|
||||
</trackList>
|
||||
</playlist>
|
||||
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
|
||||
174
radio/etc/icecast2/icecast.xml
Normal file
174
radio/etc/icecast2/icecast.xml
Normal file
@@ -0,0 +1,174 @@
|
||||
<icecast>
|
||||
<limits>
|
||||
<clients>1000</clients>
|
||||
<sources>42</sources>
|
||||
<threadpool>5</threadpool>
|
||||
<queue-size>524288</queue-size>
|
||||
<client-timeout>30</client-timeout>
|
||||
<header-timeout>15</header-timeout>
|
||||
<source-timeout>10</source-timeout>
|
||||
<!-- If enabled, this will provide a burst of data when a client
|
||||
first connects, thereby significantly reducing the startup
|
||||
time for listeners that do substantial buffering. However,
|
||||
it also significantly increases latency between the source
|
||||
client and listening client. For low-latency setups, you
|
||||
might want to disable this. -->
|
||||
<burst-on-connect>1</burst-on-connect>
|
||||
<!-- same as burst-on-connect, but this allows for being more
|
||||
specific on how much to burst. Most people won't need to
|
||||
change from the default 64k. Applies to all mountpoints -->
|
||||
<burst-size>65535</burst-size>
|
||||
</limits>
|
||||
|
||||
<authentication>
|
||||
<!-- Sources log in with username 'source' -->
|
||||
<source-password>hackme</source-password>
|
||||
<!-- Relays log in username 'relay' -->
|
||||
<relay-password>hackme</relay-password>
|
||||
|
||||
<!-- Admin logs in with the username given below -->
|
||||
<admin-user>admin</admin-user>
|
||||
<admin-password>hackme</admin-password>
|
||||
</authentication>
|
||||
|
||||
<!-- set the mountpoint for a shoutcast source to use, the default if not
|
||||
specified is /stream but you can change it here if an alternative is
|
||||
wanted or an extension is required
|
||||
<shoutcast-mount>/live.nsv</shoutcast-mount>
|
||||
-->
|
||||
|
||||
<!-- Uncomment this if you want directory listings -->
|
||||
<!--
|
||||
<directory>
|
||||
<yp-url-timeout>15</yp-url-timeout>
|
||||
<yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
|
||||
</directory>
|
||||
-->
|
||||
|
||||
<!-- This is the hostname other people will use to connect to your server.
|
||||
It affects mainly the urls generated by Icecast for playlists and yp
|
||||
listings. -->
|
||||
<hostname>localhost</hostname>
|
||||
|
||||
<!-- You may have multiple <listener> elements -->
|
||||
<listen-socket>
|
||||
<port>8000</port>
|
||||
<!-- <bind-address>127.0.0.1</bind-address> -->
|
||||
<!-- <shoutcast-mount>/stream</shoutcast-mount> -->
|
||||
</listen-socket>
|
||||
<!--
|
||||
<listen-socket>
|
||||
<port>8001</port>
|
||||
</listen-socket>
|
||||
-->
|
||||
|
||||
<!--<master-server>127.0.0.1</master-server>-->
|
||||
<!--<master-server-port>8001</master-server-port>-->
|
||||
<!--<master-update-interval>120</master-update-interval>-->
|
||||
<!--<master-password>hackme</master-password>-->
|
||||
|
||||
<!-- setting this makes all relays on-demand unless overridden, this is
|
||||
useful for master relays which do not have <relay> definitions here.
|
||||
The default is 0 -->
|
||||
<!--<relays-on-demand>1</relays-on-demand>-->
|
||||
|
||||
<!--
|
||||
<relay>
|
||||
<server>127.0.0.1</server>
|
||||
<port>8001</port>
|
||||
<mount>/example.ogg</mount>
|
||||
<local-mount>/different.ogg</local-mount>
|
||||
<on-demand>0</on-demand>
|
||||
|
||||
<relay-shoutcast-metadata>0</relay-shoutcast-metadata>
|
||||
</relay>
|
||||
-->
|
||||
|
||||
<!-- Only define a <mount> section if you want to use advanced options,
|
||||
like alternative usernames or passwords
|
||||
<mount>
|
||||
<mount-name>/example-complex.ogg</mount-name>
|
||||
|
||||
<username>othersource</username>
|
||||
<password>hackmemore</password>
|
||||
|
||||
<max-listeners>1</max-listeners>
|
||||
<dump-file>/tmp/dump-example1.ogg</dump-file>
|
||||
<burst-size>65536</burst-size>
|
||||
<fallback-mount>/example2.ogg</fallback-mount>
|
||||
<fallback-override>1</fallback-override>
|
||||
<fallback-when-full>1</fallback-when-full>
|
||||
<intro>/example_intro.ogg</intro>
|
||||
<hidden>1</hidden>
|
||||
<no-yp>1</no-yp>
|
||||
<authentication type="htpasswd">
|
||||
<option name="filename" value="myauth"/>
|
||||
<option name="allow_duplicate_users" value="0"/>
|
||||
</authentication>
|
||||
<on-connect>/home/icecast/bin/stream-start</on-connect>
|
||||
<on-disconnect>/home/icecast/bin/stream-stop</on-disconnect>
|
||||
</mount>
|
||||
|
||||
<mount>
|
||||
<mount-name>/auth_example.ogg</mount-name>
|
||||
<authentication type="url">
|
||||
<option name="mount_add" value="http://myauthserver.net/notify_mount.php"/>
|
||||
<option name="mount_remove" value="http://myauthserver.net/notify_mount.php"/>
|
||||
<option name="listener_add" value="http://myauthserver.net/notify_listener.php"/>
|
||||
<option name="listener_remove" value="http://myauthserver.net/notify_listener.php"/>
|
||||
</authentication>
|
||||
</mount>
|
||||
|
||||
-->
|
||||
|
||||
<fileserve>1</fileserve>
|
||||
|
||||
<paths>
|
||||
<!-- basedir is only used if chroot is enabled -->
|
||||
<basedir>/usr/share/icecast2</basedir>
|
||||
|
||||
<!-- Note that if <chroot> is turned on below, these paths must both
|
||||
be relative to the new root, not the original root -->
|
||||
<logdir>/var/log/icecast2</logdir>
|
||||
<webroot>/usr/share/icecast2/web</webroot>
|
||||
<adminroot>/usr/share/icecast2/admin</adminroot>
|
||||
<!-- <pidfile>/usr/share/icecast2/icecast.pid</pidfile> -->
|
||||
|
||||
<!-- Aliases: treat requests for 'source' path as being for 'dest' path
|
||||
May be made specific to a port or bound address using the "port"
|
||||
and "bind-address" attributes.
|
||||
-->
|
||||
<!--
|
||||
<alias source="/foo" dest="/bar"/>
|
||||
-->
|
||||
<!-- Aliases: can also be used for simple redirections as well,
|
||||
this example will redirect all requests for http://server:port/ to
|
||||
the status page
|
||||
-->
|
||||
<alias source="/" dest="/status.xsl"/>
|
||||
</paths>
|
||||
|
||||
<logging>
|
||||
<accesslog>access.log</accesslog>
|
||||
<errorlog>error.log</errorlog>
|
||||
<!-- <playlistlog>playlist.log</playlistlog> -->
|
||||
<loglevel>3</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
|
||||
<logsize>10000</logsize> <!-- Max size of a logfile -->
|
||||
<!-- If logarchive is enabled (1), then when logsize is reached
|
||||
the logfile will be moved to [error|access|playlist].log.DATESTAMP,
|
||||
otherwise it will be moved to [error|access|playlist].log.old.
|
||||
Default is non-archive mode (i.e. overwrite)
|
||||
-->
|
||||
<!-- <logarchive>1</logarchive> -->
|
||||
</logging>
|
||||
|
||||
<security>
|
||||
<chroot>0</chroot>
|
||||
<!--
|
||||
<changeowner>
|
||||
<user>nobody</user>
|
||||
<group>nogroup</group>
|
||||
</changeowner>
|
||||
-->
|
||||
</security>
|
||||
</icecast>
|
||||
57
radio/etc/icecast2/web/auth.xsl
Normal file
57
radio/etc/icecast2/web/auth.xsl
Normal file
@@ -0,0 +1,57 @@
|
||||
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
|
||||
<xsl:output omit-xml-declaration="no" method="html" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
|
||||
<xsl:template match = "/icestats" >
|
||||
<html>
|
||||
<head>
|
||||
<title>Icecast Streaming Media Server</title>
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
</head>
|
||||
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
|
||||
<table border="0" width="100%%">
|
||||
<tr>
|
||||
<td width="50"></td>
|
||||
<td>
|
||||
<h2>Authorization Page</h2>
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<div class="newscontent">
|
||||
<xsl:for-each select="source">
|
||||
<xsl:choose>
|
||||
<xsl:when test="listeners">
|
||||
<xsl:if test="authenticator">
|
||||
<xsl:if test="server_name"><xsl:value-of select="server_name" /> </xsl:if>
|
||||
<h3>(<xsl:value-of select="@mount" />)</h3>
|
||||
<form method="GET" action="/admin/buildm3u">
|
||||
<table border="0" cellpadding="4">
|
||||
<tr><td>Username : <input type="text" name="username"/></td></tr>
|
||||
<tr><td>Password : <input type="password" name="password"/></td></tr>
|
||||
<tr><td><input type="Submit" value="Login"/></td></tr>
|
||||
</table>
|
||||
<input type="hidden" name="mount" value="{@mount}"/>
|
||||
</form>
|
||||
</xsl:if>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<h3><xsl:value-of select="@mount" /> - Not Connected</h3>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<br></br>
|
||||
<br></br>
|
||||
</xsl:for-each>
|
||||
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
|
||||
</div>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<br></br><br></br>
|
||||
</td>
|
||||
<td width="25"></td></tr>
|
||||
</table>
|
||||
<div class="poster">Support icecast development at <a class="nav" target="_blank" href="http://www.icecast.org">www.icecast.org</a></div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
91
radio/etc/icecast2/web/server_version.xsl
Normal file
91
radio/etc/icecast2/web/server_version.xsl
Normal file
@@ -0,0 +1,91 @@
|
||||
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
|
||||
<xsl:output omit-xml-declaration="no" method="html" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
|
||||
<xsl:template match = "/icestats" >
|
||||
<html>
|
||||
<head>
|
||||
<title>Icecast Streaming Media Server</title>
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
</head>
|
||||
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
|
||||
<h2>Server Information</h2>
|
||||
<br />
|
||||
<!--index header menu -->
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<table border="0" width="100%" id="table1" cellspacing="0" cellpadding="4">
|
||||
<tr>
|
||||
<td bgcolor="#656565">
|
||||
<a class="nav" href="admin/">Administration</a>
|
||||
<a class="nav" href="status.xsl">Server Status</a>
|
||||
<a class="nav" href="server_version.xsl">Version</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<!--end index header menu -->
|
||||
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<div class="newscontent">
|
||||
<h3>Server Information</h3>
|
||||
<table border="0" cellpadding="4">
|
||||
<xsl:for-each select="/icestats">
|
||||
<tr>
|
||||
<td width="130">Location</td>
|
||||
<td class="streamdata"><xsl:value-of select="location" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="130">Admin</td>
|
||||
<td class="streamdata"><xsl:value-of select="admin" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="130">Host</td>
|
||||
<td class="streamdata"><xsl:value-of select="host" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="130">Version</td>
|
||||
<td class="streamdata"><xsl:value-of select="server_id" /></td>
|
||||
</tr>
|
||||
</xsl:for-each>
|
||||
<tr>
|
||||
<td width="130">Download</td>
|
||||
<td class="streamdata"><a class="nav" target="_blank" href="http://icecast.org/download.php">icecast.org</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="130">Subversion</td>
|
||||
<td class="streamdata"><a class="nav" target="_blank" href="http://icecast.org/svn.php">click here</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="130">Documentation</td>
|
||||
<td class="streamdata"><a class="nav" target="_blank" href="http://icecast.org/docs.php">click here</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="130">Stream Directory </td>
|
||||
<td class="streamdata"><a class="nav" target="_blank" href="http://dir.xiph.org/index.php">dir.xiph.org</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="130">Community</td>
|
||||
<td class="streamdata"><a class="nav" target="_blank" href="http://forum.icecast.org/">forum.icecast.org</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
|
||||
<div class="poster">Support icecast development at <a class="nav" target="_blank" href="http://www.icecast.org">www.icecast.org</a></div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
122
radio/etc/icecast2/web/status.xsl
Normal file
122
radio/etc/icecast2/web/status.xsl
Normal file
@@ -0,0 +1,122 @@
|
||||
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
|
||||
<xsl:output omit-xml-declaration="no" method="html" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
|
||||
<xsl:template match = "/icestats" >
|
||||
<html>
|
||||
<head>
|
||||
<title>Icecast Streaming Media Server</title>
|
||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
||||
</head>
|
||||
<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
|
||||
<h2>Icecast2 Status</h2>
|
||||
<br />
|
||||
<!--index header menu -->
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<table border="0" width="100%" id="table1" cellspacing="0" cellpadding="4">
|
||||
<tr>
|
||||
<td bgcolor="#656565">
|
||||
<a class="nav" href="admin/">Administration</a>
|
||||
<a class="nav" href="status.xsl">Server Status</a>
|
||||
<a class="nav" href="server_version.xsl">Version</a></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
<!--end index header menu -->
|
||||
<!--mount point stats-->
|
||||
<xsl:for-each select="source">
|
||||
<xsl:choose>
|
||||
<xsl:when test="listeners">
|
||||
<div class="roundcont">
|
||||
<div class="roundtop">
|
||||
<img src="/corner_topleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
<div class="newscontent">
|
||||
<div class="streamheader">
|
||||
<table cellspacing="0" cellpadding="0">
|
||||
<colgroup align="left" />
|
||||
<colgroup align="right" width="300" />
|
||||
<tr>
|
||||
<td><h3>Mount Point <xsl:value-of select="@mount" /></h3></td>
|
||||
<xsl:choose>
|
||||
<xsl:when test="authenticator">
|
||||
<td align="right"><a class="auth" href="/auth.xsl">Login</a></td>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<td align="right"> <a href="{@mount}.m3u">M3U</a> <a href="{@mount}.xspf">XSPF</a></td>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</tr></table>
|
||||
</div>
|
||||
|
||||
<table border="0" cellpadding="4">
|
||||
<xsl:if test="server_name">
|
||||
<tr><td>Stream Title:</td><td class="streamdata"> <xsl:value-of select="server_name" /></td></tr>
|
||||
</xsl:if>
|
||||
<xsl:if test="server_description">
|
||||
<tr><td>Stream Description:</td><td class="streamdata"> <xsl:value-of select="server_description" /></td></tr>
|
||||
</xsl:if>
|
||||
<xsl:if test="server_type">
|
||||
<tr><td>Content Type:</td><td class="streamdata"><xsl:value-of select="server_type" /></td></tr>
|
||||
</xsl:if>
|
||||
<xsl:if test="stream_start">
|
||||
<tr><td>Mount started:</td><td class="streamdata"><xsl:value-of select="stream_start" /></td></tr>
|
||||
</xsl:if>
|
||||
<xsl:if test="bitrate">
|
||||
<tr><td>Bitrate:</td><td class="streamdata"> <xsl:value-of select="bitrate" /></td></tr>
|
||||
</xsl:if>
|
||||
<xsl:if test="quality">
|
||||
<tr><td>Quality:</td><td class="streamdata"> <xsl:value-of select="quality" /></td></tr>
|
||||
</xsl:if>
|
||||
<xsl:if test="video_quality">
|
||||
<tr><td>Video Quality:</td><td class="streamdata"> <xsl:value-of select="video_quality" /></td></tr>
|
||||
</xsl:if>
|
||||
<xsl:if test="frame_size">
|
||||
<tr><td>Framesize:</td><td class="streamdata"> <xsl:value-of select="frame_size" /></td></tr>
|
||||
</xsl:if>
|
||||
<xsl:if test="frame_rate">
|
||||
<tr><td>Framerate:</td><td class="streamdata"> <xsl:value-of select="frame_rate" /></td></tr>
|
||||
</xsl:if>
|
||||
<xsl:if test="listeners">
|
||||
<tr><td>Current Listeners:</td><td class="streamdata"> <xsl:value-of select="listeners" /></td></tr>
|
||||
</xsl:if>
|
||||
<xsl:if test="listener_peak">
|
||||
<tr><td>Peak Listeners:</td><td class="streamdata"> <xsl:value-of select="listener_peak" /></td></tr>
|
||||
</xsl:if>
|
||||
<xsl:if test="genre">
|
||||
<tr><td>Stream Genre:</td><td class="streamdata"> <xsl:value-of select="genre" /></td></tr>
|
||||
</xsl:if>
|
||||
<xsl:if test="server_url">
|
||||
<tr><td>Stream URL:</td><td class="streamdata"> <a target="_blank" href="{server_url}"><xsl:value-of select="server_url" /></a></td></tr>
|
||||
</xsl:if>
|
||||
<tr><td>Current Song:</td><td class="streamdata">
|
||||
<xsl:if test="artist"><xsl:value-of select="artist" /> - </xsl:if><xsl:value-of select="title" /></td></tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="roundbottom">
|
||||
<img src="/corner_bottomleft.jpg" class="corner" style="display: none" />
|
||||
</div>
|
||||
</div>
|
||||
<br />
|
||||
<br />
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<h3><xsl:value-of select="@mount" /> - Not Connected</h3>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
|
||||
</xsl:for-each>
|
||||
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
|
||||
|
||||
|
||||
<div class="poster">Support icecast development at <a class="nav" target="_blank" href="http://www.icecast.org">www.icecast.org</a></div>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
12
radio/etc/icecast2/web/status2.xsl
Normal file
12
radio/etc/icecast2/web/status2.xsl
Normal file
@@ -0,0 +1,12 @@
|
||||
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
|
||||
<xsl:output omit-xml-declaration="no" method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes" encoding="UTF-8" />
|
||||
<xsl:template match = "/icestats" >
|
||||
<pre>
|
||||
MountPoint,Connections,Stream Name,Current Listeners,Description,Currently Playing,Stream URL
|
||||
Global,Client:<xsl:value-of select="connections" /> Source: <xsl:value-of select="source_connections" />,,<xsl:value-of select="listeners" />,,
|
||||
<xsl:for-each select="source">
|
||||
<xsl:value-of select="@mount" />,,<xsl:value-of select="name" />,<xsl:value-of select="listeners" />,<xsl:value-of select="description" />,<xsl:value-of select="artist" /> - <xsl:value-of select="title" />,<xsl:value-of select="url" />
|
||||
</xsl:for-each>
|
||||
</pre>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
250
radio/etc/icecast2/web/style.css
Normal file
250
radio/etc/icecast2/web/style.css
Normal file
@@ -0,0 +1,250 @@
|
||||
/******************************************************************************
|
||||
|
||||
This file styles the bar that goes across the top of all Xiph.Org
|
||||
pages.
|
||||
|
||||
The style that comes from this was first (to my knowledge) at
|
||||
http://alistapart.com/stories/practicalcss/ in the
|
||||
"Splitting the Difference" section.
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
/* This effect doesn't work at all if all content is pinched in a bit. */
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
margin-left: 50px;
|
||||
margin-right: 25px;
|
||||
background-color: #000;
|
||||
}
|
||||
|
||||
.xiphnav {
|
||||
font-family: Verdana, sans-serif;
|
||||
font-weight: normal;
|
||||
padding: .25em;
|
||||
margin-bottom: .5em;
|
||||
border-bottom: 1px solid #000;
|
||||
color: #000;
|
||||
background: #aaa;
|
||||
}
|
||||
h2 {
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
font-size: 3em;
|
||||
color: #fff;
|
||||
padding: 10px 0px 10px 80px;
|
||||
margin-top:3px;
|
||||
background: transparent url(/icecast.png) no-repeat scroll left center
|
||||
}
|
||||
h1 {
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
font-size: 100%;
|
||||
color: #fff;
|
||||
margin-top:3px;
|
||||
}
|
||||
.nav {
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
font-size: 110%;
|
||||
color: #fff;
|
||||
}
|
||||
.nav:hover {
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
color: #f8ef64;
|
||||
}
|
||||
.xiphnav_a {
|
||||
text-decoration: none;
|
||||
font-weight: normal;
|
||||
color: #000;
|
||||
}
|
||||
.news {
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: normal;
|
||||
color: #fff;
|
||||
}
|
||||
.newsheader {
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: normal;
|
||||
font-size: 110%;
|
||||
color: #f8ef64;
|
||||
background: #444;
|
||||
}
|
||||
.streamtd {
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: normal;
|
||||
font-size: 85%;
|
||||
color: #fff;
|
||||
padding:15px;
|
||||
}
|
||||
.streamtd_alt {
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: normal;
|
||||
font-size: 85%;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.streamtd_alt_2 {
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: underline;
|
||||
font-weight: normal;
|
||||
font-size: 85%;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
td {
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: normal;
|
||||
color: #fff;
|
||||
}
|
||||
.roundcont {
|
||||
width: 90%;
|
||||
background-color: #656565;
|
||||
color: #fff;
|
||||
}
|
||||
.roundcont a {
|
||||
margin: 0px 10px;
|
||||
}
|
||||
.newscontent {
|
||||
margin: 0 20px;
|
||||
}
|
||||
h3 {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
font-size: 110%;
|
||||
color: #f8ef64;
|
||||
}
|
||||
.newscontent h3 {
|
||||
margin-bottom: 10px;
|
||||
border-bottom: 1px groove #ACACAC;
|
||||
}
|
||||
.newscontent h4 {
|
||||
margin: 10px 0px;
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
font-size: 110%;
|
||||
color: #f8ef64;
|
||||
}
|
||||
.newscontent p {
|
||||
margin: 0 0;
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: none;
|
||||
font-size: 90%;
|
||||
}
|
||||
.newscontent td {
|
||||
margin: 0 0;
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: none;
|
||||
font-size: 90%;
|
||||
}
|
||||
.newscontent td.streamdata {
|
||||
margin: 0 0;
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: none;
|
||||
font-size: 90%;
|
||||
color: #f8ef64;
|
||||
}
|
||||
.streamheader table {
|
||||
width: 100%;
|
||||
margin-bottom: 5px;
|
||||
border-bottom: 1px groove #ACACAC;
|
||||
}
|
||||
.streamheader td {
|
||||
margin: 0px;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
padding: 10 5 10 5;
|
||||
border: 0px solid white;
|
||||
}
|
||||
.streamheader h3 {
|
||||
border: 0px;
|
||||
}
|
||||
.streamheader a {
|
||||
padding: 8px 5px 3px 30px;
|
||||
text-decoration: none;
|
||||
background: transparent url("/tunein.png") no-repeat left center;
|
||||
}
|
||||
.streamheader a.auth {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
padding-left: 32px;
|
||||
background: transparent url("/key.png") no-repeat left center;
|
||||
}
|
||||
.newscontent a {
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
margin: 0px;
|
||||
color: #f8ef64;
|
||||
}
|
||||
.newscontent a:hover {
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
}
|
||||
.newscontent a.nav2 {
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
padding: 2px 9px;
|
||||
background: #444;
|
||||
color: #f8ef64;
|
||||
}
|
||||
.newscontent a.nav2:hover {
|
||||
font-family: Verdana, sans-serif;
|
||||
text-decoration: none;
|
||||
background: #777;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
}
|
||||
.poster {
|
||||
font-family: Verdana, sans-serif;
|
||||
margin: 50px 120px 20px 0px;
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
font-size: 100%;
|
||||
color: #f8ef64;
|
||||
padding: 5px;
|
||||
border-top: 1px groove #ACACAC;
|
||||
}
|
||||
.roundcont p {
|
||||
margin: 10px 50px;
|
||||
}
|
||||
|
||||
.roundtop {
|
||||
background: url(/corner_topright.jpg) no-repeat top right;
|
||||
}
|
||||
|
||||
.roundbottom {
|
||||
background: url(/corner_bottomright.jpg) no-repeat top right;
|
||||
}
|
||||
|
||||
img.corner {
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
border: none;
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
|
||||
33
radio/etc/supervisord.conf
Normal file
33
radio/etc/supervisord.conf
Normal file
@@ -0,0 +1,33 @@
|
||||
[unix_http_server]
|
||||
file=/tmp/supervisor.sock
|
||||
|
||||
[supervisord]
|
||||
logfile=/tmp/supervisord.log
|
||||
logfile_maxbytes=50MB
|
||||
logfile_backups=10
|
||||
loglevel=info
|
||||
pidfile=/tmp/supervisord.pid
|
||||
nodaemon=false
|
||||
minfds=1024
|
||||
minprocs=200
|
||||
user=icecast2
|
||||
|
||||
[rpcinterface:supervisor]
|
||||
supervisor.rpcinterface_factory=supervisor.rpcinterface:make_main_rpcinterface
|
||||
|
||||
[supervisorctl]
|
||||
serverurl=unix:///tmp/supervisor.sock
|
||||
|
||||
[program:icecast2]
|
||||
user=icecast2
|
||||
command=icecast2 -n -c /etc/icecast2/icecast.xml
|
||||
stopsignal=6
|
||||
stdout_events_enabled=true
|
||||
stderr_events_enabled=true
|
||||
autorestart=true
|
||||
|
||||
[eventlistener:stdout]
|
||||
command=supervisor_stdout
|
||||
buffer_size=100
|
||||
events=PROCESS_LOG
|
||||
result_hander=supervisor_stdout:event_handler
|
||||
12
radio/examples/docker-compose.yml
Normal file
12
radio/examples/docker-compose.yml
Normal file
@@ -0,0 +1,12 @@
|
||||
icecast:
|
||||
image: moul/icecast:latest
|
||||
volumes:
|
||||
- logs:/var/log/icecast2
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
environment:
|
||||
- ICECAST_SOURCE_PASSWORD=changeme
|
||||
- ICECAST_ADMIN_PASSWORD=changeme
|
||||
- ICECAST_PASSWORD=changeme
|
||||
- ICECAST_RELAY_PASSWORD=changeme
|
||||
ports:
|
||||
- 8000:8000
|
||||
25
radio/start.sh
Executable file
25
radio/start.sh
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/sh
|
||||
|
||||
env
|
||||
|
||||
set -x
|
||||
|
||||
if [ -n "$ICECAST_SOURCE_PASSWORD" ]; then
|
||||
sed -i "s/<source-password>[^<]*<\/source-password>/<source-password>$ICECAST_SOURCE_PASSWORD<\/source-password>/g" /etc/icecast2/icecast.xml
|
||||
fi
|
||||
|
||||
if [ -n "$ICECAST_RELAY_PASSWORD" ]; then
|
||||
sed -i "s/<relay-password>[^<]*<\/relay-password>/<relay-password>$ICECAST_RELAY_PASSWORD<\/relay-password>/g" /etc/icecast2/icecast.xml
|
||||
fi
|
||||
|
||||
if [ -n "$ICECAST_ADMIN_PASSWORD" ]; then
|
||||
sed -i "s/<admin-password>[^<]*<\/admin-password>/<admin-password>$ICECAST_ADMIN_PASSWORD<\/admin-password>/g" /etc/icecast2/icecast.xml
|
||||
fi
|
||||
|
||||
if [ -n "$ICECAST_PASSWORD" ]; then
|
||||
sed -i "s/<password>[^<]*<\/password>/<password>$ICECAST_PASSWORD<\/password>/g" /etc/icecast2/icecast.xml
|
||||
fi
|
||||
|
||||
cat /etc/icecast2/icecast.xml
|
||||
|
||||
supervisord -n -c /etc/supervisord.conf
|
||||
Reference in New Issue
Block a user