Stellen Sie die Ausgabebildrate eines v4l2-Geräts ein

Stellen Sie die Ausgabebildrate eines v4l2-Geräts ein

Ich verwende v4l2loopbackv0.12.5 und wf-recorderzeichne 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.1unddiese Gabelda es die Option zum Einstellen der Framerate hinzufügt. Ich erhalte jedoch die gleiche Ausgabe.

Wenn ich wf-recordermit diesem Befehl beginne:

wf-recorder \
        -x yuv420p \
        -g "$x,$y ${width}x$height" \
        --muxer=v4l2 \
        --codec=rawvideo \
        --file="$device"

/sys/devices/virtual/video4linux/video0/formatsieht 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, ffplaysehe 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 -rFlag auf gesetzt starte 6:

wf-recorder \
        -x yuv420p \
        -r 6 \
        -g "$x,$y ${width}x$height" \
        --muxer=v4l2 \
        --codec=rawvideo \
        --file="$device"

wf-recorderBerichte zeigen Framerate: 6jedoch immer noch ./sys/devices/virtual/video4linux/video0/formatYU12:2560x1440@30

Dies lässt mich annehmen, dass das Problem nicht bei liegt wf-recorderoder 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/1000aber 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 v4l2loopbackKernelmodul 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/video6bestä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-ctlenthä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]
...

verwandte Informationen