
Ich verwende v4l2loopback
v0.12.5 und wf-recorder
zeichne meinen Bildschirm auf Wayland auf. Ich möchte die Bildrate des Videostreams reduzieren, wie er von meinem Browser gelesen wird. Derzeit kann ich nichts anderes als 60 fps erreichen.
Ich habe die Version wf-recorder verwendet 0.2.1
unddiese Gabelda es die Option zum Einstellen der Framerate hinzufügt. Ich erhalte jedoch die gleiche Ausgabe.
Wenn ich wf-recorder
mit diesem Befehl beginne:
wf-recorder \
-x yuv420p \
-g "$x,$y ${width}x$height" \
--muxer=v4l2 \
--codec=rawvideo \
--file="$device"
/sys/devices/virtual/video4linux/video0/format
sieht aus wie das:
YU12:2560x1440@30
Die Befehlsausgabe meldet jedoch, dass die Bildrate 60 und nicht @30 beträgt:
selected region 0 0 2560 1440
Framerate: 60
Choosing pixel format yuv420p
Output #0, video4linux2,v4l2, to '/dev/video0':
Stream #0:0: Unknown: none (rawvideo)
Wenn ich das Gerät mit öffne, ffplay
sehe ich, dass es 30 fps meldet:
Input #0, video4linux2,v4l2, from '/dev/video0':B sq= 0B f=0/0
Duration: N/A, start: 1102.869115, bitrate: 1327104 kb/s
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 2560x1440, 1327104 kb/s, 30 fps
Verwenden vonwebcamtests.comMir werden ~60fps gemeldet.
Wenn ich stattdessen wf-recorder mit dem -r
Flag auf gesetzt starte 6
:
wf-recorder \
-x yuv420p \
-r 6 \
-g "$x,$y ${width}x$height" \
--muxer=v4l2 \
--codec=rawvideo \
--file="$device"
wf-recorder
Berichte zeigen Framerate: 6
jedoch immer noch ./sys/devices/virtual/video4linux/video0/format
YU12:2560x1440@30
Dies lässt mich annehmen, dass das Problem nicht bei liegt wf-recorder
oder dass ich die Bildrate eher mit diesem Tool nicht einstellen kann.
Stattdessen habe ich versucht, die Einstellungen am Gerät zu ändern. Folgendes wird ausgeführt:
echo "@6"| sudo tee /sys/devices/virtual/video4linux/video0/format
Ich sehe, dass sich das Format ändert YU12:2560x1440@6
. Bei der wahrgenommenen Bildrate sehe ich jedoch keine Änderung.
Wenn ich ausführe:
sudo v4l2-ctl -d /dev/video0 -p 6
Ich sehe, dass sich das Format ändert zu:, YU12:2560x1440@6000/1000
aber ich sehe wieder keine Änderung in der wahrgenommenen Bildrate (immer noch 60 fps in meinem Browser).
Es scheint keine Optionen zu geben, die man im v4l2loopback
Kernelmodul hierfür festlegen kann.
Mir gehen die Ideen aus – kann ich noch etwas anderes versuchen oder ist mein armer Computer dazu verdammt, für immer 100-Mbit-Videostreams zu verarbeiten? :D
Antwort1
Am Ende konnte ich dies mit einem anderen v4l-Gerät und diesem Gstreamer-Befehl tun:
gst-launch-1.0 -v v4l2src device=/dev/video0 ! videorate drop-only=true ! video/x-raw,framerate=6/1 ! v4l2sink device=/dev/video1
Antwort2
Ich konnte die Bilder pro Sekunde auf 10 begrenzen, indem ich es vor dem Start auf dem v4l2loopback-Gerät wie folgt eingestellt habe wf-recorder
.
v4l2-ctl -d /dev/video6 --set-parm 10
Das Abspielen des Streams danach ffplay /dev/video6
bestätigte die Einstellung:
Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 2560x1410, 433152 kb/s, 10 fps, 10 tbr, 1000k tbn, 1000k tbc
Die Hilfeausgabe v4l2-ctl
enthält Folgendes zu dieser Einstellung:
$ v4l2-ctl --help-all
...
-P, --get-parm display video parameters [VIDIOC_G_PARM]
-p, --set-parm <fps>
set video framerate in <fps> [VIDIOC_S_PARM]
...