it-swarm.com.de

Verwenden des Desktops als gefälschte Webcam unter Linux

Ich möchte einen Live-Stream von (einem Fenster auf) meinem Linux-Desktop über eine kostenlose Streaming-Site erstellen und das aufgezeichnete Video als gefälschte Webcam verwenden. Unter Windows gibt es dafür viele Tools. Mit ffmpeg kann ich Eingaben in einem bestimmten Fenster erfassen, aber ich kann keine Möglichkeit finden, das Video auf einem gefälschten Gerät im Webcam-Stil auszugeben, das von Flash verwendet werden kann.

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

46
bkconrad

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

modprobe v4l2loopback

Dann müssen Sie den Videostream mit einem Programm wie ffmpeg an das Gerät/dev/video0 senden. Um den Desktop zu erfassen und ihn 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 einen anderen Wert, 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 bzw. vertikale Versatz sind.

48

Benutze v4l2loopback mit mplayer .

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

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;
    

    zu

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YVU420;
    
  5. und make in diesem Ordner machen.

  6. Führen Sie es dann aus dem Verzeichnis examples 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
    

    hier ersetzen Sie movie.mp4 durch den Namen Ihrer Videodatei. Und ersetzen Sie /dev/video0 durch Ihr Loopback-Gerät.

MPlayer ist in der Lage, alle Arten von Webstreams und Videodateien abzuspielen, sogar von Standardinhalten! Ich habe es gerade mit einer Datei von http://www.tagesschau.de getestet, die eine deutsche Nachrichtenseite ist.

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önnen Sie auch einen - eingeben (der für stdin steht). Und vor mplayer leitet Ihr Befehl ffmpeg seine Ausgabe auf stdout um. Also so etwas wie:

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

Habe den letzten nicht getestet, weil du nicht weißt, wie dein ffmpeg-Befehl aussieht.

6
erik

Welche Distribution benutzt du? Ich hatte Erfolg mit WebCamStudio unter Arch in Kombination mit dem Livestream-basierten "Studio". Es ist allerdings eine Weile her, seit ich es benutzt habe.

http://www.ws4gl.org/

Was versuchst du genau zu tun? Mit x11grab kompiliertes ffmpeg kann den Desktop aufzeichnen. Ich hatte nur begrenzten Erfolg damit, Ustream davon zu überzeugen, aber es ist wieder eine Weile her und ich denke, dass das, was ich getan habe, nicht mehr funktioniert.

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

Justin.tv hat Skripte, die auch von VLC zu ihrem Dienst gestreamt werden können.

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

3
Mike Mitchell

Erstens macht appear.in wahrscheinlich, was Sie wollen, ohne Ärger (ich bin nicht verbunden): http://appear.in/

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

OBS löst auch das viel schwierigere Problem, den Sound und die Audioeingabe des Systems während der Bildschirmaufnahme unter Ubuntu zu muxen (nicht durch irgendetwas in dem bisher gefundenen universe-Repo gelöst).

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

2
bkconrad