LibrePlanet: Conference/2017/Streaming
Line 60: | Line 60: | ||
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 | 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). | ||
+ | |||
+ | <pre> | ||
+ | # 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 | ||
+ | </pre> |
Revision as of 15:13, 23 March 2017
Contents
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