IP-камери різної якості, деякі з них поводяться помилково. Для вирішення потоків RTSP потрібна доза відмовостійкості.
Проект Live555 забезпечує відносно стійку до відмов клієнтську реалізацію RTSP, openRTSP, для виведення аудіо / відео потоків RTSP через CLI: http://www.live555.com/openRTSP/
Наприклад, для збереження RTSP аудіо / відео камери у файли у форматі QuickTime (також доступні AVI та MP4), один файл кожні 15 хвилин:
$ 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
Ці параметри означають:
-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
Видалення параметра -t натомість призводить до встановлення замовчуванням openRTSP для UDP, що може трохи зменшити мережевий трафік. Вам потрібно буде пограти з варіантами, щоб знайти комбінацію, яка вам підходить.
Відверто кажучи, самі камери іноді ненадійні або просто реалізовані по- іншому - подібне несподіване закриття гнізда не все так незвично.
Іноді клієнт openRTSP не вловлює цих глюків. Тому я вирішив кодувати контролер у Python за допомогою модуля "підпроцеси", щоб викликати та контролювати stdout кожного екземпляра клієнта openRTSP, а також перевірити, чи продовжують збільшуватися розміри файлів.
Це, мабуть, є побічним продуктом індустрії відеоспостереження, що грає швидко та вільно, зі стандартами, а RTSP та ONVIF є двома найбільш часто зловживаними.
На щастя, зазвичай можна обійти ці проблеми. Якщо ваші IP камери та контролер не розроблені для того, щоб грати добре разом, використовуйте ONVIF лише для відкриття та керування налаштуваннями.
Я використовую openRTSP на кількох Raspberry Pi B +, що працює на Raspbian. Кожен потік 1280x1024 займає близько 8-10% часу процесора, і я успішно запускаю до восьми камер на RPI, записуючи файли у сховище NAS. Інший RPi обробляє завершені файли за допомогою ffmpeg, шукаючи рух та створюючи індекси PNG з цих кадрів, щоб допомогти у виявленні проривів.
Є зусилля з відкритим кодом під назвою ZoneMinder, що робить цю останню частину, але мені не вдалося змусити його працювати з моїми камерами. Підтримка ONVIF є новою та зародженою в ZM, і вона, здається, не дуже добре поєднується з плямистими потоками RTSP, що виробляються моїм менеджером із IP-камер менше ніж 100 доларів.