Zoom und OBS Studio

Wer keinen physischen Kontakt hat, kann sich nicht anstecken und niemanden anstecken. Um Kontakte in der Corona-Pandemie zu vermeiden, arbeiten wir im Home-Office oder gehen in die Home-School. Eine virtuelle Meeting Software ist Zoom. Die Möglichkeiten der Software sind vielfältig begrenzt. Eine Video-Kamera, ein Mikrofon und die Möglichkeit den Desktop zu teilen. Für viele Dinge ist es ausreichend, um einen Unterricht vorzubereiten liefert Zoom jedoch keine Tools mit. Natürlich lässt sich eine Präsentation oder ein Video mit Sound über Screen-Sharing teilen. Verglichen mit einer Streaming Software wie OBS Studio (Open Broadcaster Software) sind die Möglichkeiten eher beschränkt.

Naheliegend ist es daher, eine virtuelle Web-Cam und ein virtuelles Mikrofon in OBS zu definieren und diese dann in Zoom als Eingabe zu nutzen.

In der aktuellen Version für Windows und Linux ist in OBS Studio die virtuelle Kamera enthalten. Für ältere Versionen gibt es dazu für Linux und Windows ein Plugin.
Es fehlt nur ein virtuelles Mikrofon, das wir über die Monitor Schnittstelle mit PulseAudio realisieren.

Virtuelle Kamera mit Plugin unter Linux

Start virtuelle Kamera unter OBS 26.1.2

Das Plugin ist auf habe ich unter Debian 10 und 11 installiert. Unter Debian 10 meldet sich OBS Studion als Version 0.0.1 unter Debian 11 (sid) meldet nach dem letzten Update die Version 26.1.2. In dieser Version ist die virtuelle Kamera bereits enthalten.

Sollte die virtuelle Kamera nicht enthalten sein, kann das Plugin aus dem Source Code installiert werden.

Diese Installation funktioniert grundsätzlich wie im Readme beschrieben. Aber jedes Linux ist anders. Bei mir fehlten ein paar Voraussetzungen, die nicht im Readme beschrieben sind. Deshalb hier eine ergänzte Installationsanleitung.

Benötigt werden die (Entwickler-) Pakete und der Source Code:

  • qtbase5
  • LibOBS
  • V4L2 loopback Utilities
  • cmake
  • make
  • gcc
  • OBS-Studio Source Code
  • Soruce Code des Plugins
  • ggf. diverse andere, die ich bereits installiert habe.

Die folgenden Befehle sollten das Plugin installieren.

sudo apt install qtbase5-dev libobs-dev v4l2loopback-utils gcc make cmake
git clone --recursive https://github.com/obsproject/obs-studio.git
git clone https://github.com/CatxFish/obs-v4l2sink.git
cd obs-v4l2sink
mkdir build && cd build
cmake -DLIBOBS_INCLUDE_DIR="../../obs-studio/libobs" -DCMAKE_INSTALL_PREFIX=/usr ..
make -j4
sudo make install

Im OBS Menü erscheint jetzt ein Eintrag V4L2 Videoausgabe unter Werkzeuge.

Neues Werkzeug V4L2 Videoausgabe

Der Start ist im Readme des Plugins beschrieben. In Zoom erscheint jetzt ein neues Video Device Dummy video decice (0x0000). Die Bezeichnung ist zugegeben nicht schön, aber ich wüsste im Moment nicht, wo ich sie ändern kann. Nun fehlt uns nur noch da Mikrophone.

Virtuelles Mikrofon

Das virtuelle Mikrofon realisiere ich über PulseAudio. Wir brauchen eine Senke, in die OBS Studio den Ton schreibt und eine Quelle, aus der Zoom den Ton übernimmt.

Um das Mikrofon temporär zu definieren, bietet sich ein kleines Shell Script. Ohne Parameter wird das Mikrofon wieder gelöscht. Alles nicht fail-proved, aber er funktioniert quick und dirty.

!/bin/bash

LOADED="/tmp/zoom-obs"

if [ "$1" = "on" ]
then
(
pactl load-module module-null-sink sink_name=OBS
pacmd update-sink-proplist $SINK device.description="OBS Monitor"
pactl load-module module-virtual-source source_name=ZoomMic master=OBS.monitor
pacmd update-source-proplist OBSMic device.description="OBS Mikrofon"
) >> $LOADED
else
for M in $(cat $LOADED)
do
pactl unload-module $M
done
rm $LOADED
fi

Um die Geräte wieder los zu werden und auf den Ursprungszustand zu kommen, reicht der Befehl systemctl –user restart pulseaudio.

Wer es gerne permanent haben möchte, der legt unter ~/.config/pulse/ die Datei default.pa an oder ergänzt eine bestehende Datei um folgende Zeile:

.include /etc/pulse/default.pa
.ifexists module-null-sink.so
load-module module-null-sink sink_name=OBS
update-sink-proplist OBS device.description="OBS Monitor"
.endif
.ifexists module-virtual-source.so
load-module module-virtual-source source_name=OBSMic master=OBS.monitor
update-source-proplist OBSMic device.description="OBS Mikrofon"
.endif

Eingerichtet werden die Geräte dann mit dem obigen Befehl:

systemctl --user restart pulseaudio

Nun sollten die Geräte sichtbar sein.

Wenn nicht, wird es tricky. Wenn die Datei fehlerhaft ist, gibt es oft überhaupt keine Geräte mehr. PulseAudio ist nicht sehr fehlertolerant. Wie gesagt, im schlimmsten Fall werden gar keine Geräte definiert. Folgendes Script stellt die „Werkseinstellungen“ wieder her:

#!/bin/bash
echo "Reconfigure Pulse Audio for user"
mv ~/.config/pulse ~/.config/pulse-backup
mkdir ~/.config/pulse
pulseaudio -k

Auch das folgende Script (oder der Befehl darin) stellt alle per UDEV erstellten Geräte wieder her.

#!/bin/bash
# Rescan audio devices with PulseAudio
pacmd unload-module module-udev-detect && pacmd load-module module-udev-detect

Wenn alles funktioniert, können wir in OBS Studio den Audio-Monitor auf unsere virtuelle Senke legen.

Monitor auf das virtuelle Mikrofon legen.

Leider wird hier nicht unser schöner Name angezeigt, sondern Monitor of Null-Ausgabe.

Die den Audio-Stream den Mikrofones und der Videos oder Musik müssen wir jetzt nur auf Monitor und Ausgabe legen, damit der Ton in Zoom ankommt. Das ist etwas tricky, weil es zahlreiche Lautstärkeregler zwischen dem realen Mikrofon und dem Zuhörer am anderen Ende des Zoom-Meetings gibt. Im Prinzip sollten alle Lautstärkeregler der virtuellen Geräte auf 100% sein. Das Zeige ich aber besser in einem Video. Für ein Script ist ein Text, der Copy and Paste übernehmbar ist, besser als ein Video geeignet.


Zu guter Letzt müssen wir unser virtuelles Mikrofon in Zoom auswählen. Zoom zeigt hier unsere Namen. Ich habe jetzt nicht ausprobiert, wass passiert, wenn ich versuche den Ton auf den OBS Monitor zu legen. Es dürfte eien nicht serh angenehme Rückkopplung geben, dann was zum OBS Monitor rei geht, geht zum Mikrofon raus.

Seiten: 1 2

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.