Verwenden des Desktops als gefälschte Webcam unter Linux

46787
bkconrad

Ich möchte einen Live-Stream meines Linux-Desktops (ein Fenster darauf) mit einer kostenlosen Streaming-Site erstellen und das aufgenommene Video als gefälschte Webcam verwenden. Es gibt viele Werkzeuge dafür unter Windows. Mit ffmpeg kann ich Eingaben in einem bestimmten Fenster erfassen, aber ich kann keinen Weg finden, das Video auf einem gefälschten Webcam-Gerät auszugeben, das von Flash verwendet werden kann.

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

39
Es war alles hunky-dory, bis Sie sagten "gefälschtes Gerät im Webcam-Stil, das von Flash verwendet werden kann". Ignacio Vazquez-Abrams vor 12 Jahren 0
Ich bin mir nicht sicher was du meinst? Mit "Webcam-Gerät" meinte ich so etwas wie eine gefälschte / dev / videoN-Gerätedatei oder ähnliches. Ich gehe davon aus, dass das aufgenommene Video mit Flash verwendet werden kann. bkconrad vor 12 Jahren 0
Genau. Das ist schwierig. Ignacio Vazquez-Abrams vor 12 Jahren 0

4 Antworten auf die Frage

43
Víctor Fernández

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

modprobe v4l2loopback 

Dann müssen Sie den Videostrom mit einem Programm wie ffmpeg an das Gerät / dev / video0 senden. Um den Desktop aufzunehmen und mit ffmpeg an / dev / video0 weiterzuleiten, können Sie die folgende Befehlszeile verwenden:

ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0 

Ändern Sie den Wert von -r von 15 in etwas anderes, wenn Sie eine andere Bildrate wünschen. Die Auflösung wird im Parameter -s ausgewä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 der horizontale und der vertikale Versatz sind.

Ihr Bild kann gespiegelt sein, ich meine, ** horizontale Spiegelung ** abhängig von Ihrem ffmpeg ** Build **. Verwenden Sie den Videofilter ** - vf hflip **. Wenn Sie bereits eine VF verwenden, setzen Sie sie in Anführungszeichen und trennen diese durch Kommas, beispielsweise -vf 'hflip, scale = 640: 360'. Marcelo Teixeira Ruggeri vor 8 Jahren 5
Obwohl die Verwendung von Arbeitsspeicher und CPU sehr klein zu sein scheint, versetzt diese Methode meinen PC in den Slug-Modus. Irgendeine Idee warum? nicooga vor 8 Jahren 0
Ich bekomme ein paar Fehler mit diesem `[x11grab @ 0x24013c0] Stream # 0: nicht genügend Frames, um die Rate zu schätzen; Erwägen Sie die Erhöhung von probesize`, `[v4l2 @ 0x2409520] ioctl (VIDIOC_G_FMT): Ungültiges Argument`, und` Header für Ausgabedatei # 0 konnte nicht geschrieben werden (falsche Codec-Parameter?): Ungültiges Argument ` Lotus vor 7 Jahren 2
Ich bekomme exakt die gleichen Ausgaben wie @Lotus mit ffmpeg 3.1.4. Gibt es spezielle Codecs oder Pakete neben v4l2loopback und ffmpeg? cguenther vor 7 Jahren 0
@ Lotus Ich konnte das Problem umgehen, wenn ich ein anderes / dev / video-Gerät verwende. Sie sollten sicherstellen, dass Sie das Videogerät v4l2 verwenden (in meinem Fall das / dev / video1). Der Versatz kann durch ein bereits vorhandenes reales Webcamgerät verursacht werden, das / dev / video0 verwendet. cguenther vor 7 Jahren 1
@cguenther Also jetzt geht es los und ich habe keinen Fehler. Vielen Dank! Es gibt mir jedoch weder ein Gerät, das ich in Google Chrome auswählen kann, noch eine Ausgabedatei. Lotus vor 7 Jahren 0
@Lotus Stellen Sie sicher, dass der Befehl modprobe (als root oder mit sudo) ausgeführt wurde, bevor Sie Ihren Chrome-Browser starten. Prüfen Sie mit, ob das Modul korrekt geladen ist lsmod | grep v4l2loopback. cguenther vor 7 Jahren 1
Ein weiterer praktischer Tipp: Wenn Sie bei einer App stecken bleiben, bei der Sie keine Videoquellen wechseln können, brauchen Sie nur sudo mv / dev / video0 / dev / video10 && sudo mv / dev / video1 / dev / video0, wo `/ dev / video1` ist Ihr v412-Loopback. Jonny Asmar vor 6 Jahren 0
6
erik

