FHEM Forum

FHEM - Hardware => Server - Linux => Thema gestartet von: heicar am 23 Juni 2020, 10:48:32

Titel: ffmpeg und der rtsp stream
Beitrag von: heicar am 23 Juni 2020, 10:48:32
Moin zusammen,
ich brauche mal euer Schwarmwissen, und zwar habe ich eine IPcam Reolink die einen RTSP Stream anbietet.
Jetzt soll dieser Stream über einen externen Trigger (bei mir ein Reedkontakt) den Stream abgreifen und aufzeichnen auf der Festplatte.
Läuft auch, aber
ffmpeg zeichnet erst mit einer Verzögerung von ca. 2-3 sek den Stream auf. Die Startphase von ffmpeg ist unglaublich lang, jetzt meine Frage wer hat Tipps um ffmpeg schneller starten zu lassen (also bis ca. ne Sekunde  dann solls aber auch losgehen mit der Aufnahme)
Ich hab gefühlt das komplette INet nach Parametern durchforstet aber besser wird es nicht. Gibts noch andere Alternativen als ffmpeg zum Streamabgreifen?

Hier meine ffmpeg Ausgabe


Di 23. Jun 10:32:46 CEST 2020
Input #0, rtsp, from 'rtsp://192.168.178.210:554/h264Preview_01_sub':
  Metadata:
    title           : Session streamed by "preview"
    comment         : h264Preview_01_sub
  Duration: N/A, start: 1592901170.400063, bitrate: N/A
    Stream #0:0: Video: h264 (High), yuv420p(progressive), 640x480, 9.92 tbr, 90k tbn, 180k tbc
    Stream #0:1: Audio: aac (LC), 16000 Hz, mono, fltp
