У меня есть несколько IP-камер, которые выводят поток RTSP (h264 mpeg4).
Локальное обращение к URL через VLC: rtsp: //192.168.0.21: 554 / mpeg4
Я могу транслировать камеру и записывать на диск (на моем рабочем столе). Однако я хотел бы сохранить эти файлы на моем NAS (FreeNAS). Я искал способы перехватить поток RTSP и выгрузить их на диск, но я ничего не могу найти.
Можно ли перехватить поток в FreeBSD или Linux (RaspberryPi) и вывести потоковое содержимое на диск, локальный для Linux или FreeBSD, предпочтительно каждые 30 минут?
РЕДАКТИРОВАТЬ: NAS без головы (HP N55L или что-то), и RaspberryPi также без головы.
Я уже посмотрел в ZoneMinder, но нужно что-то маленькое. Я надеялся использовать Motion для обнаружения движения в потоке, но это произойдет позже.
Ответы:
IP-камеры имеют различное качество, некоторые из них ведут себя хаотично по моему опыту. Работа с потоками RTSP требует некоторой отказоустойчивости.
Проект Live555 предоставляет относительно отказоустойчивую реализацию клиента RTSP, openRTSP, для передачи потоков аудио / видео RTSP через CLI: http://www.live555.com/openRTSP/
Например, чтобы сохранить аудио / видео RTSP камеры в файлы в формате QuickTime (также доступны AVI и MP4), один файл каждые 15 минут:
Эти параметры означают:
Удаление опции -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 долларов.
источник
Я просто решил добавить свои два цента и дополнить ответ BjornR.
Вместо того, чтобы запускать задачу cron для периодического уничтожения процесса VLC, можно указать VLC запускаться в течение определенного времени и затем закрываться.
Это команда, которую я запускаю на своем ящике:
Это запускает VLC в течение указанного промежутка времени и затем завершает работу. Параметр vlc: // quit является обязательным, поскольку VLC прекращает запись и остается открытым. Эта команда должна быть помещена в цикл.
Единственная проблема, которую я обнаружил, состоит в том, что она может пропустить несколько секунд каждый раз, когда начинается новая запись.
источник
Если я правильно понимаю ваш вопрос, почему бы вам не попробовать следующую команду в системе Linux (RPi):
Это должно сохранить видео порциями по 300 секунд. (Обратите внимание, что длина клипа будет зависеть от частоты кадров на входе и выходе)
источник
VLC выглядит как идеальный кандидат для обработки вашего потока. Основные методы захвата потока описаны на веб-сайте Videolan. Я успешно записал выходные данные своей сетевой камеры D-Link DCS-5222 с помощью следующей команды:
В вашем случае это может сработать, чтобы сохранить вывод локально:
Я бы предложил запустить скрипт, который завершает этот процесс vlc, и запускать новый экземпляр каждые 30 минут, так как я не уверен, что VLC способен это сделать.
Что касается хранения на NAS, просто подключите его к локальной файловой системе.
источник