análisis de marco mjpg-streamer

El diagrama de marco del proceso mjpg-streamer es el siguiente:

Después de que se ejecuta el programa, el proceso principal abre la biblioteca de enlace dinámico de entrada y salida correspondiente de acuerdo con los canales de entrada y salida establecidos por los parámetros entrantes, y llama secuencialmente a las siguientes funciones

1. Entrada-almacén-salida (mjpg-streamer.h)

(1) estructura global

stop es el indicador de stop, cuando se establece en 1, el programa deja de ejecutarse;

db y db_update son respectivamente bloqueo de mutex y variable de condición, los dos se utilizan para la sincronización de subprocesos, cuando el canal de entrada coloca los datos en el almacén, se notifica al canal de salida para obtener los datos

El almacén corresponde al puntero buf, y el tamaño del almacén es el tamaño.

La salida corresponde a la estructura de salida (complemento de salida)

outcnt indica que hay varias formas en el canal de salida actual

(2) archivo mjpg-streamer-r63

       El archivo .so es un complemento, que puede ser un complemento de entrada (con la palabra entrada al frente) o un complemento de salida (con un conector de salida al frente). 

Al ejecutar mjpg_streamer, especifique los canales de entrada y salida a través de la línea de comando mjpg_streamer -i "input_uvc.so -f 10 -r 320 * 240" -o "output_http.so -w www"

       Dado que se utiliza una cámara USB para recopilar datos, el complemento input_uvc.so se selecciona como canal de entrada (como se muestra arriba, -i especifica qué complemento se utiliza como canal de entrada).

      Como queremos usar la visualización de la página web, elegimos el plugin de salida output_http.so como canal de salida. (Como se muestra en la figura anterior, especifique qué complemento se utiliza como canal de salida a través de la opción -o)

(3) La función principal analiza la línea de comando -i "input_uvc.so -f 10 -r 320 * 240 " para abrir la biblioteca de enlace dinámico input_uvc.so correspondiente

Abra la biblioteca de enlaces dinámicos a través de la función dlopen

(4) La función principal abre la biblioteca de enlaces dinámicos out_http.so correspondiente analizando la línea de comando -o "output_http.so -w www"

2. El trabajo realizado por el complemento de entrada y el complemento de salida

(1) Plugin de entrada 1 (archivo input_uvc.c)

estructura de entrada

(2) Complemento de entrada 2

función init

Ejecuta principalmente la función init_videoIn

Parámetros de entrada ancho ancho, alto alto, velocidad de fotogramas fps, formato de formato

El trabajo realizado por init_videoIn: ① llame a la función init_v4l2 (a través de una serie de ioctl proporcionada por V4L2 para establecer la resolución de la cámara, la velocidad de cuadros y el formato de salida de la cámara, y asigne el búfer y luego asigne el espacio de aplicación videoIn-> mem [i ]); ② Asignar un búfer temporal videoIn-> tmpbuffer para recibir datos de la cámara (la dirección del flujo de datos de la cámara es: videoIn-> mem [i] -----> videoIn-> tmpbuffer -----> globals- > buf (llamamos al almacén) ----------> canal de salida para extraer datos y enviarlos)

función de ejecución

Ejecuta principalmente la función cam_thread en los parámetros de la función thread de creación

Trabajo realizado: llame a la función uvcGrab (esta función copia un marco de datos de la copia videoIn-> mem [i] a videoIn-> tmpbuffer) para obtener un marco de datos

Determine el formato de los datos obtenidos. Si el formato de datos de entrada es formato MJPEG, cópielo directamente en el buf de la estructura global (es decir, póngalo en el almacén); si es formato YUV, convierta los datos en formato YUV a datos en formato MJPEG Copie al buf de la estructura global (es decir, póngalo en el almacén global-> buf)

función de parada

Hacer un poco de limpieza

 

(3) Complemento de salida 1

estructura de salida

 

(4) Complemento de salida 2

función init

Programación del zócalo y uso del zócalo para simular el protocolo http, así que realice una inicialización del zócalo, como el número de puerto

función de ejecución

Retire los datos del almacén, guárdelos en un búfer y luego envíe los datos a través de la función de escritura para que el teléfono móvil u otros dispositivos los reciba.

función de parada

Hacer un poco de limpieza

 

Enlace de referencia para este artículo:

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 artículos originales publicados · Me gusta 10 · Visitantes más de 10,000

Supongo que te gusta

Origin blog.csdn.net/qq_37659294/article/details/104279995
Recomendado
Clasificación