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, что может немного уменьшить сетевой трафик. Вам нужно поиграть с опциями, чтобы найти подходящую комбинацию.
Честно говоря, сами камеры иногда ненадежны, или просто реализованы differently - как будто неожиданное закрытие сокета - это не так уж и необычно.
Иногда клиент openRTSP не ловит эти глюки. Поэтому я решил закодировать контроллер на Python с помощью модуля ‘подпроцессов’ для вызова и мониторинга stdout каждого экземпляра клиента openRTSP, а также проверить, что файлы продолжают расти в размерах.
Похоже, что это побочный продукт низкого класса CCTV-индустрии, играющий быстро и свободно со стандартами, RTSP и ONVIF являются двумя наиболее часто используемых злоупотреблений.
К счастью, вы обычно можете обойти эти проблемы. Если ваши IP-камеры и контроллер не предназначены для хорошей совместной игры, используйте ONVIF только для однократного обнаружения и управления настройками.
Я использую openRTSP на нескольких Raspberry Pi B+ под управлением Raspbian. Каждый поток 1280x1024 занимает около 8-10% времени процессора, и я успешно запустил до восьми камер на RPi, записывая файлы на NAS-накопитель. Другой RPi обрабатывает завершенные файлы с помощью ffmpeg, ищет движение и производит индекс PNG этих кадров, чтобы помочь в обнаружении взломов.
Есть приложение с открытым исходным кодом под названием ZoneMinder, которое делает эту последнюю часть, но я не смог заставить его работать с моими камерами. Поддержка ONVIF является новой и зарождающейся в ZM, и, похоже, не очень хорошо справляется с пятнистыми потоками RTSP, создаваемыми моим зверинцем IP-камер менее чем за $100.