mjpg-streamerプロセスフレーム図は次のとおりです。
プログラムの実行後、メインプロセスは、入力パラメーターによって設定された入力および出力チャネルに従って、対応する入力および出力ダイナミックリンクライブラリを開き、次の関数を順次呼び出します
1.入力ウェアハウス出力(mjpg-streamer.h)
(1)グローバル構造
stopは停止フラグです。1に設定すると、プログラムは実行を停止します。
dbとdb_updateはそれぞれミューテックスロックと条件変数であり、2つはスレッドの同期に使用されます。入力チャネルがデータをウェアハウスに入れると、出力チャネルはデータをフェッチするよう通知されます
倉庫はbufポインタに対応しており、倉庫のサイズはsizeです。
出力は出力構造に対応します(出力プラグイン)
outcntは、現在の出力チャネルにいくつかの方法があることを示します
(2)mjpg-streamer-r63ファイル
.soファイルはプラグインであり、入力プラグイン(inputという単語が前にある)または出力プラグイン(outputプラグが前にある)の場合があります。
mjpg_streamerを実行するときは、コマンドラインから入力チャネルと出力チャネルを指定しますmjpg_streamer -i "input_uvc.so -f 10 -r 320 * 240" -o "output_http.so -w www"
USBカメラを使用してデータを収集するため、input_uvc.so入力プラグインが入力チャネルとして選択されます(上記のように、-iはどのプラグインが入力チャネルとして使用されるかを指定します)。
Webページ表示を使用するため、出力チャネルとしてoutput_http.so出力プラグインを選択します。(上の図に示すように、-oオプションを使用して、出力チャネルとして使用するプラグインを指定します)
(3)main関数はコマンドライン-i "input_uvc.so -f 10 -r 320 * 240 "を解析して、対応するinput_uvc.soダイナミックリンクライブラリを開きます
dlopen関数を介してダイナミックリンクライブラリを開く
(4)main関数は、コマンドライン-o "output_http.so -w www"を解析して、対応するout_http.soダイナミックリンクライブラリを開きます。
2.入力プラグインと出力プラグインによって行われる作業
(1)入力プラグイン1(input_uvc.cファイル)
入力構造
(2)入力プラグイン2
init関数
主にinit_videoIn関数を実行します
入力パラメータ幅幅、高さ高さ、フレームレートfps、フォーマットフォーマット
init_videoInによって行われる作業:①init_v4l2関数を呼び出し(V4L2が提供する一連のioctlを介してカメラの解像度、フレームレート、カメラの出力形式を設定し、バッファーを割り当ててからアプリケーション空間にマッピングしますvideoIn-> mem [i ]);②カメラデータを受信するための一時バッファーvideoIn-> tmpbufferを割り当てます(カメラデータフローの方向は次のとおりです:videoIn-> mem [i] -----> videoIn-> tmpbuffer -----> globals- > buf(ウェアハウスと呼びます)---------->データを取り出して送信する出力チャネル)
実行機能
主に作成スレッド関数パラメーターでcam_thread関数を実行
完了した作業:uvcGrab関数を呼び出し(データのフレームをcopy videoIn-> mem [i]からvideoIn-> tmpbufferにコピーします)、データのフレームを取得します
取得したデータの形式を決定します。入力データ形式がMJPEG形式の場合は、グローバル構造のbufに直接コピーします(つまり、ウェアハウスに配置します)。YUV形式の場合は、YUV形式のデータをMJPEG形式のデータに変換する必要があります。グローバル構造のbufにコピーします(つまり、ウェアハウスのglobals-> bufに配置します)。
ストップ機能
クリーンアップを行う
(3)出力プラグイン1
出力構造
(4)出力プラグイン2
init関数
ソケットプログラミングとソケットを使用して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