Tom Jones tj@enoti.me
whoami
Internet Engineer
Foolish volunteer
Founder, sometime organiser at local hackerspace
Organiser of Techmeetup Aberdeen
"What is needed is adding logos to the front of the video and uploading them to YouTube. That takes time and effort."
"Video is not high priority. It is a volunteer effort done only because folks want it. There is so much work and effort put into the the conference in the months before the conference, that once it is over, we want to attend to so many other tasks which have been pushed to the side. We need to get caught up on our personal lives. This is part of why it takes so long to get post-conference tasks completed."
Recording talks is easy
Streaming
If we can can make the equipment cheap the event can own it
Architecture, tools and equipment to stream events
Technical explanation of what these pieces do
Instructions on how to hack these pieces together
Tools to debug
- Projector - Capture Devices - Audio £ 200 + (microphones) - Video £1600- Mixing £1699 - Combine multiple video sources - Combine multiple audio sources - Combine audio and video- Uplink laptop £1000Total £4499
Components MUST be generally for sale
Run FreeBSD
Capturing Audio
Mixing
Streaming Out
Recording Video
1: https://blog.danman.eu/new-version-of-lenkeng-hdmi-over-ip-extender-lkv373a/
# tcpdump -i ue0 17:00:28.285648 IP 192.168.1.238.5004 > 239.255.42.42.5004: UDP, length 131617:00:28.285902 IP 192.168.1.238.5004 > 239.255.42.42.5004: UDP, length 131617:00:28.286156 IP 192.168.1.238.5004 > 239.255.42.42.5004: UDP, length 131617:00:28.286410 IP 192.168.1.238.5004 > 239.255.42.42.5004: UDP, length 131617:00:28.286664 IP 192.168.1.238.5004 > 239.255.42.42.5004: UDP, length 131617:00:28.286918 IP 192.168.1.238.5004 > 239.255.42.42.5004: UDP, length 131617:00:28.287172 IP 192.168.1.238.5004 > 239.255.42.42.5004: UDP, length 131617:00:28.287426 IP 192.168.1.238.5004 > 239.255.42.42.5004: UDP, length 131617:00:28.288095 IP 192.168.1.238.5004 > 239.255.42.42.5004: UDP, length 017:00:28.289093 IP 192.168.1.238.5004 > 239.255.42.42.5004: UDP, length 017:00:28.290093 IP 192.168.1.238.5004 > 239.255.42.42.5004: UDP, length 017:00:28.291093 IP 192.168.1.238.5004 > 239.255.42.42.5004: UDP, length 017:00:28.292094 IP 192.168.1.238.5004 > 239.255.42.42.5004: UDP, length 017:00:28.293093 IP 192.168.1.238.5004 > 239.255.42.42.5004: UDP, length 0
# ifconfig ue0 192.168.1.2/24$ cvlc udp://@239.255.42.42:5004
bridge.sh
#!/bin/sh socat UDP4-RECV:5004,ip-add-membership=239.255.42.42:192.168.1.2 STDOUT | nc -u 192.168.1.2 5000$ cvlc udp://@:5000$ bridge.sh
Capturing Audio
Mixing
Streaming Out
Recording Video
$ rec -nInput File : 'default' (coreaudio)Channels : 2Sample Rate : 44100Precision : 32-bitSample Encoding: 32-bit Signed Integer PCMIn:0.00% 00:00:11.96 [00:00:00.00] Out:526k [ -====|====- ] Clip:6
$ rec -c 1 test.wav$ play test.wav
$ man 4 snd_uaudio...BUGS... Some USB audio devices might refuse to work properly unless the sample rate is configured the same for both recording and playback, even if only simplex is used. See the dev.pcm.%d.[play|rec].vchanrate sysctls. The PCM framework in FreeBSD currently doesn't support the full set of USB audio mixer controls. Some mixer controls are only available as dev.pcm.%d.mixer sysctls.
If your test is fast or slow you may need to manually sync the rate
$ sudo sysctl dev.pcm.4.rec.vchanrate=44100 dev.pcm.4.rec.vchanrate: 48000 -> 44100
$ rtl_fm -M wbfm -f 97.5M | \ play -r 32k -t raw -e s -b 16 -c 1 -V1 -
$ rtl_fm -M am -f 229.7M -s 15k -E swagc | \ play -r 15k -t raw -e s -b 16 -c 1 -V1 -
Capturing Audio
Mixing
Streaming Out
Recording Video
Everything assemblerizer for video and audio
$ gst-launch-1.0 audiotestsrc ! autoaudiosink
BEEEEEEEEEEEP!
$ gst-launch-1.0 videotestsrc ! autovideosink
recvfeed.sh
gst-launch-1.0 \ udpsrc port=5000 \ ! tsdemux \ ! queue \ ! h264parse \ ! avdec_h264 \ ! autovideosink
gst-launch-1.0 \ autoaudiosrc \ ! autoaudiosink
Capturing Audio
Mixing
Streaming Out
Recording Video
Streaming Service handles:
Scale Engine
Mux it together
flvmux name=muxer streamable=true \ ! rtmpsink location='rtmp://example-origin.secdn.net/example-origin/live/419fw' \
Audio
autoaudiosrc \ ! audioconvert \ ! wavenc \ ! wavparse \ ! audioconvert ! audioresample \ ! audio/x-raw, rate=48000 \ ! avenc_aac \ ! muxer. \
Video
udpsrc port=5000 \ ! tsdemux \ ! queue \ ! h264parse \ ! muxer.
In full we get stream.sh
gst-launch-1.0 -e \ flvmux name=muxer streamable=true \ ! rtmpsink location='rtmp://example-origin.secdn.net/example-origin/live/419fw' \ autoaudiosrc \ ! audioconvert \ ! wavenc \ ! wavparse \ ! audioconvert ! audioresample \ ! audio/x-raw, rate=48000 \ ! avenc_aac \ ! muxer. \ udpsrc port=5000 \ ! tsdemux \ ! queue \ ! h264parse \ ! muxer.
Capturing Audio
Mixing
Streaming Out
Recording Video
- LKV373 HDMI Extender Pair £ 61.99- Lavalier mic £ 10.98- Lantap £ 11.52- USB Ethernet Nic £ 12.99- USB Audio £ 6.49 =======Total £103.97- x5-z8350 PC £ 72.99- Whole bunch of cables £ ??.??
This presentation is open source software and was made with open source software. Open tools were used to build the system presented and the final system is open source.
sox
vim
recordfeed.sh
gst-launch-1.0 \ udpsrc port=5000 \ ! tsdemux \ ! queue \ ! h264parse \ ! mp4mux \ ! filesink location=test.mp4
gstreamer audio pipeline
gst-launch-1.0 \ autoaudiosrc \ ! audioconvert \ ! wavenc \ ! wavparse \ ! audioconvert ! audioresample \ ! audio/x-raw, rate=48000 \ ! avenc_aac \ ! filesink location=output.mp4
$ rtl_fm -M am -f 229.7M -s 15k -l 150 -E swagc | \ gst-launch-1.0 fdsrc \ ! audio/x-raw, format=S16E, channels=1, layout=interleaved, rate=15000 \ ! autoaudiosink
whoami
Internet Engineer
Foolish volunteer
Founder, sometime organiser at local hackerspace
Organiser of Techmeetup Aberdeen
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |