__PUBLISH__
24th of March (during quarantine COVID19)
Set up video streaming in icecast
Set up icecast and ices to stream live from different computers darkice -c darkice_varia.conf
We could also try to stream from our phones
http://echo.lurk.org:999/
https://stream.vvvvvvaria.org/
https://echochamber.lurk.org/ (xmpp chat + stream)
Software:
- Icecast https://directory.fsf.org/wiki/Icecast
- Darkice http://darkice.org/
- ices
- liquidsoap (client on top of icecast, overly complicated, not necessarily recommended
- mpv https://directory.fsf.org/wiki/Mpv
- mixxx (GUI, intense-DJ-feeling)
- ffmpeg
- OBS https://obsproject.com/
Experiences with libre streaming:
- LibrePlanet organising a conference online https://libreplanet.org/wiki/LibrePlanet:Conference/2020/Streaming using:
- mpv https://directory.fsf.org/wiki/Mpv
- Gstreamer https://directory.fsf.org/wiki/Gstreamer (streaming software)
- Icecast https://directory.fsf.org/wiki/Icecast (receiving server)
- Darkice config http://rabarar.github.io/blog/2015/07/02/darkice-and-icecast
- Thomas' event http://varia.zone/en/21-party-line.html used:
- OBS https://obsproject.com/
- Twitch
- Icecast
https://directory.fsf.org/wiki/Icecast
(I did not use Icecast for that stream)
-
- - Angeliki hosting the varia streaming server for a while:
- - Through log files of icecast2 called access.log we can see how many listeners listened to our events
- - Darkice is more easy, flexible to use than ices.
RSS feed and podcasts:
https://pad.constantvzw.org/p/unboundlibraries_rss (from the contribution of Wendy to the unbound libraries session of constant)
Streams enthusiasm
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
- LAG radio https://ikiwiki.laglab.org/Radio/
- http://stationofcommons.org/
- http://echoraeume.klingt.org/ in Graz/Vienna
- http://bidstonobservatory.org/radio in Liverpool observatory
- https://wiki.calafou.org/index.php/Radio_Calafou calafou radio
- Radio Rietveld - http://radiorietveld.com/
- Hammam Radio - https://yamakan.place/hammamradio/
- Radio Quarentena - https://cpr.org.ar/radio-cuarentena/
- https://yamakan.place/palestine/
- WSK.fm - https://wskfm.bandcamp.com is the radio platform of Manila media art festival,WSK: Festival of the Recently Possible
Certificate issues
https://certbot.eff.org/docs/
How to's/ streaming homebrew style:
On the server:
- install icecast:
- $ sudo apt install icecast2
- - fill in the hostname: yourdomain.tld
- - fill in the passwords
- check which ports are occupied:
$ netstat -ntlp | grep LISTEN
- $ sudo iptables -A INPUT -p tcp -m tcp --dport 8000 -j ACCEPT
- follow this (from Basic Configuration): https://things.bleu255.com/runyourown/Streaming_Service_with_Icecast#Basic_Configuration
to check errors:
$ nano /var/log/icecast/error.log
On your computer:
- install darkice
- $ sudo apt install darkice
Run Darkice with any config file
-
-
- # Having jack as input is better for sound quality
- # Not so much in terms of sound quality but in options of combining different
- # programs (such as jamin, mpv, mplayer and incoming audio from devices)
- Setup that I use now (Crunk)
- audio sources(like hardware or mplayer) ---> jack ---> jamin (monitor audio levels) ---> jack
- ---> darkice ---> icecast
- download an example configuration file: http://w-i-t-m.net/darkice_varia.conf
- change the settings in the .conf file
- install a tool to loop your current soundcard audio as output, such as:
- - pulseaudio volume control (Linux)
- don't forget to open port 8000 on your router (maybe better to open another port like 8001?)
- Ready! Run it with this command:
- $ darkice -c mysettings.conf
for video streaming: https://epir.at/2018/03/08/obs-icecast-streaming/
Old javascript and jquery(eww) to put the metadata on the page
function radioTitle() {
// this is the URL of the json.xml file located on your server.
var url = window.location.origin + ':8000/status3.xsl';
// this is your mountpoint's name, mine is called /radio
var mountpoint = '/radio';
$.ajax({ type: 'GET',
url: url,
async: true,
jsonpCallback: 'parseMusic',
contentType: "application/json",
dataType: 'jsonp',
success: function (json) {
// this is the element we're updating that will hold the track title
var title = json[mountpoint].title;
title = title.replace(/'''/g, "'")
var tracktitle = document.getElementById('tracktitle');
tracktitle.innerHTML = title;
},
error: function (e) { console.log(e.message);
}
});
}
connect pulse with JACK (when streaming microphone and soundcard at the same time): https://github.com/jackaudio/jackaudio.github.com/wiki/WalkThrough_User_PulseOnJack
Varia
different computers/clients one mountpoint
If a stream client is down you fallback to another
fallback
--------------------------------------
EXperiments
Many broadcasters
https://echochamber.lurk.org/
http://w-i-t-m.net:8001/nightnoises
https://wiki.radioreference.com/index.php/Live_Audio/Ubuntu_Darkice
Embed m3u into an html page
> (autoplay cannot be used anymore)
> you need this -> https://lurk.org/muc/player.js
<span>
- <audio id="player" preload="none" src="http://w-i-t-m.net:8001/nightnoises"> </audio>
- <div>
- <button onclick="document.getElementById('player').play()">Play</button>
- <button onclick="document.getElementById('player').pause();document.getElementById('player').src=document.getElementById('player').src;">Stop</button>
- <button onclick="document.getElementById('player').volume += 0.1">Vol +</button>
- <button onclick="document.getElementById('player').volume -= 0.1">Vol -</button>
- </div>
</span>
--------------------------------------
Experiences
Experiences streaming video (luke&simon):
icecast can do video! woot woot
icecast + https is a bit tricky (to hide the source password)
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)
you can pipe output from ffmpeg straight to icecast, see https://raw.githubusercontent.com/nwgat/scripts/master/icewebm.sh (this works! but the video bombs out after a while...)
video streaming is fucking black magic and i have no idea what i'm doing
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
fucking hell this person is a wizard https://stackoverflow.com/questions/47509316/ffmpeg-mp4-to-webm-through-icecast-server-livestream this seems to be the key to ascending into piracy nirvana
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
(hacking on it @ https://git.autonomic.zone/decentral1se/stream.hbbs.decentral1.se/src/branch/master/stream.sh)
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.
subtitles need to be added in somehow? unknown how to do that
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.
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.
Next day:
streamed out total recall for 3 people and it was laggy and the CPU was 100% while streaming (1 core)
chatted with crunk about this, we need to investigate hardware requirements to know what we need to have
we need to investigated bandwidth requirements to know how much we can support
aiming for <= 5 screens (multiple people behind screens!) as the first milestone with non-laggy watching
maybe ffmpeg+icecast is not the one true solution
obs supports streaming: https://obsproject.com/wiki/Streaming-With-SRT-Protocol#general-overview (SRT!)
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
simoon & decentral1se taking notes @ https://wiki.hbbs.decentral1.se