1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/curled-UDP-cam

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
6 лет назад
6 лет назад
6 лет назад
Loading...
README.md

Видео система на основе Интернета вещей — руководство пользователя

Концепция программной архитектуры

Учитывая, что это видео система на основе Интернета вещей, в производственной среде наверняка возникнут проблемы с нестабильностью сети и ограничением пропускной способности канала. Поэтому традиционное пробросывание портов не может адаптироваться к таким сетевым условиям.

Поэтому мы пришли к выводу, что видео, собранное устройствами сбора данных, можно обрабатывать и отправлять серверу в виде изображений, используя обработку частоты кадров. При значительных изменениях частоты кадров скорость передачи увеличивается, а при незначительных изменениях частоты кадров скорость передачи снижается. Затем на стороне сервера происходит соединение, восстановление и преобразование в поток воспроизводимого видео.

Архитектурная концепция

Устройства сбора данных: Raspberry Pi 3B+, камера Hikvision
Сервер: сервер
Язык программирования: C++

Программное обеспечение устройств сбора данных работает на Raspberry Pi, которое находится в одной локальной сети с камерой Hikvision (может быть подключено через Ethernet кабель).

Raspberry Pi получает RTSP поток от камеры Hikvision, обрабатывает его, делит на равные части и упаковывает в UDP пакеты, отправляемые на сервер.На стороне сервера принимаются пакеты, они соединяются, обрабатываются и записываются в файл в формате MP4.

Описание пользовательского уровня протокола UDP

Пользовательский уровень UDP реализован с помощью структуры данных.

Каждый раз мы используем OpenCV::Mat для хранения каждого кадра, считанного с сетевой камеры, и помещаем его в очередь для обработки в отдельном потоке. Идеально было бы передавать полную структуру Mat, но фактически socket UDP может передавать только 65535 байт char* данных за один раз.

Наша камера собирает Mat размером 1980x1080, что значительно превышает этот размер. Кроме того, передача слишком большого объема данных не соответствует требованиям к нестабильности сети в условиях производства Интернета вещей. Поэтому мы решили разделить данные типа Mat на "маленькие пакеты" одинакового размера и отправлять эти "маленькие пакеты" на сервер, где они снова объединяются в "большие пакеты".

Очевидно, нам необходимо помечать каждый "маленький пакет", чтобы мы могли различать положение этого "маленького пакета" внутри "большого пакета". Мы определили структуру данных, которая имеет следующие метки для каждого "маленького пакета":

  • Индекс пакета;
  • Размер пакета;
  • Положение пакета в "большом пакете";
  • Дата и время создания пакета;- flag: маркер начала ("header") "большого пакета" (flag = 0), середины ("body") (flag = 1) или конца ("footer") (flag = 2);
  • pack_len: общее количество "маленьких пакетов" в "большом пакете";
  • pack_id: порядковый номер "маленького пакета";
  • encode[EACH_PACK]: контейнер, содержащий реальные данные изображения.Сначала мы используем функцию cv::imencode из OpenCV для кодирования Mat и помещения её в контейнер std::vector. Каждый раз при вызове 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Видеосистема на основе интернета вещей. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники (3)

все

Недавние действия

Загружен новый тег 1.0 4 месяца назад
Создан репозиторий 4 месяца назад
Больше нет результатов для загрузки
1
https://gitlife.ru/oschina-mirror/curled-UDP-cam.git
git@gitlife.ru:oschina-mirror/curled-UDP-cam.git
oschina-mirror
curled-UDP-cam
curled-UDP-cam
master