Kamery IP są różnej jakości, niektóre z nich zachowują się błędnie z mojego doświadczenia. Radzenie sobie z ich strumieniami RTSP wymaga pewnej dozy tolerancji na błędy.
Projekt Live555 dostarcza względnie odporną na błędy implementację klienta RTSP, openRTSP, do pobierania strumieni RTSP audio/wideo przez CLI: http://www.live555.com/openRTSP/
Na przykład, aby zapisać strumień RTSP audio/wideo z kamery do plików w formacie QuickTime (AVI i MP4 również dostępne), jeden plik co 15 minut:
$ openRTSP -D 1 -c -B 10000000 -b 10000000 -q -Q -F cam_eight -d 28800 -P 900 -t -u admin 123456 rtsp://192.168.1.108:554/11
Opcje te oznaczają:
-D 1 # Quit if no packets for 1 second or more
-c # Continuously record, after completion of -d timeframe
-B 10000000 # Input buffer of 10 MB
-b 10000000 # Output buffer 10MB (to file)
-q # Produce files in QuickTime format
-Q # Display QOS statistics
-F cam_eight # Prefix output filenames with this text
-d 28800 # Run openRTSP this many seconds
-P 900 # Start a new output file every -P seconds
-t # Request camera end stream over TCP, not UDP
-u admin 123456 # Username and password expected by camera
rtsp://192.168.1.108:554/11 # Camera's RTSP URL
Usunięcie opcji -t powoduje, że openRTSP domyślnie wybiera zamiast tego UDP, co może nieco zmniejszyć ruch w sieci. Będziesz musiał pobawić się opcjami, aby znaleźć kombinację, która Ci odpowiada.
Szczerze mówiąc, same kamery są czasami zawodne, lub po prostu zaimplementowane inaczej - np. niespodziewane zamknięcie gniazda nie jest niczym niezwykłym.
Czasami klient openRTSP nie wyłapuje tych błędów. Zdecydowałem się więc na zakodowanie kontrolera w Pythonie, używając modułu ‘subprocesów’ do wywoływania i monitorowania stdout każdej instancji klienta openRTSP, a także sprawdzania, czy pliki nadal zwiększają swój rozmiar.
Wydaje się, że jest to produkt uboczny niskiej klasy przemysłu CCTV, który bawi się szybko i luźno ze standardami, RTSP i ONVIF są dwoma najczęściej nadużywanymi.
Na szczęście, zazwyczaj można obejść te problemy. Jeśli kamery IP i kontroler nie są zaprojektowane tak, aby ładnie ze sobą współpracowały, należy używać ONVIF tylko do jednorazowego wykrywania i zarządzania ustawieniami.
Używam openRTSP na kilku Raspberry Pi B+ z systemem Raspbian. Każdy strumień 1280x1024 zajmuje około 8-10% czasu procesora i udało mi się z powodzeniem uruchomić do ośmiu kamer na RPi, zapisując pliki do pamięci NAS. Inny RPi przetwarza gotowe pliki za pomocą ffmpeg, wyszukując ruch i produkując indeksowane PNG tych klatek, aby pomóc w wykrywaniu włamań.
Istnieje program open-source o nazwie ZoneMinder, który wykonuje tę ostatnią część, ale nie udało mi się go uruchomić z moimi kamerami. Obsługa ONVIF jest nowa i dopiero się rodzi w ZM, i nie wydaje się, aby dobrze radził sobie z punktowymi strumieniami RTSP produkowanymi przez moją menażerię kamer IP za mniej niż 100$.