GStreamer + V4L2loopback als Chrome kompatible Webcam

9

Ich versuche, eine virtuelle Kamera in Chrome mit v4l2loopback zu erstellen, wobei das eingehende Video H264 über RTP ist.

Ich habe Erfolg damit, ein GStreamer-Testvideo in Chrome mit MediaStreamTrack.getSources erkannt zu bekommen:

%Vor%

Dies funktioniert gut, Chrome zeigt die Videotestquelle an.

Wenn ich jedoch eine eingehende h264 / RTP-Quelle verwende, wird das Gerät nicht in MediaStreamTrack.getSources angezeigt. Zum Beispiel:

%Vor%

Was ist der Grund dafür? Was wäre die Lösung?

Ich hatte gedacht, dass dies vielleicht mit den Videoformaten zu tun hat und vielleicht die richtigen Caps, die über v4l2loopback gesetzt werden müssen.

    
Ross 16.03.2014, 16:03
quelle

1 Antwort

3

Das sieht wie ein Fehler in gstreamer oder v4l2loopback aus. Es hängt irgendwie damit zusammen, wie die variable Bildrate gehandhabt wird.

Ich habe es geschafft, es auf diese Weise zu reproduzieren:

Starten Sie die Pipelineübertragung des Videos vom Netzwerk zu /dev/video0

%Vor%

Starten Sie die Pipeline, um ein Video an Port 5000 zu senden

%Vor%

Versuchen Sie, ein Video von /dev/video0

zu erhalten %Vor%

Beachten Sie jetzt die Obergrenzen für v4l2sink im Debugprotokoll der ersten Pipeline.

%Vor%

Es erwähnt, dass framerate=(fraction)0/1 . In den Worten von gstreamer bedeutet dies, dass die Bildrate variabel ist. Laut dem Quellcode von v4l2sink scheint es, dass er dieselbe Bildrate an v4l2loopback -Kernelmodul liefert, aber v4l2loopback versteht keine Bildrate von Null.
(Dies ist nur Hypothese, muss immer noch überprüfen, ob das wirklich passiert.)

Um diesen Fehler zu umgehen, können Sie die Bildrate korrigieren. Fügen Sie einfach videorate element zur ersten Pipeline hinzu:

%Vor%     
max taldykin 26.03.2014, 10:55
quelle