<span class="latin" style="width:19px;height:19px;">L</span><span class="latin" style="width:19px;height:19px;">i</span><span class="latin" style="width:19px;height:19px;">b</span><span class="latin" style="width:19px;height:19px;">r</span><span class="latin" style="width:19px;height:19px;">e</span><span class="latin" style="width:19px;height:19px;">P</span><span class="latin" style="width:19px;height:19px;">l</span><span class="latin" style="width:19px;height:19px;">a</span><span class="latin" style="width:19px;height:19px;">n</span><span class="latin" style="width:19px;height:19px;">e</span><span class="latin" style="width:19px;height:19px;">t</span><span class="latin" style="width:19px;height:19px;">:</span><span class="latin" style="width:19px;height:19px;">C</span><span class="latin" style="width:19px;height:19px;">o</span><span class="latin" style="width:19px;height:19px;">n</span><span class="latin" style="width:19px;height:19px;">f</span><span class="latin" style="width:19px;height:19px;">e</span><span class="latin" style="width:19px;height:19px;">r</span><span class="latin" style="width:19px;height:19px;">e</span><span class="latin" style="width:19px;height:19px;">n</span><span class="latin" style="width:19px;height:19px;">c</span><span class="latin" style="width:19px;height:19px;">e</span><span class="latin" style="width:19px;height:19px;">/</span><span class="latin" style="width:19px;height:19px;">2</span><span class="latin" style="width:19px;height:19px;">0</span><span class="latin" style="width:19px;height:19px;">1</span><span class="latin" style="width:19px;height:19px;">9</span><span class="latin" style="width:19px;height:19px;">/</span><span class="latin" style="width:19px;height:19px;">S</span><span class="latin" style="width:19px;height:19px;">t</span><span class="latin" style="width:19px;height:19px;">r</span></span><span class="tktr-gyo" style="height:640px;margin:0 0 180px 22px;font-size:19px;_width:19px;/width:19px;"><span class="latin" style="width:19px;height:19px;">e</span><span class="latin" style="width:19px;height:19px;">a</span><span class="latin" style="width:19px;height:19px;">m</span><span class="latin" style="width:19px;height:19px;">i</span><span class="latin" style="width:19px;height:19px;">n</span><span class="latin" style="width:19px;height:19px;">g</span><span class="latin" style="display:block;width:19px;height:19px;"> </span><span class="latin" style="width:19px;height:19px;">-</span><span class="latin" style="display:block;width:19px;height:19px;"> </span><span class="latin" style="width:19px;height:19px;">L</span><span class="latin" style="width:19px;height:19px;">i</span><span class="latin" style="width:19px;height:19px;">b</span><span class="latin" style="width:19px;height:19px;">r</span><span class="latin" style="width:19px;height:19px;">e</span><span class="latin" style="width:19px;height:19px;">P</span><span class="latin" style="width:19px;height:19px;">l</span><span class="latin" style="width:19px;height:19px;">a</span><span class="latin" style="width:19px;height:19px;">n</span><span class="latin" style="width:19px;height:19px;">e</span><span class="latin" style="width:19px;height:19px;">t</span>  

Navigation menu




LibrePlanet


About 
About LibrePlanet
Mission Statement
Founding documents
Support this Community
Code of Conduct
Anti-harassment policy
Teams 
Activists
Wiki Helpers
LibrePlanet Artists
FSF Community Team
Local & Student Teams
Conferences 
LibrePlanet Conference
Non-official
Get involved 
Participate
Discussion channels
Events
 


Login
 










LibrePlanet: Conference/2019/Streaming

 

From LibrePlanet

< LibrePlanet:Conference | 2019

Jump to: navigation, search  

The 2019 speaker videos and streaming of the LibrePlanet conference were created using free software. This year, we used HUBAngl to stream speakers and audio to Icecast.

We've been using this system with minor tweaks since LibrePlanet 2017, when we blogged about it. More information on other years: 2024, 2023, 2017, 2016, 2015.

We used a gstreamer script to stream desktop streams:

#!/bin/bash

export DISPLAY=":0"

while true; do

  unset XPARAMETERS

  # native x200 resolution not supported

  # mirrored mode
  if xdpyinfo|grep -i dimensions |grep 1280x720 -q; then
      XPARAMETERS="startx=0 starty=0 endx=1279 endy=719"
  fi
  # dual mode
  if xdpyinfo|grep -i dimensions |grep 2560x720 -q; then
      XPARAMETERS="startx=1280 starty=0 endx=2559 endy=719"
  fi

  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=1280, height=720 ! queue ! vp8enc target_bitrate=$BITRATE cpu-used=16 deadline=1 threads=2 keyframe-max-dist=$(expr $FRAMERATE \* 2) ! webmmux streamable=true ! shout2send ip=live-master.fsf.org port=80 mount=$MOUNT password=$PASSWORD sync=false
done

We used desktop shortcuts that ran the following scripts to change video resolution, and to set mirror / dual monitor modes:

#!/bin/bash

export DISPLAY=":0.0"

if (xrandr | grep -q "VGA1 disconnected" ); then
  echo "$0: error: failed to detect 2nd monitor in xrandr output. Doing nothing."
  exit 1
fi

if  ! ( xrandr | grep -q _LP); then
    # See https://wiki.archlinux.org/title/xrandr#Screen_Blinking for ways to adjust this.
    xrandr --newmode "1280x720_60.00_LP"   74.50  1280 1344 1472 1664  720 723 728 748 -hsync +vsync
    xrandr --addmode LVDS1 "1280x720_60.00_LP"
    xrandr --addmode VGA1 "1280x720_60.00_LP"
fi

if ( [ "1${1}1" = "1dual1" ]); then
    xrandr --output LVDS1 --mode 1280x720_60.00_LP --output VGA1 --mode 1280x720_60.00_LP --right-of LVDS1
else
    xrandr --output LVDS1 --mode 1280x720_60.00_LP --output VGA1 --same-as LVDS1
fi

echo Changed the screen settings, now restarting gstreamer
pkill gst-launch-1.0

After the conference, we cut and combined the video from the slides laptop and the webcam pointed at the speaker using commands like these:

ffmpeg -i <input file name> -acodec copy -vcodec copy -ss <start point in seconds> -t <duration in seconds> <output file with same file extension>
ffmpeg -threads 0 -i libreplanet2019-room-123_2019-03-23_09-50-48.webm -i libreplanet2019-slides-123_2019-03-23_09-46-26.webm -filter_complex "[0]scale=iw/3:ih/3,fps=24 [pip];[1]fps=24[base];[base][pip]overlay=main_w- overlay_w-10:main_h-overlay_h-10" -g 192 -vcodec libvpx-vp9 -max_muxing_queue_size 9999 output.webm
Retrieved from "https://libreplanet.org/wiki?title=LibrePlanet:Conference/2019/Streaming&oldid=70114" 



















FSF
The Free Software Foundation (FSF) is a nonprofit with a worldwide mission to promote computer user freedom.

We defend the rights of all software users. (Read more)
 



Campaigns


High Priority Free Software Projects

Free JavaScript

Secure Boot vs Restricted Boot

GNU Operating System

Defective by Design

See all campaigns
 



Get Involved



Contact
 




Send your feedback on our translations and new translations of pages to campaigns@fsf.org.

Copyright © 20132023 Free Software Foundation, Inc.  Privacy Policy, JavaScript license information