LibrePlanet: Conference/2015/Streaming
Contents
THIS PAGE IS A WORK IN PROGRESS
We will be updating this page in the coming days after the conference.
Equipment Used
Video
- 1x Elphel 353 (http://elphel.com)
- 1x Camera Stand
Audio
- 2x XLR Microphones
- 2x Microphone Stands
- 1x Behringer QXENYX1002 USB sound board
- 4x XLR cables
- 2x 6.35mm male to XLR female adapter
Streaming and Capture
- 1x X200 Thinkpad (with LibreBoot, http://libreboot.org)
- 1x Streaming Server (Virtual Machine)
- 250GB SSD
- 4GB RAM
ScreenCast
- 1x X200 Thinkpad (with LibreBoot, http://libreboot.org)
- 250GB SSD
- 4GB RAM
Software Used
Streaming Server
- IceCast2 2.4.1
Streaming Clients
The following software was compiled and installed via the OpenVideo Reference Build project (https://gitorious.org/openvideo_reference_build) on Trisquel 7 GNU/Linux (https://trisquel.info).
- GStreamer (http://gstreamer.freedesktop.org/)
- Jack Audio Server (http://jackaudio.org/)
- (need to add the rest)
Set up
Camera
- Unpack the gigabit switch
- Plug the switch into the mains
- Use an ethernet cable to plug the switch into the local network of the site.
- Unpack Elphel 353 camera and attach it to the tripod.
- Attach an ethernet cable into the RJ-45 connector on the camera
- Plug the other end of the cable into the PoE injector.
- Plug the PoE injector into the switch
- Plug the PoE injector into the mains
At this point you should have have the Elphel 353 camera attached to a tripod, powered on, with the network connection physically setup.
Our GStreamer Pipeline
In this example please repalce the following with your own information:
- 192.168.48.2 - IP Address of camera
- live.example.com - IceCast2 server address
- examplepassword - IceCast2 password
- speaker_mountpoint - IceCast2 mountpoint and local sink filename for the speaker audio/video feed
- slides_mountpoint - IceCast2 mountpoint for the slides
Audio/Video
gst-launch-1.0 -e rtspsrc location=rtsp://192.168.48.2:554 latency=100 ! queue max-size-bytes=100000000 max-size-time=0 ! rtpjpegdepay ! queue max-size-bytes=100000000 max-size-time=0 ! jpegdec max-errors=-1 ! queue max-size-bytes=100000000 max-size-time=0 ! videorate ! video/x-raw,framerate=16/1 ! queue max-size-bytes=100000000 max-size-time=0 ! videoscale ! video/x-raw, width=1296, height=560 ! queue max-size-bytes=100000000 max-size-time=0 ! tee name=halfres ! queue max-size-bytes=100000000 max-size-time=0 ! jpegenc idct-method=2 ! queue max-size-bytes=100000000 max-size-time=0 ! matroskamux name=mux jackaudiosrc connect=1 client-name="GStreamer Input" ! audio/x-raw,rate=48000,channels=1 ! queue max-size-bytes=100000000 max-size-time=0 ! tee name=jackaudio ! queue max-size-bytes=100000000 max-size-time=0 ! vorbisenc ! queue max-size-bytes=100000000 max-size-time=0 ! tee name=vorbisaudio ! queue max-size-bytes=100000000 max-size-time=0 ! mux. mux. ! queue max-size-bytes=100000000 max-size-time=0 ! filesink location=speaker_mountpoint`date +%s`.mkv sync=false halfres. ! queue max-size-bytes=100000000 max-size-time=0 ! videoscale ! video/x-raw,width=648, height=280 ! queue max-size-bytes=100000000 max-size-time=0 ! theoraenc bitrate=400 speed-level=1 ! queue max-size-bytes=100000000 max-size-time=0 ! oggmux name=livestream vorbisaudio. ! queue max-size-bytes=100000000 max-size-time=0 ! livestream. livestream. ! queue max-size-bytes=0 max-size-time=0 ! shout2send ip=live.example.com port=80 password=examplepassword mount=/speaker_mountpoint.ogv halfres. ! videoscale add-borders=true ! queue max-size-bytes=100000000 max-size-time=0 ! videoconvert ! queue max-size-bytes=100000000 max-size-time=0 ! xvimagesink sync=false jackaudio. ! queue max-size-bytes=100000000 max-size-time=0 jackaudio. ! queue max-size-bytes=100000000 max-size-time=0 ! audioconvert ! queue max-size-bytes=100000000 max-size-time=0 ! alsasink
Slides/Screencast
gst-launch-1.0 --eos-on-shutdown ximagesrc use_damage=false ! capsfilter caps=video/x-raw,framerate=4/1,width=1280,height=800 ! queue max-size-bytes=100000000 max-size-time=0 ! videoscale ! video/x-raw, width=1056, height=660 ! queue max-size-bytes=100000000 max-size-time=0 ! videoconvert ! queue max-size-bytes=100000000 max-size-time=0 ! theoraenc bitrate=400 keyframe-auto=false keyframe-force=12 keyframe-freq=12 speed-level=1 drop-frames=false ! queue max-size-bytes=100000000 max-size-time=0 ! oggmux ! queue max-size-bytes=100000000 max-size-time=0 ! shout2send ip=live.example.com port=80 password=examplepassword mount=/slides-mountpoint.ogv
Web Frontend
The live stream web client was written using MithrilJS. This interface depends on Icecast >= 2.4.0 for the JSON statistics API. See here for the source code.
Additionally, a LibreJS-compatible fork of the KiwiIRC client was embedded onto the page. See here for the source code.