Ukládání split-screen čtyř RTSP H.264 streamů do jednoho souboru

Ahoj,
mam ctyri Raspberry Pi, ktere maji pripojenou kamerou a pres RTSP streamuji video:

Kód: [Vybrat]
raspivid -o - -t 0 -hf -w 960 -h 540 -fps 25 --rotation 180 -a 1028 -a "Stroj 1 (%Y-%m-%d %X)" | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554}' :demux=h264
Pak mam 5. Raspberry Pi, ktere zobrazuje na monitoru videa ze 4 predchozich RPi (+ tam mam dodelanou detekci, kdyz to spadne, aby se zacalo po 15s znova prehravat):
Kód: [Vybrat]
screen -dmS stroj1 sh -c  \"omxplayer --live --timeout 60 --win '0 0 960 540'       'rtsp://10.20.30.1:8554/' \"";
screen -dmS stroj2 sh -c  \"omxplayer --live --timeout 60 --win '960 0 1920 540'    'rtsp://10.20.30.2:8554/' \"";
screen -dmS stroj3 sh -c  \"omxplayer --live --timeout 60 --win '0 540 960 1080'    'rtsp://10.20.30.3:8554/' \"";
screen -dmS stroj3 sh -c  \"omxplayer --live --timeout 60 --win '960 540 1920 1080' 'rtsp://10.20.30.4:8554/' \"";

Vse funguje skvele.
Mam to napocitane na FullHD/4, takze kazda kamera ma rozliseni pres 1/4 FullHD (960x540).

Nyni bych ale krome zobrazovani potreboval split-screen 4 videii nahravat.
Napada me poskladat videa pres FFmpeg, ale pak bych musel enkodovat vse do h264 a na to by bylo potreba hodne vykonu.
Mam k dispozici jen 5 kusu Raspberry Pi 3B a jeden Intel NUC s Celeron J3455, ve kterem je take velky disk, na ktery chci videa ukladat.

Pri nejhorsim budu ukladat 4 samostatne streamy do samostatnych souboru, ale moc rad bych jen jedno video.

Napada nekoho, jak to ukladat bez nutnosti prekodovani?
Vlastne chci funkci, kterou meli stare analogove bezpecnostni kamerove systemy :-)
"Kdo v zájmu bezpečí obětuje část své svobody, v konečném důsledku přijde o svobodu i svou bezpečnost."


Re:Ukládání split-screen čtyř RTSP H.264 streamů do jednoho souboru
« Odpověď #1 kdy: 11. 02. 2019, 18:50:05 »
přemýšlím o tom, ale asi to bez transkódování nepůjde, teoreticky by to mohlo jít, v h264 můžeš sektory rozdělit přesně na ty 4 obrazovky a pak jen přepočítat slovníky a indexy, což zvládně i arm bez zapocení, ale nevím o žádném projektu, který by to dělal a je to dost studování, kdybys mi to zaplatil, rád bych si hrál :).

Jinak lze použít vlc mosaic https://wiki.videolan.org/Mosaic, stejně tak ffmeg tohle má sepsané v dokumentaci https://trac.ffmpeg.org/wiki/FilteringGuide#multipleinputoverlayin2x2grid

Tím mám asi po hraní...


Re:Ukládání split-screen čtyř RTSP H.264 streamů do jednoho souboru
« Odpověď #2 kdy: 11. 02. 2019, 19:23:24 »
Ja to zkousel prave pres ffmpeg a mosaic a funguje to, jen to enkodovani je problem.
Kód: [Vybrat]
nice -n 19 ffmpeg \
-i 'rtsp://10.54.6.147:8554/' -i 'rtsp://10.54.6.148:8554/' -i 'rtsp://10.54.6.149:8554/' -i 'rtsp://10.54.6.150:8554/' \
-f lavfi -i anullsrc  \
-filter_complex " \
nullsrc=size=1920x1080 [base]; \
[0:v] setpts=PTS-STARTPTS, scale=960x540 [upperleft]; \
[1:v] setpts=PTS-STARTPTS, scale=960x540 [upperright]; \
[2:v] setpts=PTS-STARTPTS, scale=960x540 [lowerleft]; \
[3:v] setpts=PTS-STARTPTS, scale=960x540 [lowerright]; \
[base][upperleft] overlay=shortest=0 [tmp1]; \
[tmp1][upperright] overlay=shortest=0:x=960 [tmp2]; \
[tmp2][lowerleft] overlay=shortest=0:y=540 [tmp3]; \
[tmp3][lowerright] overlay=shortest=0:x=960:y=540 \
" \
-c:v libx264 /home/pi/output.mkv


