LibrePlanet: Conference/2015/Streaming

From LibrePlanet
Jump to: navigation, search

THIS PAGE IS A WORK IN PROGRESS

We will be updating this page in the coming days after the conference.

Equipment Used

Video

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

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).

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.