distributed-conference

Distributed Conference / Lecture Setup

As we are facing the COVID-19 pandemic there is demand for online lectures,“virtual” conference or just teaching people online. We want to support such virtual conferences and enable speakers to give their talk from home live or recorded to put it online somewhere, for example on media.ccc.de or YouTube.

The setup below also works with commercial streaming service like YouTube or self hosted solution. This means it can be used without any dependencies on VOC infrastructure. One can also (at least on linux and windows) use it with telco services like jistsi, NextCloud Talk or Zoom, Skype,… (more on that under Fake Webcam).

For an optimal setup a speaker needs two screens. The speaker should position one screen at the same height as the camera, close to or below it. This screen should display the slides. This way the speaker, looking at their slides and notes, will also look at the camera.

The second screen runs OBS, the video mixing software we support, which captures the presentation screen as well as its camera and microphone. The speaker will decide to either stream the slides, the speakers face or a combination of two. A speaker can either switch beteen those, if they are comfortable doing so during the talk, or just use the combination of slides and face the entire time. More on how to do all this below. (Of course its also possible to do all this with one screen but can be a little tricky to fit everything on one or switch between apps).

With the provided OBS project (see below) a unified layout according to our best practices can be achieved.

  • PC / Laptop with win/lin/osx and OBS
  • 2 screens (or laptop + external display)
  • Webcam
  • Microphone
  • 5Mbit/s or more upload

The following sections describe some of the finer points of your new “studio” skip those that are not relevant to you. You find a summary in the section “Your Studio”.

Improving video and audio quality

Here are some hints to improve the audience experience or work around missing hardware parts:

  • Camera
    • If a camera is at hand (e.g. DSLR), which is able to output HDMI (check using a TV / screen) or USB tethering, using it can improve the video quality drastically
    • An affordable solution to connect this camera on Windows/Linux/MacOS are USB 3 UVC capture devices which need no drivers or binary software to work
    • BMD DeckLink capture cards are also a good option
    • USB tethering (see below camera section) usualy provides a lower resolution and image quality than HDMI out but you still get better image as with most webcams.
    • More expensive or slightly less suitable hardware is available, but may still help Framegrabber / Scaler
    • You can use a Android oder iPhone as a camera in OBS. There are different ways to do that depending on your OS / Phone. This is more like “your last option” than a recommendation but it works.
    • If you don't want to show slides and only need a video of you, you can use a phone or tablet without going through OBS. See this howtos for android or iPhone / iPad.
    • If you only want slides and can display it on you phone / tablet you can use laric screencaster on android to stream slides and sound from you phone / tablet. But this is only a last resort if you don't have a computer.
  • Tripod
    • A tripod is handy to give the camera the right angle and position
    • As you are not going to do many camera movements, cheap tripods are fine as long as they are able to carry the weight of your camera
  • Headset / Microphone
    • Even very cheap (~25€) / entry level PC headsets work very well in quiet rooms
      • Headsets also often include a speaker, which can be used for talk back e.g. for Q&A
    • Directed on camera mics do also work well for this use case as long as there is not to much ambient noise
    • Using the microphone in the camera instead of built-in laptop microphones can help a lot
  • Light
    • A good light source (lamp) improves the video quality very much
    • A normal desktop lamp can be used, you may want to adjust white balance in the camera to fit the spectrum
    • A cheap option for a camera light would be this
    • A slightly better option (which can adjust color temperature) is this

Webcams with decent quality

Webcams nowadays usually come with a built-in microphone. This is usually a step up compared with laptop microphones / cameras. Some webcams can output the video already in H.264/H.265 compressed, JPEG compressed or RAW video format.
Selecting a different mode can improve the quality but sadly most applications don't support this.
Webcams usually have a poorer quality compared to video / photo cameras, mostly because of the very tiny sensor and cheap lens.
You will always want a good light source when using a webcam.

Manufacturer Model Connector Maximum Resolution
Logitech C920 HD PRO Webcam USB 1920×1080 (FullHD) Provides internal mic. Better than most Laptop built-ins, but narrower sound pickup preferred.
Logitech Brio USB 2/3 4k@30fps, 1080p@30,60 65, 78 and 90 degrees Field of View, Autofocus, two omni-directional microphones

Cameras with HDMI output / USB tethering

