Меню Закрыть

Пишем IP видео регистратор c использованием FFmpeg на Java

В один прекрасный момент появилась необходимость записи проведения экзаменов в одном из учебных учреждений, с последующей выгрузкой наработанного видео материала для обработки экспертами. Ранее запись производилась на различные видео регистраторы и специализированные сервера. Так как камер было чуть больше 50, а  производить выгрузку материалов с последующим конвертированием и именованием — еще то сомнительное удовольствие, я решил немного автоматизировать данный процесс.

Для решения данной задачи будем производить запись RTSP потоков с IP-камер  с использованием следующее ПО: CentOS Linux  7, FFmpeg, MySQL и Java. Захват потока в контейнер будем производить с помощью FFmpeg -набора свободных библиотек с открытым исходным кодом, позволяющем записывать , конвертировать и передавать цифровые аудио и видеозаписи в различных форматах. В  базе MySQL  будем хранить данные о записях и имеющихся IP камерах.

Для реализации автоматизации запуска захвата видеопотока в контейнер, а так же именования и сортировки записанных файлов, мониторинга состояния потоков было решено написать небольшое приложение на Java. На данный момент используется представленная ниже версия, она имеет некоторые недостатки, но на данный момент является работоспособной и позволила довольно сильно упростить поставленную задачу.

Ниже приведен пример класса newNvr, данный класс  содержит в себе основной метод нашего приложения.  В данном классе на основе данных о имеющихся камерах мы создаем  потоки, в которых будет производиться запись RTSP потоков IP-камер и наполняем вектор  данными о созданных потоках.  Так же в данном классе  производится обработка событий потоков.

Исходный код класса newNvr.java:

 

В классе recorderThread производится работа с RTSP потоком. В данном классе мы  проверяем, есть ли каталог для записи RTSP потока в контейнер (если каталог не существует — создаем его) и формируем параметры для последующего запуска утилиты FFmpeg.

Исходный код recorderThread.java :

 

Далее приведен исходный текст класса sqlConnectionPool. В данном классе реализованы методы для работы с БД с помощью пула соединений HicaryCP.

Исходный код класса sqlConnectionPool.java:

Обработка событий реализована с помощью класса-интерфейса, код которого приведен ниже.

Интерфейс recorderThreadListener.java :