[libx264 @ 0x55c3e62485c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x55c3e62485c0] profile High, level 2.2
[libx264 @ 0x55c3e62485c0] 264 - core 148 r2748 97eaef2 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x3:0x3 me=dia subme=1 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=2 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=1 keyint=250 keyint_min=9 scenecut=40 intra_refresh=0 rc=crf mbtree=0 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 pb_ratio=1.30 aq=1:1.00
Output #0, mp4, to '/tmp/film.mp4':
  Metadata:
    title           : Session streamed by "preview"
    comment         : h264Preview_01_sub
    encoder         : Lavf57.56.101
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 640x480, q=-1--1, 9.92 fps, 15232 tbn, 9.92 tbc
    Metadata:
      encoder         : Lavc57.64.101 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1: Audio: aac (LC) ([64][0][0][0] / 0x0040), 16000 Hz, mono, fltp, 69 kb/s
    Metadata:
      encoder         : Lavc57.64.101 aac
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
frame=   50 fps= 20 q=-1.0 Lsize=     268kB time=00:00:04.98 bitrate= 439.5kbits/s dup=17 drop=0 speed=2.02x
video:237kB audio:27kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.393884%
[libx264 @ 0x55c3e62485c0] frame I:1     Avg QP:19.85  size: 52451
[libx264 @ 0x55c3e62485c0] frame P:13    Avg QP:12.57  size: 12287
[libx264 @ 0x55c3e62485c0] frame B:36    Avg QP:13.83  size:   815
[libx264 @ 0x55c3e62485c0] consecutive B-frames:  4.0%  0.0%  0.0% 96.0%
[libx264 @ 0x55c3e62485c0] mb I  I16..4:  4.2% 33.2% 62.7%
[libx264 @ 0x55c3e62485c0] mb P  I16..4:  0.1%  0.1%  0.0%  P16..4: 77.0%  0.0%  0.0%  0.0%  0.0%    skip:22.9%
[libx264 @ 0x55c3e62485c0] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8: 13.3%  0.0%  0.0%  direct:12.2%  skip:74.5%  L0:19.5% L1:79.9% BI: 0.6%
[libx264 @ 0x55c3e62485c0] 8x8 transform intra:33.2% inter:32.4%
[libx264 @ 0x55c3e62485c0] coded y,uvDC,uvAC intra: 93.3% 89.3% 61.2% inter: 13.3% 20.9% 4.0%
[libx264 @ 0x55c3e62485c0] i16 v,h,dc,p:  5%  0% 45% 50%
[libx264 @ 0x55c3e62485c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 11%  7% 16%  7%  9% 12% 19%  8% 12%
[libx264 @ 0x55c3e62485c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 12% 17% 13%  9%  9%  7% 12%  6% 15%
[libx264 @ 0x55c3e62485c0] i8c dc,h,v,p: 39% 24% 23% 14%
[libx264 @ 0x55c3e62485c0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x55c3e62485c0] kb/s:383.22
[aac @ 0x55c3e62b4900] Qavg: 65494.328

Di 23. Jun 10:32:56 CEST 2020


aufgerufen mit:

date && /usr/bin/ffmpeg -hide_banner -rtsp_transport tcp -use_wallclock_as_timestamps 1 -i rtsp://192.168.178.210:554/h264Preview_01_sub -c:v libx264 -threads 2 -vcodec 'libx264' -acodec 'aac' -t 5 -preset superfast -vsync 1 -y "/tmp/film.mp4" && date

Was kann ich verbessern zur Speeduptime?

Danke und Gruß Heinz
Titel: Antw:ffmpeg und der rtsp stream
Beitrag von: Wernieman am 24 Juni 2020, 07:38:20
Nur mal so als Gedanken beides noch nicht gemacht, mangels rtsp stream Quelle auch nicht ausprobierbar). Ob es schneller ist, würde ich aus dem Bauch heraus verneinen:

1. VLC
2. openrtsp

Eine schnelle Google Suche:
https://superuser.com/questions/766437/capture-rtsp-stream-from-ip-camera-and-store (https://superuser.com/questions/766437/capture-rtsp-stream-from-ip-camera-and-store)

Edit:
Grundfrage: Auf was für ein System/HW läuft Dein "Aufzeichnungssystem"?

Edit2:
openrtsp ist ebi Debian-Systemen (incl.Ubuntu) zu finden unter den livemedia-utils
Titel: Antw:ffmpeg und der rtsp stream
Beitrag von: heicar am 24 Juni 2020, 14:09:14
Hi,
vlc ist noch schlechter in der Performance - openrtsp hatte ich schon vorher getestet - gleiches Ergebnis.
Den Link hatte ich auch schon gefunden.
Das ganze läuft auf einem i3 Nuc / Debian Stretch

Ist echt schade, gefühlt im ganzen Inet ist keiner der einen Stream sofort (kleine Latenz selbstverständlich) aufnehmen möchte

Leider bieten die Reolinks keine externen Trigger an (oder http request trigger, whatever) das wäre sicher das optimalste.

Ich frag mal bei reolinks support nach.

Viele Grüße Heinz
Titel: Antw:ffmpeg und der rtsp stream
Beitrag von: MadMax-FHEM am 24 Juni 2020, 14:20:43
Bietet reolink nicht auch die Möglichkeit mit entsprechender Vorlaufszeit eine Aufnahme auch auf ftp abzulegen!?

Ich hatte ja eine reolink nur kurz zum Test, da aber die cgi-Schnittstelle echt naja ist...
...habe ich aktuell eine Foscam da.

Die kann das (angeblich, noch nicht getestet / ist aber noch geplant) und v.a. auch per Web-Aufruf (NICHT Weboberfläche) die Bewegungserkennung ein-/ausschalten, das konnte die reolink nicht (oder ich hab's nicht geschafft)...

Daher ging die reolink wieder zurück...
...weil eben deswegen eine Integration in fhem schwierig/unmöglich ist...

Zuvor habe ich mit einer Unifi Dome "rumgespielt", die habe ich auch noch, liegt aber aktuell in der Ecke...
Für die habe ich mal mit Zoneminder rumprobiert, da geht Aufnahme ja auch!?

Es gibt auch ein Modul für Zoneminder...
...gut man braucht halt noch ne Büxe wo Zoneminder drauf läuft (ich hatte noch einen PI über zum Test "über" ;)  )...

Gruß, Joachim
Titel: Antw:ffmpeg und der rtsp stream
Beitrag von: heicar am 24 Juni 2020, 14:33:47
ja reolink bietet postrecording. Ich möchte aber zwei cam gleichzeitag die Aufnahme starten lassen, mit wenig Latenz halt.
Ist halt leider so, wenn die Geräte da sind, wachsen die Anspüche....   8)
Also wenn man programmieren kann sollte es möglich sein alles einzustellen an der reolink. Gibt ja den Windows Client von Reolink. Der schickt seine Daten dann an die Kamera. Hatte mal dazu einen Link im Inet gefunden. Leider ist die api Programmierung nicht gerad mein so mein Ding.  ;)
Ich hab mal Reolink angeschrieben. Vielleicht gibt es von da einen Tip, oder ich muss mich an der Programmierung versuchen..... :P
Viele Grüße Heinz
Titel: Antw:ffmpeg und der rtsp stream
Beitrag von: MadMax-FHEM am 24 Juni 2020, 15:11:09
Ja, den Webclient habe ich auch "reverse engineered", das geht schon irgendwie...

ABER es gibt ja das Modul IPCAM und damit gehen die Post-Requests, die bei reolink nötig sind nicht (oder: ich habe es nicht geschafft).

Auf jeden Fall sind es keine "normalen" GET-Requests "gegen" eine cgi-Schnittstelle UND: es gibt nicht wirklich viel Doku...
Auch in den Foren nur "reverse engineerte" Sachen/Aufrufe...
Spärlich.

