You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
218 lines
16 KiB
218 lines
16 KiB
4 years ago
|
<html>
|
||
|
<head>
|
||
|
<script src="/versions.js"></script>
|
||
|
<link href="../stylesheet.css" rel="stylesheet">
|
||
|
<link href="https://pad.vvvvvvaria.org/p/streaming" rel="alternate" title="Etherpad" type="text/html">
|
||
|
<link href="streaming.raw.txt" rel="alternate" title="Plain text" type="text/plain">
|
||
|
<link href="streaming.raw.html" rel="alternate" title="HTML" type="text/html">
|
||
|
<link href="streaming.meta.json" rel="alternate" title="Meta data" type="application/json">
|
||
|
<meta charset="utf-8">
|
||
|
<title>streaming</title>
|
||
|
</head>
|
||
|
<body>__PUBLISH__<br>
|
||
|
<br>24th of March (during quarantine COVID19)<br>
|
||
|
<br>Set up video streaming in icecast<br>Set up icecast and ices to stream live from different computers darkice -c darkice_varia.conf <br>We could also try to stream from our phones<br>
|
||
|
<br>
|
||
|
<a href="http://echo.lurk.org:999/" rel="noreferrer noopener">http://echo.lurk.org:999/</a>
|
||
|
<br>
|
||
|
<a href="https://stream.vvvvvvaria.org/" rel="noreferrer noopener">https://stream.vvvvvvaria.org/</a>
|
||
|
<br>
|
||
|
<a href="https://echochamber.lurk.org/" rel="noreferrer noopener">https://echochamber.lurk.org/</a> (xmpp chat + stream)<br>
|
||
|
<br>
|
||
|
<strong>Software:</strong>
|
||
|
<br>
|
||
|
<ul class="indent">
|
||
|
<li>Servers:</li>
|
||
|
</ul> - Icecast <a href="https://directory.fsf.org/wiki/Icecast" rel="noreferrer noopener">https://directory.fsf.org/wiki/Icecast</a>
|
||
|
<br>
|
||
|
<ul class="indent">
|
||
|
<li></li>
|
||
|
<li>Clients(Audio):</li>
|
||
|
</ul> - Darkice <a href="http://darkice.org/" rel="noreferrer noopener">http://darkice.org/</a>
|
||
|
<br> - ices<br> - liquidsoap (client on top of icecast, overly complicated, not necessarily recommended<br>
|
||
|
<ul class="indent">
|
||
|
<li> uses a lot of CPU)</li>
|
||
|
</ul> - mpv <a href="https://directory.fsf.org/wiki/Mpv" rel="noreferrer noopener">https://directory.fsf.org/wiki/Mpv</a>
|
||
|
<br> - mixxx (GUI, intense-DJ-feeling)<br> - ffmpeg<br>
|
||
|
<br>
|
||
|
<ul class="indent">
|
||
|
<li>Clients(Video):</li>
|
||
|
</ul> - OBS <a href="https://obsproject.com/" rel="noreferrer noopener">https://obsproject.com/</a>
|
||
|
<br>
|
||
|
<br>
|
||
|
<ul class="indent">
|
||
|
<li>Clients </li>
|
||
|
<li></li>
|
||
|
</ul>
|
||
|
<strong>Experiences with libre streaming:</strong>
|
||
|
<br>
|
||
|
<br> - LibrePlanet organising a conference online <a href="https://libreplanet.org/wiki/LibrePlanet:Conference/2020/Streaming" rel="noreferrer noopener">https://libreplanet.org/wiki/LibrePlanet:Conference/2020/Streaming</a> using:<br> - mpv <a href="https://directory.fsf.org/wiki/Mpv" rel="noreferrer noopener">https://directory.fsf.org/wiki/Mpv</a>
|
||
|
<br> - Gstreamer <a href="https://directory.fsf.org/wiki/Gstreamer" rel="noreferrer noopener">https://directory.fsf.org/wiki/Gstreamer</a> (streaming software)<br> - Icecast <a href="https://directory.fsf.org/wiki/Icecast" rel="noreferrer noopener">https://directory.fsf.org/wiki/Icecast</a> (receiving server)<br> - Darkice config <a href="http://rabarar.github.io/blog/2015/07/02/darkice-and-icecast" rel="noreferrer noopener">http://rabarar.github.io/blog/2015/07/02/darkice-and-icecast</a>
|
||
|
<br>
|
||
|
<br> - Thomas' event <a href="http://varia.zone/en/21-party-line.html" rel="noreferrer noopener">http://varia.zone/en/21-party-line.html</a> used:<br> - OBS <a href="https://obsproject.com/" rel="noreferrer noopener">https://obsproject.com/</a>
|
||
|
<br> - Twitch<br>
|
||
|
<s> - Icecast </s>
|
||
|
<a href="https://directory.fsf.org/wiki/Icecast" rel="noreferrer noopener">
|
||
|
<s>https://directory.fsf.org/wiki/Icecast</s>
|
||
|
</a>
|
||
|
<s> (I did not use Icecast for that stream)</s>
|
||
|
<br>
|
||
|
<ul class="indent">
|
||
|
<li>
|
||
|
<ul class="indent">
|
||
|
<li>- Run your own Wiki<ul class="indent">
|
||
|
<li>- <a href="https://things.bleu255.com/runyourown/Streaming_Service_with_Icecast" rel="noreferrer noopener">https://things.bleu255.com/runyourown/Streaming_Service_with_Icecast</a>
|
||
|
</li>
|
||
|
<li>
|
||
|
<a href="https://we.riseup.net/assets/29773/Icecast-Streaming-Handbook.pdf" rel="noreferrer noopener">https://we.riseup.net/assets/29773/Icecast-Streaming-Handbook.pdf</a>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
<li>- Angeliki hosting the varia streaming server for a while: <ul class="indent">
|
||
|
<li>- Through log files of icecast2 called access.log we can see how many listeners listened to our events</li>
|
||
|
<li>- Darkice is more easy, flexible to use than ices. </li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
</ul>
|
||
|
<br>
|
||
|
<strong>RSS feed and podcasts:</strong>
|
||
|
<br>
|
||
|
<a href="https://pad.constantvzw.org/p/unboundlibraries_rss" rel="noreferrer noopener">https://pad.constantvzw.org/p/unboundlibraries_rss</a> (from the contribution of Wendy to the unbound libraries session of constant)<br>
|
||
|
<br>
|
||
|
<br>
|
||
|
<strong> Streams enthusiasm </strong>
|
||
|
<br> ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ <br> ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ <br> ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ <br>- LAG radio <a href="https://ikiwiki.laglab.org/Radio/" rel="noreferrer noopener">https://ikiwiki.laglab.org/Radio/</a>
|
||
|
<br>- <a href="http://stationofcommons.org/" rel="noreferrer noopener">http://stationofcommons.org/</a>
|
||
|
<br>- <a href="http://echoraeume.klingt.org/" rel="noreferrer noopener">http://echoraeume.klingt.org/</a> in Graz/Vienna<br>- <a href="http://bidstonobservatory.org/radio" rel="noreferrer noopener">http://bidstonobservatory.org/radio</a> in Liverpool observatory<br>- <a href="https://wiki.calafou.org/index.php/Radio_Calafou" rel="noreferrer noopener">https://wiki.calafou.org/index.php/Radio_Calafou</a> calafou radio<br>- Radio Rietveld - <a href="http://radiorietveld.com/" rel="noreferrer noopener">http://radiorietveld.com/</a>
|
||
|
<br>- Hammam Radio - <a href="https://yamakan.place/hammamradio/" rel="noreferrer noopener">https://yamakan.place/hammamradio/</a>
|
||
|
<br>- Radio Quarentena - <a href="https://cpr.org.ar/radio-cuarentena/" rel="noreferrer noopener">https://cpr.org.ar/radio-cuarentena/</a>
|
||
|
<br>- <a href="https://yamakan.place/palestine/" rel="noreferrer noopener">https://yamakan.place/palestine/</a>
|
||
|
<br>
|
||
|
<br>
|
||
|
<br>
|
||
|
<strong>Certificate issues</strong>
|
||
|
<br>
|
||
|
<a href="https://certbot.eff.org/docs/" rel="noreferrer noopener">https://certbot.eff.org/docs/</a>
|
||
|
<br>
|
||
|
<br>
|
||
|
<ul class="indent">
|
||
|
<li></li>
|
||
|
</ul>
|
||
|
<strong>
|
||
|
<u>How to's/ streaming homebrew style:</u>
|
||
|
</strong>
|
||
|
<br>
|
||
|
<br>On the server:<br>- install icecast: <br>
|
||
|
<ul class="indent">
|
||
|
<li>$ sudo apt install icecast2<ul class="indent">
|
||
|
<li>- fill in the hostname: yourdomain.tld</li>
|
||
|
<li>- fill in the passwords</li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
</ul>- $ sudo iptables -A INPUT -p tcp -m tcp --dport 8000 -j ACCEPT<br>- follow this (from Basic Configuration): <a href="https://things.bleu255.com/runyourown/Streaming_Service_with_Icecast#Basic_Configuration" rel="noreferrer noopener">https://things.bleu255.com/runyourown/Streaming_Service_with_Icecast#Basic_Configuration</a>
|
||
|
<br>
|
||
|
<br>
|
||
|
<br>
|
||
|
<br>On your computer:<br>
|
||
|
<br>- install darkice<br>
|
||
|
<ul class="indent">
|
||
|
<li></li>
|
||
|
<li>$ sudo apt install darkice</li>
|
||
|
</ul>
|
||
|
<br> Run Darkice with any config file<br>
|
||
|
<ul class="indent">
|
||
|
<li>
|
||
|
<ul class="indent">
|
||
|
<li>
|
||
|
<ul class="indent">
|
||
|
<li># Having jack as input is better for sound quality</li>
|
||
|
<li># Not so much in terms of sound quality but in options of combining different</li>
|
||
|
<li># programs (such as jamin, mpv, mplayer and incoming audio from devices)</li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
<li>
|
||
|
<ul class="indent">
|
||
|
<li>Setup that I use now (Crunk)<ul class="indent">
|
||
|
<li>audio sources(like hardware or mplayer) ---> jack ---> jamin (monitor audio levels) ---> jack</li>
|
||
|
<li>---> darkice ---> icecast</li>
|
||
|
<li></li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
</ul>
|
||
|
<br>- download an example configuration file: <a href="http://w-i-t-m.net/darkice_varia.conf" rel="noreferrer noopener">http://w-i-t-m.net/darkice_varia.conf</a>
|
||
|
<br>- change the settings in the .conf file<br>- install a tool to loop your current soundcard audio as output, such as:<br>
|
||
|
<ul class="indent">
|
||
|
<li>- pulseaudio volume control (Linux)</li>
|
||
|
</ul>- don't forget to open port 8000 on your router (maybe better to open another port like 8001?)<br>- Ready! Run it with this command:<br>
|
||
|
<br>
|
||
|
<ul class="indent">
|
||
|
<li>$ darkice -c mysettings.conf </li>
|
||
|
</ul>
|
||
|
<br>for video streaming: <a href="https://epir.at/2018/03/08/obs-icecast-streaming/" rel="noreferrer noopener">https://epir.at/2018/03/08/obs-icecast-streaming/</a>
|
||
|
<br>
|
||
|
<br>
|
||
|
<br>
|
||
|
<br>Old javascript and jquery(eww) to put the metadata on the page<br>function radioTitle() {<br>
|
||
|
<br>// this is the URL of the json.xml file located on your server.<br>var url = window.location.origin + ':8000/status3.xsl';<br>// this is your mountpoint's name, mine is called /radio<br>var mountpoint = '/radio';<br>
|
||
|
<br>$.ajax({ type: 'GET',<br> url: url,<br> async: true,<br> jsonpCallback: 'parseMusic',<br> contentType: "application/json",<br> dataType: 'jsonp',<br> success: function (json) {<br> // this is the element we're updating that will hold the track title <br> var title = json[mountpoint].title;<br> title = title.replace(/'''/g, "'")<br> var tracktitle = document.getElementById('tracktitle');<br> tracktitle.innerHTML = title;<br> },<br> error: function (e) { console.log(e.message); <br> }<br> });<br> }<br>
|
||
|
<br>
|
||
|
<br>
|
||
|
<br>connect pulse with JACK (when streaming microphone and soundcard at the same time): <a href="https://github.com/jackaudio/jackaudio.github.com/wiki/WalkThrough_User_PulseOnJack" rel="noreferrer noopener">https://github.com/jackaudio/jackaudio.github.com/wiki/WalkThrough_User_PulseOnJack</a>
|
||
|
<br>
|
||
|
<br>Varia <br>--------------------------------------<br>
|
||
|
<br>
|
||
|
<strong>
|
||
|
<u>EXperiments</u>
|
||
|
</strong>
|
||
|
<br>
|
||
|
<br>
|
||
|
<strong>Many broadcasters</strong>
|
||
|
<br>
|
||
|
<a href="https://echochamber.lurk.org/" rel="noreferrer noopener">https://echochamber.lurk.org/</a>
|
||
|
<br>
|
||
|
<a href="http://w-i-t-m.net:8001/nightnoises" rel="noreferrer noopener">http://w-i-t-m.net:8001/nightnoises</a>
|
||
|
<br>
|
||
|
<br>
|
||
|
<a href="https://wiki.radioreference.com/index.php/Live_Audio/Ubuntu_Darkice" rel="noreferrer noopener">https://wiki.radioreference.com/index.php/Live_Audio/Ubuntu_Darkice</a>
|
||
|
<br>
|
||
|
<br>
|
||
|
<strong>Embed m3u into an html page</strong>
|
||
|
<br>> (autoplay cannot be used anymore)<br>> you need this -> <a href="https://lurk.org/muc/player.js" rel="noreferrer noopener">https://lurk.org/muc/player.js</a>
|
||
|
<br>
|
||
|
<br><span><br>
|
||
|
<ul class="indent">
|
||
|
<li><audio id="player" preload="none" src="<a href="http://w-i-t-m.net:8001/nightnoises" rel="noreferrer noopener">http://w-i-t-m.net:8001/nightnoises</a>"> </audio></li>
|
||
|
<li><div><ul class="indent">
|
||
|
<li><button onclick="document.getElementById('player').play()">Play</button></li>
|
||
|
<li><button onclick="document.getElementById('player').pause();document.getElementById('player').src=document.getElementById('player').src;">Stop</button></li>
|
||
|
<li><button onclick="document.getElementById('player').volume += 0.1">Vol +</button></li>
|
||
|
<li><button onclick="document.getElementById('player').volume -= 0.1">Vol -</button></li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
<li></div></li>
|
||
|
</ul></span><br>
|
||
|
<br>
|
||
|
<br>
|
||
|
<br>--------------------------------------<br>
|
||
|
<strong>Experiences</strong>
|
||
|
<br>
|
||
|
<br>Experiences streaming video (luke&simon):<br> icecast can do video! woot woot<br> icecast + https is a bit tricky (to hide the source password)<br> anyone can load a film into VLC and connect to icecast to stream (but it only supports certain file types like webm and so on. A lot of good quality films come in proprietary formats like mkv (i think) and you need to convert them though)<br> you can pipe output from ffmpeg straight to icecast, see <a href="https://raw.githubusercontent.com/nwgat/scripts/master/icewebm.sh" rel="noreferrer noopener">https://raw.githubusercontent.com/nwgat/scripts/master/icewebm.sh</a> (this works! but the video bombs out after a while...)<br> video streaming is fucking black magic and i have no idea what i'm doing<br> me and simon are trying to get our 200 films out of the hard drive but not just a link dump, we want to socialise through programming films together<br>
|
||
|
<br>fucking hell this person is a wizard <a href="https://stackoverflow.com/questions/47509316/ffmpeg-mp4-to-webm-through-icecast-server-livestream" rel="noreferrer noopener">https://stackoverflow.com/questions/47509316/ffmpeg-mp4-to-webm-through-icecast-server-livestream</a> this seems to be the key to ascending into piracy nirvana<br>
|
||
|
<br>ffmpeg -i lajetee.mkv -acodec libopus -b:a 64k -vcodec libvpx -b:v 500K -crf 25 -vf scale=640:360 -content_type video/webm -loop 365 -g 10 -keyint_min 10 icecast://source:foobar@place.com:8000/lajetee.webm <br>
|
||
|
<br>(hacking on it @ <a href="https://git.autonomic.zone/decentral1se/stream.hbbs.decentral1.se/src/branch/master/stream.sh)" rel="noreferrer noopener">https://git.autonomic.zone/decentral1se/stream.hbbs.decentral1.se/src/branch/master/stream.sh)</a>
|
||
|
<br>
|
||
|
<br>So, like, this seems to work for some period of time with a few watchers. When someone tunes in it is not clear if they join at the same time!? It was bombing out before I added the magic "-g 10 -keyint_min 10" (again, not a fucking clue what is going on) but it seems to work for at least 2 people so far.<br>
|
||
|
<br>subtitles need to be added in somehow? unknown how to do that<br>my laptop is maxing out 2 cores streaming this 2.2gb mkv file (ffmpeg is converting it to webm on the fly for the stream!? wtf is going on really i don't know) so it seems like this streaming would take out your laptop over time.<br>
|
||
|
<br>The stream maybe bombed out after like 20 mins I think but maybe it was because I edited the file by accident. I am not sure but it seems like there are some reliability issues to sort out here.<br>
|
||
|
<br>Next day:<br> streamed out total recall for 3 people and it was laggy and the CPU was 100% while streaming (1 core)<br> chatted with crunk about this, we need to investigate hardware requirements to know what we need to have<br> we need to investigated bandwidth requirements to know how much we can support<br> aiming for <= 5 screens (multiple people behind screens!) as the first milestone with non-laggy watching<br> maybe ffmpeg+icecast is not the one true solution<br> obs supports streaming: <a href="https://obsproject.com/wiki/Streaming-With-SRT-Protocol#general-overview" rel="noreferrer noopener">https://obsproject.com/wiki/Streaming-With-SRT-Protocol#general-overview</a> (SRT!)<br> next step: come up with some calculations based on research/discussisions on what are the hardware/network requirements for doing streaming for a few screens and decent quality so that we can plan for the next step<br>
|
||
|
<br>simoon & decentral1se taking notes @ <a href="https://wiki.hbbs.decentral1.se" rel="noreferrer noopener">https://wiki.hbbs.decentral1.se</a>
|
||
|
<br>
|
||
|
</body>
|
||
|
</html>
|