Distributed Conference / Lecture Setup

Introduction

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).

Basic setup for Speakers

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 is elgato-cam-link which needs 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

=== Recommended Hardware==== Webcams with Decent QualityWebcams 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	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 which need to be cropped in software. 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	?	?	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	?	?	Yes [1]	1920×1080 (FullHD)	?
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-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	?	3.5 mm / XLR	Yes [1]	3840 × 2160 (UHD 1)	no	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	photo only	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

[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:

https://www.elgato.com/de/gaming/cam-link/camera-check

https://www.atomos.com/cameras/

https://www.epiphan.com/blog/best-cameras-for-live-streaming/

Cameras and tripods

Firmware mods:

Canon

https://magiclantern.fm/

https://chdk.fandom.com/wiki/CHDK

Tools to get a live image from cams via USB

list of cameras supported by libgphoto2 for USB tethering

OBS plugin (Linux) for gphoto2

sparkocam (Win) for Canon and Nikon

v002 Camera Live (OSX) Canon

https://fujifilm-x.com/de-de/support/download/software/x-webcam/ Fuji webcam tool

https://www.usa.canon.com/internet/portal/us/home/support/self-help-center/eos-webcam-utility/ Canon EOS webcam tool

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

Open Broadcast Software (OBS)

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:

Linux

Windows

OSX (probably only possible with old OSX version or jailbreaks)

Your Studio

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.

Basic setup for Heralds

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.

For providers of RTMP Endpoints

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

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:

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:

<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 why not use… 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.
How this is implemented 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.
This results in our test always in sub-optimal video quality. These solutions also need either a central server that does the video relaying or work on a peer-2-peer base which
means a lot of upload bandwidth is needed on the presenter side. They also run usually in the browser which is just not the perfect place to handle video.
Therefore we recommend a solution where the speaker streams their video to a distribution server with a fixed video quality 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.
But if you just looking for a video telco solution have a look at https://jitsi.org/ and host an instance your self. Below you find some hints how to connect the setup described here to any telco solution.