Und selbst ein Modul programmieren oder auf Basis von HTTPMOD mir was "abturnen" wollte ich nicht.
Da war zurückschicken und die Foscam anschen deutlich angenehmer...

Auch glaube ich gibt es selbst per Webclient keine Möglichkeit die Bewegungserkennung zu deaktivieren...
Außer löschen und neu anlegen, klar kann man machen...
...aber bei der Foscam sind das 2 simple Web GET-Requests: einen für einschalten und einen für ausschalten :)

Foscam ist anders, da gibt es ausführliche Dokumentation der cgi-Schnittstelle :)


Aber eine parallele Aufnahme per "Programmaufruf", hmmm, sollte aber doch mit Zoneminder gehen!?
Habe allerdings nur kurz damit "rumgespielt"...
Und werde ich wohl mit der Foscam auch nicht mehr brauchen...

Ich muss den Zoneminder oder was Vergleichbares nur wieder "rausziehen", wenn ich dann doch die Unifi wieder in Betrieb nehme(n sollte)...

Dann mal: viel Erfolg!

Gruß, Joachim
Titel: Antw:ffmpeg und der rtsp stream
Beitrag von: micky0867 am 28 Juli 2020, 15:51:36
Ich habe neuerdings 2 Reolinks mit SD Karte.
Die Aufzeichnung macht die cam selber und mein Server holt per CGI die aufnahmen, wenn bestimmte Ereignisse in fhem gemeldet wurden (Bewegungsmelder, Anwesenheit,...).

Falls du keine SD Karte hast:
Bei meinen alten cams habe ich per cron job und mittels vlc dauernd 2 Minuten schnipsel als mp4 aufgezeichnet und die, an denen ich nicht interessiert war (Keine Ereignisse in fhem) automatisch gelöscht.

Persönlich finde ich die Aufzeichnung auf SD besser, bis auf die Tatsache, dass die Bewegungserkennung bei den Reolinks nicht gut justierbar ist. Daher schaltet ich die jetzt automatisch per Anwesenheitserkennung ein und aus. Geht auch per CGI.

Welche cam hast du denn?

Edit: die Bewegungsmeldungen der Reolinks per Onvif, mail bzw FTP gefielen mir alle nicht, deshalb habe ich jetzt einen kleinen Python service laufen, der auf bestimmten Ports lauscht und bei einem Connect eine Aktion auf dem Server ausführt und dann die Verbindung für 60 Sekunden blockiert, damit nicht zuviele events kommen.
Die ports wiederum habe ich auf den cams als FTP ports angegeben ;-)
Titel: Antw:ffmpeg und der rtsp stream
Beitrag von: heicar am 17 August 2020, 09:17:49
Ich hab die 420-5mp und die 520.
Ich hab die Motion auf den Cams aktiviert, die dann per ftp auf meinem Server speichern. Läuft alles soweit ok. Wenn ich der cam sagen könnt, "Aufzeichnung starten" wäre mein Problem ja auch schon gelöst. Dann würde ich ja praktisch ontime die Aufzeichnung starten direkt per cam. Über vlc etc. hab ich halt eine gewisse Verzögerung, und der Anfang vom Event ist halt nicht mit aufgenommen....

Titel: Antw:ffmpeg und der rtsp stream
Beitrag von: delMar am 13 März 2021, 16:38:34
Hallo zusammen,

falls hier noch jemand reinliest:
die Zeitverzögerung dürfte laut Internet generell ein oft bemerkter Kritikpunkt der Reolink Kameras sein.

Da Google diesen Thread bei diversen Suchen als Ergebnis liefert, geht es mir eigentlich darum, anzumerken, dass IPCAM für die Commandos cmd1-15 jetzt POST unterstützt.
Ich verwende das zb, um im Bild-Text anzuzeigen, ob Haustür oder Garage offen ist, oder nicht (Info vom HomeMatic TFK), und auch die Außentemperatur.

Das wär dann:

attr ipcam_north cmd01 cmd=Login
attr ipcam_north cmd01data [{"cmd":"Login","action":0,"param":{"User":{"userName":"admin","password":"******"}}},{"cmd":"SetOsd","action":0,"param":{"Osd":{"channel":0,"osdChannel":{"name":"Door [HM_TFK_Frontdoor:state] Gar [HM_TFK_Garage:state] [dumTempOutside:state] C","enable":1,"pos":"Upper Left"},"osdTime":{"enable":1,"pos":"Upper Right"}}}}]


Weitere Anmerkungen zum IPCAM Modul gern immer hier Posten: https://forum.fhem.de/index.php/topic,10772.msg1138504.html#new

schöne Grüße
Martin