Учитывая, что это видео система на основе Интернета вещей, в производственной среде наверняка возникнут проблемы с нестабильностью сети и ограничением пропускной способности канала. Поэтому традиционное пробросывание портов не может адаптироваться к таким сетевым условиям.
Поэтому мы пришли к выводу, что видео, собранное устройствами сбора данных, можно обрабатывать и отправлять серверу в виде изображений, используя обработку частоты кадров. При значительных изменениях частоты кадров скорость передачи увеличивается, а при незначительных изменениях частоты кадров скорость передачи снижается. Затем на стороне сервера происходит соединение, восстановление и преобразование в поток воспроизводимого видео.
Программное обеспечение устройств сбора данных работает на Raspberry Pi, которое находится в одной локальной сети с камерой Hikvision (может быть подключено через Ethernet кабель).
Raspberry Pi получает RTSP поток от камеры Hikvision, обрабатывает его, делит на равные части и упаковывает в UDP пакеты, отправляемые на сервер.На стороне сервера принимаются пакеты, они соединяются, обрабатываются и записываются в файл в формате MP4.
Пользовательский уровень UDP реализован с помощью структуры данных.
Каждый раз мы используем OpenCV::Mat для хранения каждого кадра, считанного с сетевой камеры, и помещаем его в очередь для обработки в отдельном потоке. Идеально было бы передавать полную структуру Mat, но фактически socket UDP может передавать только 65535 байт char* данных за один раз.
Наша камера собирает Mat размером 1980x1080, что значительно превышает этот размер. Кроме того, передача слишком большого объема данных не соответствует требованиям к нестабильности сети в условиях производства Интернета вещей. Поэтому мы решили разделить данные типа Mat на "маленькие пакеты" одинакового размера и отправлять эти "маленькие пакеты" на сервер, где они снова объединяются в "большие пакеты".
Очевидно, нам необходимо помечать каждый "маленький пакет", чтобы мы могли различать положение этого "маленького пакета" внутри "большого пакета". Мы определили структуру данных, которая имеет следующие метки для каждого "маленького пакета":
memcpy
мы копируем данные размером EACH_PACK
от адреса buf_all[0]
в наш буфер (за исключением последнего вызова, который может быть меньше EACH_PACK
).OpenCV
Установка:
При настройке сети выполните:
sudo ./conf.sh для автоматической настройки окружения
make для автоматического компиляционного процесса
Выполненные скомпилированные файлы находятся в папке build
client — это клиентское приложение
server — это серверное приложение
Использование: Для клиента: chmod 777 clnstart.sh ./clnstart.sh
Для сервера: chmod 777 sevstart.sh ./sevstart.sh
Введите необходимые параметры согласно требованиям
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )