Guten Tag zusammen,
ich wollte auch mal meine Erfahrung mitteilen, die ich in den letzten tagen gesammelt habe
Mein aktuelles Setup:
Mehreren kaskadierte HDMI Switches gehen in einen gofanco Prophecy HDMI Scale Splitter (), welcher seine Arbeit seit nun mehr als einem Jahr ziemlich zuverlässig erledigt. Dieser schleift mein 4k HDR Signal bis 60 Hz (YUV420) erfolgreich am HDMI Out 1 bis zum Fernseher durch und skaliert am HDMI Out 2 das Bild auf 1080p runter, wo ein weiterer HDMI splitter das HDCP bricht, das Bild von einem HDMI->AV Converter umgewandelt und vom günstigen AV Grabber und einem Pi3 aufgenommen wird.
so weit, so viel Hardware
was mich bisschen stört ist die Tatsache, dass am äußersten Rand immer ein leichtes Flackern im sowieso schon nicht immer ruhigen analogen Signal wahrzunehmen ist. Mit bisschen rumspielen und ein paar Kompromissen habe ich auch ein sauberes Setup am laufen (nicht ganz am rand aufnehmen, bzw, das Bild entsprechend abschneiden und die Glättung optimieren), schadet aber auch nicht, wenn man immer irgendwas verbessern und bisschen rumspielen kann^^"
Ich habe mir also diesen Monat einen Raspberry Pi 4 2GB gekauft um mit einem 4k China Grabber (klick) und dem weiter oben verlinkten MYPIN grabber () zu testen.
Grabber 1 (China):
Der Grabber liefert am PC ein sehr gutes Bild ohne spürbares Delay. als günstiger grabber für jemand der bisschen kram aufnehmen will und sich nicht an 4k30Hz stört definitiv empfehlenswert, am Pi hat er mir aber zunächst gar nichts ausgegeben (mplayer, vlc, hyperion und fswebcam wollten mir kein Bild liefern). ich wollte den Pi schon für den 3D Drucker nutzen und habe octoPi aufgespielt wo ich spaßeshalber getestet habe ob ich dort ein bild bekomme (so als hätte ich eine webcam angeschlossen) und natürlich hat es dort geklappt . also v4l2-ctl --all ausgeführt, die Ausgabe gespeichert und wieder zurück auf raspbian, wo ich dann irgendwann einfach mal per befehl von YUYV auf MJPEG umgeschaltet habe.
v4l2-ctl --device=/dev/video0 --set-fmt-video=pixelformat=MJPEG
das hat dann auch so weit funktioniert, der Grabber unterstützt aber nur 1080p 60Hz als Aufnahmeformat. hier mal was v4l2-ctl --all ausspuckt (nachdem man auf MJPEG umstellt):
Driver Info:
Driver name : uvcvideo
Card type : UVC Camera (1e4e:7016)
Bus info : usb-0000:01:00.0-1
Driver version : 4.19.75
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Media Driver Info:
Driver name : uvcvideo
Model : UVC Camera (1e4e:7016)
Serial : 20000130041415
Bus info : 1
Media version : 4.19.75
Hardware revision: 0x00000100 (256)
Driver version : 4.19.75
Interface Info:
ID : 0x03000002
Type : V4L Video
Entity Info:
ID : 0x00000001 (1)
Name : UVC Camera (1e4e:7016)
Function : V4L2 I/O
Flags : default
Pad 0x01000007 : 0: Sink
Link 0x02000010: from remote pad 0x100000a of entity 'Extension 4': Data, Enabled, Immutable
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 1920/1080
Pixel Format : 'MJPG' (Motion-JPEG)
Field : None
Bytes per Line : 0
Size Image : 4147200
Colorspace : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Full Range)
Flags :
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 1920, Height 1080
Default : Left 0, Top 0, Width 1920, Height 1080
Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 1920, Height 1080, Flags:
Selection: crop_bounds, Left 0, Top 0, Width 1920, Height 1080, Flags:
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 60.000 (60/1)
Read buffers : 0
Das würde mich ja nicht stören, wenn ich nicht ungefähr 500ms Verzögerung zwischen Bild und LEDs hätte. Wenn jemand eine Idee hat die Auflösung und die Frequenz auf ein kleines Format zu forcieren, wäre das einen Versuch wert. in Kombination mit dem scale Splitter wäre das ein preislich überschaubares Setup (man spart sich dadurch immerhin den Grabber und den HDMI-> AV converter und hat ein digitales Signal mit dem man arbeiten kann
hier noch die Ausgabe von v4l2-ctl --list-formats-ext:
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
[0]: 'MJPG' (Motion-JPEG, compressed)
Size: Discrete 1920x1080
Interval: Discrete 0.017s (60.000 fps)
[1]: 'YUYV' (YUYV 4:2:2)
Size: Discrete 1920x1080
Interval: Discrete 0.017s (60.000 fps)
Grabber 2 (MYPIN):
Der Grabber unterstützt ein paar mehr Auflösungen, dafür aber kein MJPEG (braucht er scheinbar auch nicht, läuft trotzdem mit hyperion):
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
[0]: 'YUYV' (YUYV 4:2:2)
Size: Discrete 1920x1080
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 640x480
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 800x600
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1024x768
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1280x720
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1280x960
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1280x1024
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1360x768
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1400x900
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1440x900
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Size: Discrete 1920x1080
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
Interval: Discrete 0.017s (60.000 fps)
Interval: Discrete 0.033s (30.000 fps)
die v4l2-ctl --all ausgabe sieht auch ergiebiger aus:
Driver Info:
Driver name : uvcvideo
Card type : MYPIN HD Capture: MYPIN HD Capt
Bus info : usb-0000:01:00.0-1
Driver version : 4.19.75
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Media Driver Info:
Driver name : uvcvideo
Model : MYPIN HD Capture: MYPIN HD Capt
Serial :
Bus info : 1
Media version : 4.19.75
Hardware revision: 0x00000200 (512)
Driver version : 4.19.75
Interface Info:
ID : 0x03000002
Type : V4L Video
Entity Info:
ID : 0x00000001 (1)
Name : MYPIN HD Capture: MYPIN HD Capt
Function : V4L2 I/O
Flags : default
Pad 0x01000007 : 0: Sink
Link 0x02000013: from remote pad 0x100000a of entity 'Extension 4': Data, Enabled, Immutable
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 1920/1080
Pixel Format : 'YUYV' (YUYV 4:2:2)
Field : None
Bytes per Line : 3840
Size Image : 4147200
Colorspace : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization : Default (maps to Limited Range)
Flags :
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 1920, Height 1080
Default : Left 0, Top 0, Width 1920, Height 1080
Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 1920, Height 1080, Flags:
Selection: crop_bounds, Left 0, Top 0, Width 1920, Height 1080, Flags:
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 30.000 (30/1)
Read buffers : 0
brightness 0x00980900 (int) : min=0 max=255 step=1 default=128 value=128
contrast 0x00980901 (int) : min=0 max=255 step=1 default=128 value=128
saturation 0x00980902 (int) : min=0 max=255 step=1 default=128 value=128
hue 0x00980903 (int) : min=-32 max=31 step=1 default=0 value=0
Wenn ich mit den Default Werten (1080p 30Hz) hyperion starte ist das Ergebnis schon viel besser als mit dem anderen Grabber. Ich habe nur noch ca. 100ms Verzögerung zwischen Bild und LEDs, was sogar schon zufriedenstellend sein könnte. versuche ich die Auflösung runter zu stellen scheint er die Werte auch zu übernehmen (nach umstellen wieder mit v4l2-ctl --all ausgelesen), in hyperion gibt es aber gefühlt keine änderung. beende ich hyperion wieder und lese nochmal die aktuellen Einstellungen des grabbers aus, scheint er wieder mit seinen Default werten zu arbeiten. woran liegt das? muss ich noch etwas in hyperion einstellen?
mit folgendem Befehl versuche ich die Auflösung anzupassen:
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1280,height=720 -p 30
Ich hoffe das war jetzt nicht zu viel Text
Wenn ich irgendwas vergessen habe oder testen kann, bitte immer her mit den Informationen. Meine Erfahrungen mit Linux beschränken sich auf jahrelange Erfahrung mit hyperion und ambi-tv (letzteres dürfte länger her sein, als hyperion überhaupt alt ist). Ich bin also kein Linux Profi, bisschen Eigeninitiative und logisches denken dürft ihr aber von mir erwarten
EDIT: ok, die 100ms die ich beim MYPIN geschätzt habe sind in wahrheit nur ca. doppelt so viel Verzögerung wie die praktisch nicht wahrnehmbare Verzögerung vom billig AV Grabber und damit noch vernachlässigbarer als erst befürchtet (wenn man anfängt auf dinge genau drauf zu gucken, sieht man irgendwann Probleme, die gar nicht vorhanden sind^^")
EDIT2: Ich habe jetzt durch die Debug Ausgabe und dem Quellcode (V4L2Grabber.cpp) herausgefunden, dass Hyperion beim start immer die maximal mögliche Auflösung anwendet.
Nachdem ich die Auflösung im Quellcode fest auf 1280x720 eingestellt und alles neu compiliert habe, sind es jetzt gefühlt ein paar ms weniger delay.
Ich habe außerdem einen Bug gefunden. die Glättung lässt sich nicht deaktivieren. egal ob die Checkbox gesetzt oder nicht gesetzt ist wird immer entsprechend der Eingestellten Werte geglättet.