LibrePlanet: Conference/2017/Streaming

From LibrePlanet
Jump to: navigation, search

Slides streaming script

This script captures 1024x768 pixels from the top right screen (the projector screen). The screens can be configured in these three ways:

  • Mirrored, 1024x768: The whole screen is streamed.
  • Dual, 1280x800 + 1024x768: The screen on the right is streamed. Make sure that the two screens are top aligned and contiguous.
  • Dual, 1024x768 + 1024x768: The screen on the right is streamed. Make sure that the two screens are contiguous.
#!/bin/bash

BITRATE=500000
MOUNT=room-141-slides.webm
PASSWORD=pw
FRAMERATE=10

if xdpyinfo|grep -i dimensions |grep 2304x800 -q; then
    XPARAMETERS="startx=1279 starty=0 endx=2303 endy=767"
fi
if xdpyinfo|grep -i dimensions |grep 2048x768 -q; then
    XPARAMETERS="startx=1023 starty=0 endx=2047 endy=767"
fi

while true; do
  sleep 1
  gst-launch-1.0 -e ximagesrc $XPARAMETERS use-damage=false show-pointer=false ! videoconvert !  videorate ! video/x-raw,framerate=$FRAMERATE/1 ! videoscale ! video/x-raw, width=1024, height=768 ! queue ! vp8enc target_bitrate=$BITRATE cpu-used=16 deadline=1 threads=2 keyframe-max-dist=$(expr $FRAMERATE \* 2) ! webmmux streamable=true ! shout2send ip=live2.fsf.org port=80 mount=$MOUNT password=$PASSWORD sync=false
done

480p Scaling script

This takes a video that is being streamed at live*.fsf.org/video.webm, scales it down to 480p, and publishes it back as live*.fsf.org/video-480p.webm

#!/bin/bash

if [ $# != 1 ]; then
 echo usage $0 http://foo.bar/baz.webm
 exit 1
fi

BITRATE=500000
URL=$1
PASSWORD=pw

MOUNT=$(echo $URL |sed 's=.*/==; s/.webm//')-480p.webm

while true; do
  sleep 1
  if wget $URL -O - -q | grep . -q ; then
    gst-launch-1.0 -v souphttpsrc location=$URL ! decodebin ! videoconvert ! videoscale ! video/x-raw, width=853, height=480 ! queue ! vp8enc target_bitrate=$BITRATE cpu-used=16 deadline=1 threads=2 ! webmmux streamable=true ! shout2send ip=live2.fsf.org port=80 mount=$MOUNT password=$PASSWORD sync=false                                                                                                       
 
 else
    echo $URL is not live
  fi
done

Command to do the same with just audio

   gst-launch-1.0 -v souphttpsrc location=http://live2.fsf.org/test.webm ! matroskademux ! oggmux ! shout2send ip=live2.fsf.org port=80 mount=test.ogg password=pw sync=false

Commands to set the webcam

The following commands make use of v4l2-ctl, available in package v4l-utils.

The following values are an initial template for a Logitech c930e camera. The two main values to tweak depending on the light quality of a specific room, are:

  • white_balance_temperature: 2000 to 7500. 3000 is a good value for fluorescent lights, the lights at Stata are redder, they may need a lower value. Room 123 has some natural light, may need a higher value.
  • gain: use this value to increase or decrease the luminosity. If the room is too dark and the value needs to be higher than 80 or so, it is advisable to increase exposure_absolute to 600, and use a lower gain value (that would get lower noise, at the expense of more motion blur).
#                     brightness (int)    : min=0 max=255 step=1 default=128 value=128
#                       contrast (int)    : min=0 max=255 step=1 default=128 value=128
#                     saturation (int)    : min=0 max=255 step=1 default=128 value=128
# white_balance_temperature_auto (bool)   : default=1 value=1
v4l2-ctl -c white_balance_temperature_auto=0
#      white_balance_temperature (int)    : min=2000 max=7500 step=1 default=4000 value=4000 flags=inactive
v4l2-ctl -c white_balance_temperature=4000
#                      sharpness (int)    : min=0 max=255 step=1 default=128 value=128
v4l2-ctl -c sharpness=170
#         backlight_compensation (int)    : min=0 max=1 step=1 default=0 value=0
#           power_line_frequency (menu)   : min=0 max=2 default=2 value=2
#                  exposure_auto (menu)   : min=0 max=3 default=3 value=3
v4l2-ctl -c exposure_auto=1
#              exposure_absolute (int)    : min=3 max=2047 step=1 default=250 value=250 flags=inactive
v4l2-ctl -c exposure_absolute=400
#                           gain (int)    : min=0 max=255 step=1 default=0 value=0
v4l2-ctl -c gain=60
#         exposure_auto_priority (bool)   : default=0 value=1
v4l2-ctl -c  exposure_auto_priority=0
#                   pan_absolute (int)    : min=-36000 max=36000 step=3600 default=0 value=0
#                  tilt_absolute (int)    : min=-36000 max=36000 step=3600 default=0 value=0
#                 focus_absolute (int)    : min=0 max=255 step=5 default=0 value=0 flags=inactive
v4l2-ctl -c focus_absolute=0
#                     focus_auto (bool)   : default=1 value=1
v4l2-ctl -c focus_auto=0
#                  zoom_absolute (int)    : min=100 max=400 step=1 default=100 value=100
#                      led1_mode (menu)   : min=0 max=3 default=0 value=3
#                 led1_frequency (int)    : min=0 max=255 step=1 default=0 value=0