Neber si to osobne, ale zvladnul bys to levneji, nez pro tuto jednorazovou vec koupit novou Core i5 klidne s nvidia grafikou, ktera by to upocitala? :-)
"Kdo v zájmu bezpečí obětuje část své svobody, v konečném důsledku přijde o svobodu i svou bezpečnost."

_Jenda

  • *****
  • 1 603
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Ukládání split-screen čtyř RTSP H.264 streamů do jednoho souboru
« Odpověď #3 kdy: 11. 02. 2019, 19:51:03 »
Tak to RPi má hardwarový H.264 kodér, že. Nestačilo by tam dát -c:v h264_mmal?

Re:Ukládání split-screen čtyř RTSP H.264 streamů do jednoho souboru
« Odpověď #4 kdy: 11. 02. 2019, 20:07:29 »
myslím, že právě s tímhle bude mít i ten HW kodér problém, ale za vyzkoušení to stojí.

tuxmartin: to bychom si neplácli, pokud bych vzal jen odhadovaný čas, pod sto tis. se dostat neumím. Tohle člověk buď může dělat pro sebe nebo ve firmě, kde se to zužitkuje, jednorázová akce je drahá.


Re:Ukládání split-screen čtyř RTSP H.264 streamů do jednoho souboru
« Odpověď #5 kdy: 11. 02. 2019, 21:50:36 »
Tak to RPi má hardwarový H.264 kodér, že. Nestačilo by tam dát -c:v h264_mmal?

"Unknown encoder 'h264_mmal'"
Ale nasel jsem "-c:v h264_omx" a to funguje.

CPU se nyni flaka, ale uklada to malo fps:
Kód: [Vybrat]
frame=  545 fps=7.6 q=-0.0 size=    2672kB time=00:00:21.72 bitrate=1007.7kbits/s speed=0.301x    Moje stara core i5 v notebooku jela vsechny jadra na 100%, ale davala cca "speed=0.9x"

Jde to nejak poladit?
« Poslední změna: 11. 02. 2019, 21:55:07 od tuxmartin »
"Kdo v zájmu bezpečí obětuje část své svobody, v konečném důsledku přijde o svobodu i svou bezpečnost."

_Jenda

  • *****
  • 1 603
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Ukládání split-screen čtyř RTSP H.264 streamů do jednoho souboru
« Odpověď #6 kdy: 11. 02. 2019, 22:47:03 »
Ještě můžeš zkusit dát (softwarovému x264) -preset ultrafast a doufat (a pohledat jestli něco takového neumí i ta integrovaná věc v GPU -- přijde mi to divné, protože streamovat FullHD to snad umí, takže by ho to mělo umět realtime kódovat).

No a pak ještě můžeš řešit proč to vlastně chceš tímhle způsobem kódovat - nestačilo by jenom mít nějaký videopřehrávač, který to takto přehraje ze záznamu? (podobně jako máš ty 4 omxplayery)

Re:Ukládání split-screen čtyř RTSP H.264 streamů do jednoho souboru
« Odpověď #7 kdy: 13. 02. 2019, 09:21:18 »
CPU se nyni flaka, ale uklada to malo fps:

Nebude problem, ze tam chybi -re parametr pro cteni live streamu?