Verwenden Sie v4l2loopback mit mplayer .

  1. Lade es herunter,
  2. kompiliere es ( makeund su -c 'make install'),
  3. Laden Sie das Modul mit su -c 'modprobe v4l2loopback',
  4. Dann ändern Sie eine Zeile in der Datei examples/yuv4mpeg_to_v4l2.cdes v4l2loopback-Quellordners ab

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420; 

    zu

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YVU420; 
  5. und mache makein diesem Ordner.

  6. Dann führen Sie es aus dem examplesVerzeichnis wie folgt 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 

    wo Sie durch movie.mp4den Namen Ihrer Videodatei ersetzen . Und ersetzen Sie es /dev/video0mit Ihrem Loopback-Gerät.

MPlayer ist in der Lage, alle Webstreams, alle Arten von Videodateien abzuspielen, sogar von stdin! Ich habe es gerade mit einer Datei von http://www.tagesschau.de getestet, einer deutschen 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 des $ TS könnten Sie ein -(was für stdin steht) setzen. Und vor mplayer leitet Ihr ffmpeg-Befehl seine Ausgabe nach stdout um. So etwas wie:

./yuv4mpeg_to_v4l2 < /tmp/pipe & fmpeg -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.

Bitte helfen Sie: `./yuv4mpeg_to_v4l2 </ dev / video0 &` führt zu `./yuv4mpeg_to_v4l2:: fehlender YUV4MPEG2-Header`. Wie kann man `/ tmp / pipe` durch` / dev / video0` ersetzen? user123456 vor 7 Jahren 0
3
Mike Mitchell

Welche Distro benutzt du? Ich hatte Erfolg mit WebCamStudio unter Arch, kombiniert mit dem Livestream-webbasierten "Studio". Es ist jedoch eine Weile her, seit ich es benutzt habe.

http://www.ws4gl.org/

Was willst du genau machen? Mit x11grab kompiliertes ffmpeg kann den Desktop aufzeichnen. Ich hatte nur begrenzten Erfolg, um Ustream voranzutreiben, aber wieder ist es eine Weile her und ich denke, dass das, was ich tat, nicht mehr funktionieren wird.

Wenn Sie nur eine Datei anstatt Ihres Desktops streamen möchten (ich denke, wenn Sie sagen: "Ein Fenster", Sie meinen "VLC"), kann ich Sie in die richtige Richtung weisen, damit das mit Livestream funktioniert (vielleicht Ustream). Ich finde ungeschickt heraus, wie ich dies durch Experimentieren erreichen kann. Es ist nicht fantastisch, aber es funktioniert mit Livestream.

Justin.tv verfügt über Skripts, die auch von VLC an ihren Dienst übertragen werden können.

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

Oh wow das ist sehr interessant. Ich versuche, das Live-Gameplay einiger Spiele zu streamen. Ich weiß bereits, wie man von ffmpeg eine Videodatei aufnimmt. Ich frage mich, ob ich dieselbe Datei in vlc öffnen und sie irgendwie streamen kann, während sie geschrieben wird. Danke für die Information. bkconrad vor 12 Jahren 0
Die Website http://www.ws4gl.org/ scheint sehr veraltet zu sein, und alle Links verweisen auf die Wayback Machine. Ich nehme an, dass die neueste Version unter https://sourceforge.net/projects/webcamstudio/ verfügbar ist. Denilson Sá Maia vor 8 Jahren 0
"WEBCAMSTUDIO IST NICHT MEHR WARTEND": / Raphael vor 7 Jahren 0
2
bkconrad

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

Zweitens können Sie mit OBS einen Stream an Twitch oder andere Dienste streamen, der kürzlich Linux-Unterstützung (!) Hinzugefügt hat: https://obsproject.com/

OBS löst auch das viel schwierigere Problem des Muxings von System-Sound und Audio-Input während der Bildschirmaufnahme auf Ubuntu (nicht gelöst durch irgendetwas im universeRepo, das ich bisher gefunden habe).

Ich habe keine fantastischen Unix-Lösungen. Aber die haben für mich in der realen Welt funktioniert.