Den Desktop als Fake-Webcam unter Linux verwenden

Den Desktop als Fake-Webcam unter Linux verwenden

Ich möchte über eine kostenlose Streaming-Site einen Live-Stream (eines Fensters) meines Linux-Desktops erstellen und das aufgenommene Video als Fake-Webcam verwenden. Unter Windows gibt es hierfür viele Tools. Mit ffmpeg kann ich Eingaben in einem bestimmten Fenster erfassen, aber ich finde keine Möglichkeit, das Video auf einem Fake-Webcam-ähnlichen Gerät auszugeben, das mit Flash verwendet werden kann.

Kann jemand eine Methode (oder Software) hierfür empfehlen?

Antwort1

Sie können installierenv4l2loopback. Es ist ein Kernelmodul, das eine Webcam simuliert. Laden Sie es mit:

modprobe v4l2loopback

Anschließend müssen Sie den Videostream mit einem Programm wie ffmpeg an das Gerät senden /dev/videoN(wobei Ndie Nummer ist, die dem neu erstellten Gerät entspricht – wahrscheinlich die höchste Nummer). Um den Desktop zu erfassen und ihn /dev/videoNmit ffmpeg weiterzuleiten, können Sie die folgende Befehlszeile verwenden:

ffmpeg -probesize 100M -framerate 15 -f x11grab -video_size 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/videoN

Ändern Sie den Wert von -framerate15 auf einen anderen Wert, wenn Sie eine andere Bildrate wünschen.

Die Auflösung wird im -video_sizeParameter gewählt. Wenn Sie einen Versatz von der oberen linken Ecke des Bildschirms angeben möchten, übergeben Sie ihn im Parameter -i in der Form -i :0.0+x,y, wobei x und y jeweils der horizontale und vertikale Versatz sind.

Antwort2

Verwendenv4l2loopback mit mplayer.

  1. Lade es herunter,

  2. kompilieren ( makeund su -c 'make install'),

  3. lade das Modul mit su -c 'modprobe v4l2loopback',

  4. dann ändern Sie eine Zeile in der Datei examples/yuv4mpeg_to_v4l2.cdes v4l2loopback Quellordners von

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;
    

Zu

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YVU420;
  1. und tun Sie dies makein diesem Ordner.

  2. Führen Sie es dann exampleswie folgt aus dem Verzeichnis aus:

    mkfifo /tmp/pipe  # only needed once, as long as you do not delete the file /tmp/pipe
    ./yuv4mpeg_to_v4l2 < /tmp/pipe &
    mplayer movie.mp4 -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe
    

wobei Sie movie.mp4durch den Namen Ihrer Videodatei ersetzen. Und ersetzen Sie /dev/video0durch Ihr Loopback-Gerät.

MPlayer kann alle Webstreams und alle Arten von Videodateien abspielen, sogar von stdin! Ich habe es gerade mit einer Datei vonhttp://www.tagesschau.deDas ist eine deutsche Nachrichtenseite.

TS=$(wget "http://www.tagesschau.de/multimedia/video/" -q -O - | grep --regexp='http.*\.webm"' | sed -e 's%.*href="%%' -e 's%\.webm".*%\.webm%')
./yuv4mpeg_to_v4l2 < /tmp/pipe &
mplayer $TS -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe

Anstelle von $TS könntest du ein -(steht für stdin) setzen. Und vor mplayer dein ffmpeg-Kommando, das seine Ausgabe auf stdout umleitet. Also so etwas wie:

./yuv4mpeg_to_v4l2 < /tmp/pipe &
ffmpeg -someOptions ... -o - | mplayer - -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe

Habe das Letzte nicht getestet, weil Sie nicht gesagt haben, wie Ihr ffmpeg-Befehl aussieht.

Antwort3

Welche Distribution verwenden Sie? Ich hatte Erfolg mit WebCamStudio unter Arch in Kombination mit dem webbasierten „Studio“ Livestream. Es ist allerdings schon eine Weile her, seit ich es verwendet habe.

http://www.ws4gl.org/

Was genau versuchst du zu tun? Mit x11grab kompiliertes ffmpeg kann den Desktop aufzeichnen. Ich hatte begrenzten Erfolg damit, das auf Ustream zu übertragen, aber es ist schon eine Weile her und ich glaube, das, was ich gemacht habe, funktioniert nicht mehr.

Wenn Sie nur eine Datei und nicht Ihren Desktop streamen möchten (ich denke, wenn Sie „ein Fenster“ sagen, meinen Sie „VLC“), kann ich Ihnen zeigen, wie Sie das mit Livestream (vielleicht Ustream) zum Laufen bringen. Ich versuche gerade durch Experimente herauszufinden, wie das geht. Es ist nicht fantastisch, aber es funktioniert mit Livestream.

Justin.tv verfügt auch über Skripte, die von VLC zu ihrem Dienst streamen können.

http://apiwiki.justin.tv/mediawiki/index.php/Linux_Broadcasting_API

Antwort4

Erstens macht appear.in wahrscheinlich ohne Probleme das, was Sie möchten (ich bin nicht angeschlossen):http://appear.in/

Zweitens können Sie mit OBS, das vor Kurzem Linux-Unterstützung hinzugefügt hat(!), zu Twitch oder anderen Diensten streamen:https://obsproject.com/

OBS löst außerdem das viel schwierigere Problem des Multiplexens von Systemsound und Audioeingabe während der Bildschirmaufnahme unter Ubuntu ( universesoweit ich weiß, wurde es im Repo nicht gelöst).

Ich habe keine tollen Unix-Lösungen. Aber die haben in der Praxis für mich funktioniert.

verwandte Informationen