análise de estrutura mjpg-streamer

O diagrama do quadro do processo mjpg-streamer é o seguinte:

Após a execução do programa, o processo principal abre a biblioteca de vínculo dinâmico de entrada e saída correspondente, de acordo com os canais de entrada e saída definidos pelos parâmetros recebidos, e chama sequencialmente as seguintes funções

1. Entrada-armazém-saída (mjpg-streamer.h)

(1) estrutura global

stop é o sinalizador de parada, quando definido como 1, o programa para de executar;

db e db_update são respectivamente bloqueio mutex e variável de condição, os dois são usados ​​para sincronização de encadeamento, quando o canal de entrada coloca os dados no armazém, o canal de saída é notificado para buscar os dados

O armazém corresponde ao ponteiro do buf e o tamanho do armazém é tamanho.

A saída corresponde à estrutura de saída (plug-in de saída)

outcnt indica que existem várias maneiras no canal de saída atual

(2) arquivo mjpg-streamer-r63

       O arquivo .so é um plug-in, que pode ser um plug-in de entrada (com a palavra input na frente) ou um plug-in de saída (com um plug de saída na frente). 

Ao executar mjpg_streamer, especifique os canais de entrada e saída através da linha de comando mjpg_streamer -i "input_uvc.so -f 10 -r 320 * 240" -o "output_http.so -w www"

       Como uma câmera USB é usada para coletar dados, o plug-in de entrada input_uvc.so é selecionado como o canal de entrada (como mostrado acima, -i especifica qual plug-in é usado como canal de entrada).

      Como queremos usar a exibição da página da web, escolhemos o plug-in output_http.so como canal de saída. (Como mostrado na figura acima, especifique qual plug-in é usado como canal de saída através da opção -o)

(3) A função principal analisa a linha de comando -i "input_uvc.so -f 10 -r 320 * 240 " para abrir a biblioteca de links dinâmicos correspondente input_uvc.so

Abra a biblioteca de vínculo dinâmico através da função dlopen

(4) A função principal abre a biblioteca de links dinâmicos out_http.so correspondente, analisando a linha de comandos -o "output_http.so -w www"

2. O trabalho realizado pelo plug-in de entrada e pelo plug-in de saída

(1) Plug-in de entrada 1 (arquivo input_uvc.c)

estrutura de entrada

(2) Plug-in de entrada 2

função init

Execute principalmente a função init_videoIn

Parâmetros de entrada largura largura, altura altura, taxa de quadros fps, formato de formato

O trabalho realizado por init_videoIn: ① chame a função init_v4l2 (através de uma série de ioctl fornecida pelo V4L2 para definir a resolução da câmera, taxa de quadros e formato de saída da câmera, aloque o buffer e mapeie para o espaço de aplicativo videoIn-> mem [i ]); ② Aloque um buffer temporário videoIn-> tmpbuffer para receber dados da câmera (a direção do fluxo de dados da câmera é: videoIn-> mem [i] -----> videoIn-> tmpbuffer -----> globals- > buf (chamamos armazém) ----------> canal de saída para coletar dados e enviá-los)

função de execução

Execute principalmente a função cam_thread nos parâmetros de função do encadeamento de criação

Trabalho realizado: chame a função uvcGrab (essa função copia um quadro de dados da cópia videoIn-> mem [i] para videoIn-> tmpbuffer) para obter um quadro de dados

Determine o formato dos dados obtidos.Se o formato dos dados de entrada for o formato MJPEG, copie-o diretamente para o buf da estrutura global (ou seja, coloque-o no armazém); se for o formato YUV, você deverá converter os dados no formato YUV em dados no formato MJPEG. Copie para o buf da estrutura global (ou seja, coloque-o no armazém globals-> buf)

função de parada

Faça alguma limpeza

 

(3) Plug-in de saída 1

estrutura de saída

 

(4) Plug-in de saída 2

função init

Programação de soquete e uso de soquete para simular o protocolo http, assim como algumas inicializações de soquete, como número da porta

função de execução

Remova os dados do armazém, armazene-os em um buffer e envie-os através da função de gravação para o telefone celular ou outros dispositivos receberem

função de parada

Faça alguma limpeza

 

Link de referência para este artigo:

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

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

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

Publicado 42 artigos originais · Gosto 10 · Visitantes 10.000 ou mais

Acho que você gosta

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