mjpg-streamer學習筆記2----框架分析
1、輸入---倉庫-----輸出(mjpg-streamer.h)
(1)global結構體
輸入對應的是input結構體(輸入外掛)
倉庫對應的是buf指標,倉庫的大小是size.
輸出對應的是output結構體(輸出外掛)
outcnt表示當前輸出通道中有幾種方式
(2)mjpg-streamer-r63檔案
.so檔案是外掛,可能是輸入外掛(前面帶有input字樣),也可能是輸出外掛(前面帶有output外掛)。
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“ 命令列對應的操作函式操作
通過dlopen函式開啟動態連結庫
(4) -o "output_http.so“命令列對應的操作函式操作
2、輸入外掛和輸出外掛所做的工作
(1)輸入外掛1(input_uvc.c檔案)
input結構體
(2)輸入外掛2
init函式
主要執行init_videoIn函式
- 傳入引數
寬度width ,高度height,幀率fps,格式format
- 所做工作
run函式
主要執行建立執行緒函式引數裡面的cam_thread函式
- 所做工作
判斷獲得資料的格式
如果輸入資料格式是MJPEG格式,直接把它拷貝到 global結構體的buf裡面(也就是放入倉庫);如果是YUV格式,要把YUV格式資料轉變成MJPEG格式的資料再拷貝到global結構體的buf裡面(也就是放入倉庫)
stop函式
做一些清理工作
(3)輸出外掛1
output結構體
(4)輸出外掛2
init函式
- 所做工作
run函式
從倉庫中取出資料,存到一個緩衝區中,然後通過write函式將資料傳送出去,供手機或其他裝置接收
stop函式
做一些清理工作