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:
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:
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.
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
Starten Sie die Pipeline, um ein Video an Port 5000 zu senden
%Vor% Versuchen Sie, ein Video von /dev/video0
Beachten Sie jetzt die Obergrenzen für v4l2sink
im Debugprotokoll der ersten Pipeline.
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:
Tags und Links google-chrome gstreamer v4l2loopback