Many consumer and professional photo (and of course video) cameras these days can put out a live video image via HDMI. In general this is always a better option than a webcam.
Many cameras limit the recording time to 30 minutes because of tax reasons (or for protection of the high price video camera market).
The recording limit is not a big issue as you can record on the PC but you need to test if your cam is overheating in the time your lecture will take.
Also some cameras get very warm (perhaps even hot) over time and shut them self down. E.g. the Sony Alpha III needs to be configured to ignore the lower temperature warning even if you are not recording on the camera itself or it will shut down.
Also not all cameras are able to put out a clean image with no menus or icons in the output signal. Some cameras allow this to be configured via settings.
For some cameras you can get firmware modifications that allow a clean feed output to be enabled.

Manufacturer Model Connector Video USB tethering Connector Audio Clean Output Maximum Resolution 30 min rec limit Comment
BlackMagic PocketCinema 4k HDMI no mini XLR Yes [1] 1920×1080 (FullHD) no
BlackMagic Pocket Cinema Camera 6K HDMI no mini XLR Yes [1] 6144×3456 no
Canon 250D Mini-HDMI untested 3.5 mm (Stereo) Yes 4K yes
Canon 550D Mini-HDMI yes (1056×704) 3.5 mm Yes [1] [2] 1920×1080 (FullHD) yes probably overheats after ~30 min when streaming via HDMI tested by monoxyd, with USB thethering and original canon firmware capture is possible for at least a hour (the battery didn't allow for longer tests) (tested with GPhoto)
Canon 600D Mini-HDMI yes (1056×704) 3.5 mm Yes [1] [2] 1920×1080 (FullHD) yes Image has black borders, with ML the image has smaler borders. Magic Lantern needed for clean view. Parallel recording on camera will reduce resolution on HDMI. Fake Battery with power supply needed to not run on battery
Canon 70D Mini-HDMI yes (1104 x 736) 3.5 mm No 1920×1080 (FullHD) yes Letterbox Overlay can't be turned off in Canon firmware.
Canon 5D Mark III Mini-HDMI ? 3.5 mm Yes [1] 1920×1080 (FullHD) ? Since Firmware 1.2.1 5D Mark III can now be upgraded (for free) to capture clean, uncompressed YCbCr 4:2:2 8-bit digital video. Uncompressed footage will be sent with embedded time code over the camera’s HDMI output while it simultaneously displays the video on the rear LCD and records it to its memory cards.
Fuji X-T2 Micro-HDMI win / linux ? ? Yes 1920×1080 (FullHD) ? Battery-Mode only. Mains current feed requires Fujifilm VG-XT2 battery handgrip. X-T3 is probably similar, but with UHD and normal HDMI connector (to be verified).
Nikon D750 Mini-HDMI no 3.5mm Yes [1] 1920×1080 (FullHD) no
Panasonic AG-UX90 HDMI no XLR Yes [1] 3840 × 2160 (UHD 1) no During internal recording HDMI Resolution is limited to 1920×1080 (FullHD).
Panasonic HDC-SD66 Mini-HDMI no none Yes [1] 1920×1080 (FullHD, Interlaced), 720×576 (DVD, progressive) no FullHD Signal is interlaced. No Microphone input. Icons can be turned off in Menu via Settigs > Ext-Display > Off.
Panasonic HDC-SD909 Mini-HDMI no 3.5 mm Yes [1] 1920×1080 (FullHD) no Camera icons displayed in HDMI-out can be hidden by pressing the 'EXT DISPLAY' button on the remote. Rotating the Display by 180 degree (so that the display is showing in direction of the camera lens) also turns off the overlay. This overrides the settinge set by remote. There seems to be no menu option for this.
Panasonic HC-X909 Mini-HDMI no 3.5 mm Yes [1] 1920×1080 (FullHD) no Camera icons displayed in HDMI-out can be hidden by pressing the 'EXT DISPLAY' button on the remote. Rotating the Display by 180 degree (so that the display is showing in direction of the camera lens) also turns off the overlay. This overrides the settinge set by remote. There seems to be no menu option for this.
Panasonic HC-X1 HDMI no XLR Yes [1] 3840 × 2160 (UHD 1), 4096 × 2160 (4K) no During internal recording HDMI Resolution is limited to 1920×1080 (FullHD). Probably the same as AG-UX180.
Panasonic DC-S1 HDMI win / linux inital support 3.5 mm / XLR Yes [1] 3840 × 2160 (UHD 1) no Optional dual XLR audio preamp.
Panasonic DC-S5 Micro-HDMI win / linux inital support 3.5 mm / XLR Yes [1] 3840 × 2160 (UHD 1) for 4k 10bit Optional dual XLR audio preamp.
Panasonic DC-GH4 Micro-HDMI photo only 3.5 mm / XLR Yes [1] 3840 × 2160 (UHD 1) yes Dual SD slot. Optional dual XLR audio preamp. 4:2:2 10-bit or 8-bit HDMI. Optional SDI / XLR kit
Panasonic DC-GH4R Micro-HDMI photo only 3.5 mm / XLR Yes [1] 3840 × 2160 (UHD 1) yes Dual SD slot. Optional dual XLR audio preamp. 4:2:2 10-bit or 8-bit HDMI. Optional SDI / XLR kit
Panasonic DC-GH5 HDMI win / linux ? / osx ? 3.5 mm / XLR Yes [1] 3840 × 2160 (UHD 1) no Dual SD slot. Optional dual XLR audio preamp. 4:2:2 10-bit or 8-bit HDMI, https://www.youtube.com/watch?v=oqWofspD6BA
Panasonic DC-GX80 Micro-HDMI ? 3.5 mm Yes [1] 3840 × 2160 (UHD 1) ?
Sony Alpha III Micro-HDMI ? 3.5 mm Yes [1] 3840 × 2160 (UHD 1) yes Gets very hot over time.
Sony FDR-AX100E Micro-HDMI ? ? Yes [1] 3840 × 2160 (UHD 1) ? During internal recording, HDMI-out is blank in UHD → Change resolution to 1920×1080 (FullHD), HDMI out is active during recording
Sony Alpha 6100 Micro-HDMI ? 3.5 mm microphone Yes [1] 3840 × 2160 (UHD 1) 30 fps / 1920×1080 (FullHD) 60 fps no
Sony Alpha 6600 Micro-HDMI ? 3.5 mm microphone in and monitor out Yes [1] 3840 × 2160 (UHD 1) 30 fps / 1920×1080 (FullHD) 60 fps no

[1] camera icons displayed in HDMI-out can be hidden by menu.
[2] needs Magic Lantern

For more information on cameras supporting clean output over HDMI see also:

Firmware mods:

Tools to get a live image from cams via USB

Headsets and Microphones

In most situations a headset gives the speaker the most freedom to move while keeping the microphone at the correct (or at least constant) distance to his mouth.
The main draw break is the viewer can see it. Depending if a talk back to the speaker e.g. for Q&A should be possible a headset is the best option.
If no talk back is necessary also directed mics e.g. placed on the camera can be used. A silent room is recommended as this microphones pick up more ambient noise.
Also lavalier (mics attached to your chest / collar) are an option. They require a lot of discipline (e.g. not touching it, not move to much etc etc) but can be use full
if you have a huge beards that interferes with the headset and you don't have a directed mic.

Type Manufacturer Model Connector Capsule Typ Comment Link
headset logitech h370 USB decent entry level USB headset for quiet rooms https://www.logitech.com/en-us/product/h370-usb-headset-noise-canceling-mic
directed Røde videomic 3.5 mm jack cardioid condenser microphone capsule decent on cam mic for about 40€, comes with decoupling holder and windshield https://www.rode.com/microphones/videomicro
lavalier Røde Røde Wireless GO 3.5 mm jack omnidirectional wireless set: lightweight transmitter with microphone and receiver ~180€ https://www.thomann.de/de/rode_wireless_go.htm
headset Røde Røde HS2-P Large 3.5 mm jack omnidirectional headset fits to Røde Wireless GO ~240€ https://www.thomann.de/de/rode_hs2_p_large.htm
directed Røde Røde podcaster USB Niere Table / Arm mic, ~220€ so only if you need it often https://de.rode.com/microphones/podcaster
headset HyperX Cloud Alpha S USB bidirektional Gaming Headset, but very good mic quality ~100€ https://www.hyperxgaming.com/de/headsets/cloud-alpha-s-gaming-headset
headset HyperX Cloud II USB / 3.5mm jack (Speaker / Mic combined) condenser (back electret) Gaming Headset, but very good mic quality ~100€ https://www.hyperxgaming.com/de/headsets/cloud-gaming-headset
directed M-Audio Uber Mic USB 3-capsule condenser Table / Arm mic, ~100€ https://m-audio.com/ubermic
lavailer Sennheiser AVX-MKE2 set XLR with 3.5mm adapter included omnidirectional wireless headset using DECT, excellent quality but expensive https://en-de.sennheiser.com/camera-wireless-lavalier-microphone-system-set-avx-mke2

OBS Operation

Within OBS we provide three composite modes which the speaker can choose from.
We aim here for simplicity while also delivering a similar experience to the stream viewers “as usual”.
(NOTE: the files for this are not ready yet but feel free to play around and design some your self in the meantime)

The lecture view shows the video of the speaker with the slides next to it.

The fullscreen view shows only the speaker. Most useful if there are no slides or for example the speaker is introducing itself.

The slides view shows the slides in fullscreen. Most useful when there is a lot of small text on the slides or a video is presented.


OBS Settings

If possible a GPU / hardware video encoder should be used to make sure we don't run into a high CPU load. On nearly all modern Intel CPUs this just works. NVidia and AMD(ATI) GPUs might or might not work. Have a look at Video Acceleration.
The setting in OBS differs a little from OS to OS but you will get it. Only choose the CPU based encoder if you have no other option.
GPU encoding
CPU encoding

  • Set the encoder to FFMPEG VAAPI (linux / Intel GPU) (On Win/OSX this has a different name look for VAAPI / NVenc)
  • Set the codec to h264
  • Set the profile to the highest level you can select
  • Set the bit-rate to 5000 Kbps (If your internet up-link is smaller than 10Mbit you might need a lower value here.)

We also ask you to record your talk to your hard disk. We will also record your stream but your local recording will also be there when the internet connection dies or something bad happens on our side. Therefore also configure the recording settings.

  • Select a Recording Path to a location where you have some free disk space (10Gb should be enough)
  • Select mkv as Recording Format
  • Select “use stream encoder” as Encoder (Only if needed to choose a low bit-rate it might be useful to select a second encoder here with a higher bitrate.)

To send your talk out into the interwebs you also need to configure the streaming endpoint. You will get a URL from us / the event organisation to fill in here.

Fake Webcam

If you want to use the ouput of OBS in a group telco solution like jitsi you can do this with a “fake webcam”. Depending on your OS there are different solutions for this:

  • The camera should be above or next to the screen on which you run your presentation. This will make it easy for you to look into the camera.
  • If you can, have 2 screens one for OBS one for your presentation. If that is not possible you can switch between the windows or just select one composition in OBS and use it for the whole talk. Hotkeys may also be an option.
  • Don't use WIFI as uplink for your computer if possible. Video streaming and packet loss are not good frinds.
  • Make sure you don't have your passwords, a private picture or something else you don't want to show to the whole Internet behind you. A white wall, a nice scarf or a chaos flag are good options.
  • Sound that echos back from empty walls sucks. If you are not using a headset (or it's still hally) try to cover the walls with things that absorb sound.
  • You need light. If you have windows the sun will (most likely) change its position so you will not have a constant light source. This can be annoying. You should place some lamps somewhere and especially something that shines on your face.
  • If you use a real camera there are some things you should set:
    • Select a low focal length. This will make the background a little blurry and sets the focus on the important thing, you!
    • You should have at least 25 frames per second. (Which means your exposure time should be set below 1/25 second.)
    • Auto focus is usually not your friend. If you are not planning moving around use manual focus.
    • White balance should be set according to your light source. Don't use auto white balance (AWB). The camera could change the white balance when you change your slide because the light emitted by the screen in front of you changes.

Should your event have Heralds or others that introduce speakers and ask questions after the talk, the setup is similar for them, however one screen with OBS is enough, since they usually will not present slides.

Heralds will stream their feed to the same endpoint as the speakers. At the endpoint directing decision (which feed to show) can be made.

The following instructions are for those who want to operate their own streaming server. Speakers or Heralds at distributed events do not need this.

Click to display ⇲

Click to hide ⇱

=== Simple HLS streaming platform with nginx-rtmp

  • possible sources: OBS, FFmpeg,…
  • install nxing-rtmp:

You may either compile nginx and its rtmp module yourself or check if you distribution ships the RTMP module (e.g. ubuntu and debian do ship it)

=== Compiling Before starting check that libpcre3, libpcre3-dev, openssl, libssl-dev, zlibc, zlib1g and zlib1g-dev are installed.

cd /opt/ 
wget http://nginx.org/download/nginx-1.17.9.tar.gz 
tar -xf nginx-1.17.9.tar.gz 
git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git 
cd nginx-1.17.9/ 
./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=../nginx-rtmp-module 
make -j 1 
make install 
vi /usr/local/nginx/conf/nginx.conf
  • configure as http daemon on port 8080, see sample config from here:

Click to display ⇲

Click to hide ⇱

worker_processes  auto;
events {
    worker_connections  1024;
}

=== Configuration
# RTMP configuration
rtmp {
    server {
        listen 1935; # Listen on standard RTMP port
        chunk_size 4000;

        application show {
            live on;
            # Turn on HLS
            hls on;
            hls_path /var/www/video/hls/;
            hls_fragment 3;
            hls_playlist_length 60;
            # disable consuming the stream from nginx as rtmp
            deny play all;
        }
    }
}

http {
    sendfile off;
    tcp_nopush on;
    directio 512;
    default_type application/octet-stream;

    server {
        listen 8080;

        location / {
            # Disable cache
            add_header 'Cache-Control' 'no-cache';

            # CORS setup
            add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Expose-Headers' 'Content-Length';

            # allow CORS preflight requests
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain charset=UTF-8';
                add_header 'Content-Length' 0;
                return 204;
            }

            types {
                application/dash+xml mpd;
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
                text/html html;
            }

            root /var/www/video/;
        }
    }
}
  • note: there is no systemd unit file covered in this howto, start it manually:

/usr/local/nginx/sbin/nginx

=== Playout Website create simple player webpage, see sample here, put it in /var/www/video/index.html:

Click to display ⇲

Click to hide ⇱

<html>
<head>
  <link href="https://vjs.zencdn.net/7.6.6/video-js.css" rel="stylesheet" />

  <!-- If you'd like to support IE8 (for Video.js versions prior to v7) -->
  <script src="https://vjs.zencdn.net/ie8/1.1.2/videojs-ie8.min.js"></script>
</head>

<!-- TODO adjust width, height and poster filename to your needs -->

<body>
  <video
    id="my-video"
    class="video-js"
    controls
    preload="auto"
    width="1024"
    height="576"
    poster="MY_VIDEO_POSTER.jpg" 
    data-setup="{}"
  >
    <source src="hls/stream.m3u8" type="application/x-mpegURL" />
    <p class="vjs-no-js">
      To view this video please enable JavaScript, and consider upgrading to a
      web browser that
      <a href="https://videojs.com/html5-video-support/" target="_blank"
        >supports HTML5 video</a
      >
    </p>
  </video>

  <script src="https://vjs.zencdn.net/7.6.6/video.js"></script>
</body>
</html>
  • URL to access the stream is now http://<yourdomain>:8080 via browser or http://<yourdomain>:8080/hls/stream.m3u8 in VLC, mpv etc.
  • Configure OBS to push via RTMP to rtmp://<yourdomain>/show with a stream key of “stream” (after things are running, do some resarch for protecting RTMP via a secret in RTMP URL!)
  • Also see OBS settings section above

But first a few words on “Why not use Skype/GotoMeeting/Jitsi/Cisco …”: What all this services have in common is that they are designed as many-to-many communication tools.
The implementation differs from solution to solution, but they all have in common that they alter resolution / bit-rate and other parameters as they think it's best. In our tests this always resulted in sub-optimal video quality. They also need either a central server relaying the video, or work on a peer-2-peer base which means a lot of upload bandwidth is needed on the presenter side.

Therefore we recommend solutions where speakers stream their video in a fixed video quality to a distribution server, and a CDN does the distribution. In our case it's our own CDN, but you can e.g. use the YouTube streaming service for free.

If you just looking for a video telco solution have a look at https://jitsi.org/ or BBB and host an instance yourself. Below you find some hints how to connect the setup described here to any telco solution.

  • distributed-conference.txt
  • Last modified: 2020/12/16 20:46
  • by andi