Nagrywanie streamu z kamery sieciowej na Raspberry PI

Zadanie typowo weekendowe, mam kamerkę internetową i streaming działa całkiem zacnie, ale przydałoby się dla bezpieczeństwa coś tam nagrać. Kamerka to niejaki ZXTECH, ale sposób powinien być dosyć uniwersalny. Na malinie zainstalowany jest syst em OSMC (pochodna Raspbiana). Kamerka udostępnia protokół RTSP (ang. Real Time Streaming Protocol)  na porcie 554. Testowałem kilka rozwiązań do zapisania streamu do pliku, niestety najpopularniejsze narzędzie avconv nie współpracuje za dobrze z protokołem RTSP i kodowaniem H264. Programu openRTSP już nie udało mi się odnaleźć w odmętach internetów.

Zwykle strumieniowanie możemy sprawdzić za pomocą bardzo popularnego narzędzia jakim jest VLC, wystarczy wpisać adres, login i hasło i voilà, wszystko śmiga. Skoro tak, to czy nie dałoby się wykorzystać tego narzędzia do zapisania streamu? Czas się przekonać! Instalujemy VLC na malinie:

sudo apt-get install vlc

Następnie czas na research jak wykorzystać VLC do nagrania strumienia do pliku, po kilku godzinach udało mi się ulepić coś takiego:

cvlc -vvv  rtsp://LOGIN:PASSWORD@CAMERA_IP/1 --sout=file/ts:"FILENAME.mpg" --run-time=60 --stop-time=60 vlc://quit

Polecenie cvlc umożliwia uruchomienie VLC bez interfejsu, parametr -vvv umożliwia na poczatku zdiagnozowanie wszystkich logów i weryfikację czy nie mamy jakiś błędów. Nastepnie łączymy sie z kamerą, używamy protokołu RTSP, podajmy login i hasło, potem po @ adres do kamery. Na końcu linku znajduje się tajemnicza 1 – otóż w przypadku mojej kamery określa to z którego streamu będziemy chcieli uzyskać obraz. Domyślnie jest to najlepsza  jakość – FullHD, potem 1 lub 2 zmniejsza jakość co skutkuje mniejszą wielkością zapisanego pliku. W –sout podajemy nazwę pliku, parametry –run-time oraz –stop-time określają ile czasu ma trwać nagranie i co ma się stać gdy ten czas minie – jeśli chcemy wyłączyć vlc wystarczy użyć vlc://quit. Powyższy skrypt umożliwi zapisanie strumienia w czasie 60 sekund do pliku o nazwie FILENAME.mpg.

Ok czas na utworzenie skryptu, którego możnaby podpiąc pod cron-a:

#!/bin/bash

find /home/osmc/share -type -f mtime +3 - exec rm {} \;

cvlc rtsp://LOGIN:PASSWORD@CAMERA_IP/1 --sout=file/ts:"/home/osmc/share/record.backup.$(date +%F_%R).mpg" --run-time=39900 --stop-time=39900 vlc://quit

Przyjąlem, że usuwam nagrania starsze niż 3 dni, długość 1 nagrania to 12 godzin. W nazwie pliku pojawi się również data, żeby mozna było szybko znaleźć materiał. W przypadku średniej jakości video w moim przypadku plik 12 godzinny będzie ważył ~5GB.

Taki skrypt ląduje w cronie i co 12 godzin mamy nowy plik z nagraniem, tyle w teorii zobaczymy jak się to sprawdzi w praktyce 🙂

Gdyby ktoś potrzebował komendy do crona:

0 */12 * * * /home/osmc/camera-record.sh >/dev/null 2>&1

Dodatkowo ustawiłem folder z nagraniami  pomocą SAMBA. To jeden z najtańszych sposobów na nagrania ze swojej kamery – jeśli macie już malinę, jest to na prawdę proste i przyjemne 😉

 

 

 

ZOSTAW ODPOWIEDŹ

Please enter your comment!
Please enter your name here

Loading Facebook Comments ...