каркасный анализ mjpg-streamer

Фрейм-диаграмма процесса mjpg-streamer выглядит следующим образом:

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

1. Ввод-склад-вывод (mjpg-streamer.h)

(1) глобальная структура

stop - это флаг остановки, при значении 1 программа останавливается;

db и db_update - соответственно блокировка мьютекса и переменная условия, оба используются для синхронизации потоков, когда входной канал помещает данные в хранилище, выходной канал уведомляется о получении данных.

Склад соответствует указателю буфера, а размер склада равен размеру.

Вывод соответствует структуре вывода (плагин вывода)

outcnt указывает, что в текущем выходном канале есть несколько способов

(2) файл mjpg-streamer-r63

       Файл .so представляет собой плагин, который может быть плагином ввода (со словом ввода спереди) или плагином вывода (спереди выхода). 

При запуске mjpg_streamer укажите каналы ввода и вывода через командную строку mjpg_streamer -i "input_uvc.so -f 10 -r 320 * 240" -o "output_http.so -w www"

       Поскольку для сбора данных используется USB-камера, входной плагин input_uvc.so выбирается в качестве входного канала (как показано выше, укажите, какой плагин в качестве входного канала, через -i).

      Поскольку мы хотим использовать отображение веб-страницы, мы выбираем выходной плагин output_http.so в качестве выходного канала. (Как показано на рисунке выше, укажите, какой плагин используется в качестве выходного канала через опцию -o)

(3) Основная функция анализирует командную строку -i "input_uvc.so -f 10 -r 320 * 240 ", чтобы открыть соответствующую библиотеку динамических ссылок input_uvc.so

Откройте библиотеку динамических ссылок через функцию dlopen

(4) Основная функция открывает соответствующую динамическую библиотеку out_http.so, анализируя командную строку -o "output_http.so -w www"

2. Работа, проделанная плагином ввода и плагином вывода

(1) Плагин ввода 1 (файл input_uvc.c)

структура ввода

(2) Плагин ввода 2

функция инициализации

В основном выполняем функцию init_videoIn

Входные параметры ширина ширина, высота высота, частота кадров fps, формат

Работа, выполненная init_videoIn: ① вызов функции init_v4l2 (через серию ioctl, предоставленных V4L2, чтобы установить разрешение камеры, частоту кадров и формат вывода камеры, а также выделить буфер и затем отобразить в пространство приложения videoIn-> mem [i ]); ② Выделить временный буфер videoIn-> tmpbuffer для приема данных камеры (направление потока данных камеры: videoIn-> mem [i] -----> videoIn-> tmpbuffer -----> globals- > buf (мы называем склад) ----------> выходной канал для извлечения данных и их отправки)

запустить функцию

В основном выполняйте функцию cam_thread в параметрах функции потока создания

Проделанная работа: вызов функции uvcGrab (эта функция копирует кадр данных из copy videoIn-> mem [i] в ​​videoIn-> tmpbuffer), чтобы получить кадр данных

Определите формат полученных данных.Если формат входных данных - формат MJPEG, скопируйте его непосредственно в буфер глобальной структуры (то есть поместите его в хранилище), если это формат YUV, необходимо преобразовать данные формата YUV в данные формата MJPEG. Скопируйте в буфер глобальной структуры (то есть поместите его в глобальные склады -> буфер)

функция остановки

Сделать некоторые очистки

 

(3) Выходной плагин 1

структура вывода

 

(4) Выходной плагин 2

функция инициализации

Программирование сокетов и использование сокетов для имитации протокола http, поэтому сделайте некоторую инициализацию сокетов, например, номер порта

запустить функцию

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

функция остановки

Сделать некоторые очистки

 

Ссылка на эту статью:

https://blog.csdn.net/qingkongyeyue/article/details/52400036

https://blog.csdn.net/qingkongyeyue/article/details/52401514

https://blog.csdn.net/qingkongyeyue/article/details/52824165

Опубликовано 42 оригинальных статей · Мне нравится 10 · Посетителей 10 000+

рекомендация

отblog.csdn.net/qq_37659294/article/details/104279995
рекомендация