app_icecast.html 9.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
  5. <head>
  6. <title></title>
  7. <!-- 2018-04-12 Thu 12:18 -->
  8. <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  9. <meta name="generator" content="Org-mode" />
  10. <meta name="author" content="Bob Mottram" />
  11. <meta name="description" content="How to use Icecast"
  12. />
  13. <meta name="keywords" content="freedombone, icecast" />
  14. <style type="text/css">
  15. <!--/*--><![CDATA[/*><!--*/
  16. .title { text-align: center; }
  17. .todo { font-family: monospace; color: red; }
  18. .done { color: green; }
  19. .tag { background-color: #eee; font-family: monospace;
  20. padding: 2px; font-size: 80%; font-weight: normal; }
  21. .timestamp { color: #bebebe; }
  22. .timestamp-kwd { color: #5f9ea0; }
  23. .right { margin-left: auto; margin-right: 0px; text-align: right; }
  24. .left { margin-left: 0px; margin-right: auto; text-align: left; }
  25. .center { margin-left: auto; margin-right: auto; text-align: center; }
  26. .underline { text-decoration: underline; }
  27. #postamble p, #preamble p { font-size: 90%; margin: .2em; }
  28. p.verse { margin-left: 3%; }
  29. pre {
  30. border: 1px solid #ccc;
  31. box-shadow: 3px 3px 3px #eee;
  32. padding: 8pt;
  33. font-family: monospace;
  34. overflow: auto;
  35. margin: 1.2em;
  36. }
  37. pre.src {
  38. position: relative;
  39. overflow: visible;
  40. padding-top: 1.2em;
  41. }
  42. pre.src:before {
  43. display: none;
  44. position: absolute;
  45. background-color: white;
  46. top: -10px;
  47. right: 10px;
  48. padding: 3px;
  49. border: 1px solid black;
  50. }
  51. pre.src:hover:before { display: inline;}
  52. pre.src-sh:before { content: 'sh'; }
  53. pre.src-bash:before { content: 'sh'; }
  54. pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
  55. pre.src-R:before { content: 'R'; }
  56. pre.src-perl:before { content: 'Perl'; }
  57. pre.src-java:before { content: 'Java'; }
  58. pre.src-sql:before { content: 'SQL'; }
  59. table { border-collapse:collapse; }
  60. caption.t-above { caption-side: top; }
  61. caption.t-bottom { caption-side: bottom; }
  62. td, th { vertical-align:top; }
  63. th.right { text-align: center; }
  64. th.left { text-align: center; }
  65. th.center { text-align: center; }
  66. td.right { text-align: right; }
  67. td.left { text-align: left; }
  68. td.center { text-align: center; }
  69. dt { font-weight: bold; }
  70. .footpara:nth-child(2) { display: inline; }
  71. .footpara { display: block; }
  72. .footdef { margin-bottom: 1em; }
  73. .figure { padding: 1em; }
  74. .figure p { text-align: center; }
  75. .inlinetask {
  76. padding: 10px;
  77. border: 2px solid gray;
  78. margin: 10px;
  79. background: #ffffcc;
  80. }
  81. #org-div-home-and-up
  82. { text-align: right; font-size: 70%; white-space: nowrap; }
  83. textarea { overflow-x: auto; }
  84. .linenr { font-size: smaller }
  85. .code-highlighted { background-color: #ffff00; }
  86. .org-info-js_info-navigation { border-style: none; }
  87. #org-info-js_console-label
  88. { font-size: 10px; font-weight: bold; white-space: nowrap; }
  89. .org-info-js_search-highlight
  90. { background-color: #ffff00; color: #000000; font-weight: bold; }
  91. /*]]>*/-->
  92. </style>
  93. <link rel="stylesheet" type="text/css" href="freedombone.css" />
  94. <script type="text/javascript">
  95. /*
  96. @licstart The following is the entire license notice for the
  97. JavaScript code in this tag.
  98. Copyright (C) 2012-2013 Free Software Foundation, Inc.
  99. The JavaScript code in this tag is free software: you can
  100. redistribute it and/or modify it under the terms of the GNU
  101. General Public License (GNU GPL) as published by the Free Software
  102. Foundation, either version 3 of the License, or (at your option)
  103. any later version. The code is distributed WITHOUT ANY WARRANTY;
  104. without even the implied warranty of MERCHANTABILITY or FITNESS
  105. FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
  106. As additional permission under GNU GPL version 3 section 7, you
  107. may distribute non-source (e.g., minimized or compacted) forms of
  108. that code without the copy of the GNU GPL normally required by
  109. section 4, provided you include this license notice and a URL
  110. through which recipients can access the Corresponding Source.
  111. @licend The above is the entire license notice
  112. for the JavaScript code in this tag.
  113. */
  114. <!--/*--><![CDATA[/*><!--*/
  115. function CodeHighlightOn(elem, id)
  116. {
  117. var target = document.getElementById(id);
  118. if(null != target) {
  119. elem.cacheClassElem = elem.className;
  120. elem.cacheClassTarget = target.className;
  121. target.className = "code-highlighted";
  122. elem.className = "code-highlighted";
  123. }
  124. }
  125. function CodeHighlightOff(elem, id)
  126. {
  127. var target = document.getElementById(id);
  128. if(elem.cacheClassElem)
  129. elem.className = elem.cacheClassElem;
  130. if(elem.cacheClassTarget)
  131. target.className = elem.cacheClassTarget;
  132. }
  133. /*]]>*///-->
  134. </script>
  135. </head>
  136. <body>
  137. <div id="preamble" class="status">
  138. <a name="top" id="top"></a>
  139. </div>
  140. <div id="content">
  141. <h1 class="title"></h1>
  142. <div class="figure">
  143. <p><img src="images/logo.png" alt="logo.png" width="80%" height="10%" align="center" />
  144. </p>
  145. </div>
  146. <div id="outline-container-sec-1" class="outline-2">
  147. <h2 id="sec-1">Icecast</h2>
  148. <div class="outline-text-2" id="text-1">
  149. <p>
  150. Icecast enables you to run something like an internet radio station. So if you have multiple audio files and want to be able to stream those in sequence from a web site then this can be useful.
  151. </p>
  152. <p>
  153. This system is available only via an onion address, which should mitigate the potential for copyright disputes over streamed content. By default it's only set up to stream to a small number of users so that it doesn't put too much stress on CPU or memory requirements, although you can increase the maximum limit if you have a more powerful system and enough bandwidth.
  154. </p>
  155. </div>
  156. </div>
  157. <div id="outline-container-sec-2" class="outline-2">
  158. <h2 id="sec-2">Installation</h2>
  159. <div class="outline-text-2" id="text-2">
  160. <p>
  161. Log into your system with:
  162. </p>
  163. <div class="org-src-container">
  164. <pre class="src src-bash">ssh myusername@mydomain -p 2222
  165. </pre>
  166. </div>
  167. <p>
  168. Using cursor keys, space bar and Enter key select <b>Administrator controls</b> and type in your password. Select <b>Add/Remove Apps</b> then <b>icecast</b>.
  169. </p>
  170. <p>
  171. If you then go to the <b>About</b> screen you'll see the onion address for Icecast and can navigate to it in a Tor compatible browser.
  172. </p>
  173. </div>
  174. </div>
  175. <div id="outline-container-sec-3" class="outline-2">
  176. <h2 id="sec-3">Adding files to be streamed</h2>
  177. <div class="outline-text-2" id="text-3">
  178. <p>
  179. There are two ways to get files onto the system: either via ssh or via a USB drive. File types can be <b>ogg, ogv, mp3 or mp4</b> format.
  180. </p>
  181. <p>
  182. It may take a while for the files to import, especially on a low power single board computer, since any mp3 or mp4 files will be converted to ogg or ogv. If you want to speed this up then you could do this conversion manually on a laptop with ffmpeg before storing files onto the USB drive or uploading them via ssh.
  183. </p>
  184. </div>
  185. <div id="outline-container-sec-3-1" class="outline-3">
  186. <h3 id="sec-3-1">From a USB drive</h3>
  187. <div class="outline-text-3" id="text-3-1">
  188. <p>
  189. Create a directory on the USB drive named <b>icestream</b> and copy your files into there. Plug the drive into your server.
  190. </p>
  191. <p>
  192. Go to the <b>Administrator control panel</b>, select <b>App settings</b>, then <b>icecast</b>, then <b>Import stream files from USB drive</b>.
  193. </p>
  194. </div>
  195. </div>
  196. <div id="outline-container-sec-3-2" class="outline-3">
  197. <h3 id="sec-3-2">Via ssh</h3>
  198. <div class="outline-text-3" id="text-3-2">
  199. <p>
  200. Make a directory named <b>icestream</b> and copy your files into it. Then copy the directory to your server.
  201. </p>
  202. <div class="org-src-container">
  203. <pre class="src src-bash">scp -r -P 2222 icestream myusername@mydomain:/home/myusername
  204. </pre>
  205. </div>
  206. <p>
  207. Log into your server with:
  208. </p>
  209. <div class="org-src-container">
  210. <pre class="src src-bash">ssh myusername@mydomain -p 2222
  211. </pre>
  212. </div>
  213. <p>
  214. Select <b>Administrator controls</b>, enter your password, then go to <b>App settings</b> followed by <b>icecast</b> and <b>Import stream files</b>. Choose the directory with up and down cursors and space bar to select.
  215. </p>
  216. </div>
  217. </div>
  218. </div>
  219. <div id="outline-container-sec-4" class="outline-2">
  220. <h2 id="sec-4">Access controls</h2>
  221. <div class="outline-text-2" id="text-4">
  222. <p>
  223. By default anyone who happens to find your Icecast onion address can listen to your stream. If you only want it to be available to a few friends or family then you can add an extra login password.
  224. </p>
  225. <p>
  226. Go to the <b>Administrator control panel</b>, select <b>App settings</b>, then <b>icecast</b>, then <b>Enable login for stream users</b>. Take a note of the password and you can give that out to whoever needs access, preferably via an encrypted chat app or sneakernet. If you need to copy and paste then hold the shift key while highlighting the password.
  227. </p>
  228. </div>
  229. </div>
  230. </div>
  231. <div id="postamble" class="status">
  232. <style type="text/css">
  233. .back-to-top {
  234. position: fixed;
  235. bottom: 2em;
  236. right: 0px;
  237. text-decoration: none;
  238. color: #000000;
  239. background-color: rgba(235, 235, 235, 0.80);
  240. font-size: 12px;
  241. padding: 1em;
  242. display: none;
  243. }
  244. .back-to-top:hover {
  245. background-color: rgba(135, 135, 135, 0.50);
  246. }
  247. </style>
  248. <div class="back-to-top">
  249. <a href="#top">Back to top</a> | <a href="mailto:bob@freedombone.net">E-mail me</a>
  250. </div>
  251. </div>
  252. </body>
  253. </html>