Kód: [Vybrat]
ffmpeg -re -i INPUT ....

iko

  • ***
  • 148
    • Zobrazit profil
    • E-mail
Re:Ukládání split-screen čtyř RTSP H.264 streamů do jednoho souboru
« Odpověď #8 kdy: 13. 02. 2019, 10:38:12 »
Vyuzijem vlakno, je nejaky program, co mi bude v okne ukazovat X RTSP streamov? Napr 4x do storca, alebo nad sebou zmensene, po dvojkliku sa zvecsi na celu obrazovku.

Momentalne som spachal v pytone nieco, funguje, ale pyton nepoznam, ledva som stvoril co som stvoril, ale chyba mi tam dynamicke zvecsovanie, dvojklik a podobne, obcas sa stream zasekne. Je to cez libvlc tusim.

_Jenda

  • *****
  • 1 603
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Ukládání split-screen čtyř RTSP H.264 streamů do jednoho souboru
« Odpověď #9 kdy: 13. 02. 2019, 13:33:13 »
Vyuzijem vlakno, je nejaky program, co mi bude v okne ukazovat X RTSP streamov? Napr 4x do storca, alebo nad sebou zmensene, po dvojkliku sa zvecsi na celu obrazovku.
mplayer umí napozicovat a vyrobit okno bez rámečku a na dvojklik se dá nabindovat fullscreen.

Re:Ukládání split-screen čtyř RTSP H.264 streamů do jednoho souboru
« Odpověď #10 kdy: 13. 02. 2019, 13:50:58 »
Kód: [Vybrat]
nice -n 19 ffmpeg \
-i 'rtsp://10.54.6.147:8554/' -i 'rtsp://10.54.6.148:8554/' -i 'rtsp://10.54.6.149:8554/' -i 'rtsp://10.54.6.150:8554/' \
-f lavfi -i anullsrc  \
-filter_complex " \
nullsrc=size=1920x1080 [base]; \
[0:v] setpts=PTS-STARTPTS, scale=960x540 [upperleft]; \
[1:v] setpts=PTS-STARTPTS, scale=960x540 [upperright]; \
[2:v] setpts=PTS-STARTPTS, scale=960x540 [lowerleft]; \
[3:v] setpts=PTS-STARTPTS, scale=960x540 [lowerright]; \
[base][upperleft] overlay=shortest=0 [tmp1]; \
[tmp1][upperright] overlay=shortest=0:x=960 [tmp2]; \
[tmp2][lowerleft] overlay=shortest=0:y=540 [tmp3]; \
[tmp3][lowerright] overlay=shortest=0:x=960:y=540 \
" \
-c:v libx264 /home/pi/output.mkv

Jde nejak ffmpeg presvedcit, aby kdyz se napr. restartuje nektere RPi a nektery ze streamu prestane byt dosupny, aby neskoncil nahravani, ale pokracovat dal? A to same, kdyz pri zacatku nahravani nepujde nektery ze streamu, aby to periodicky zkousel znova a jakmile nabehne, aby ho zacal pridavat do vystupu.
"Kdo v zájmu bezpečí obětuje část své svobody, v konečném důsledku přijde o svobodu i svou bezpečnost."

iko

  • ***
  • 148
    • Zobrazit profil
    • E-mail
Re:Ukládání split-screen čtyř RTSP H.264 streamů do jednoho souboru
« Odpověď #11 kdy: 13. 02. 2019, 13:53:22 »
Vyuzijem vlakno, je nejaky program, co mi bude v okne ukazovat X RTSP streamov? Napr 4x do storca, alebo nad sebou zmensene, po dvojkliku sa zvecsi na celu obrazovku.
mplayer umí napozicovat a vyrobit okno bez rámečku a na dvojklik se dá nabindovat fullscreen.

Ale potrebujem vsetky videa v ramci jedneho okna. Napravo sledujem kamery a zvysok monitora je normalne na pracu. Musim mat moznost s oknom normalne hybat / minimalizovat...