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, используя модуль 'subprocesses', чтобы вызывать и контролировать стандартный вывод каждого экземпляра клиента 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 долларов.