日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

mjpg-streamer框架分析

發(fā)布時(shí)間:2023/11/30 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mjpg-streamer框架分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

mjpg-streamer程框架圖如下所示:

程序運(yùn)行起來(lái)后,主進(jìn)程根據(jù)傳入的參數(shù)設(shè)置的輸入輸出通道打開(kāi)對(duì)應(yīng)的輸入輸出動(dòng)態(tài)鏈接庫(kù),并依次調(diào)用以下函數(shù)

1、輸入---倉(cāng)庫(kù)-----輸出(mjpg-streamer.h)

(1)global結(jié)構(gòu)體

stop為停止標(biāo)志位,置1時(shí)程序停止運(yùn)行;

db和db_update分別為互斥鎖和條件變量,兩者用于線程同步,當(dāng)輸入通道把數(shù)據(jù)放入倉(cāng)庫(kù)后,通知輸出通道來(lái)取數(shù)據(jù)

倉(cāng)庫(kù)對(duì)應(yīng)的是buf指針,倉(cāng)庫(kù)的大小是size.

輸出對(duì)應(yīng)的是output結(jié)構(gòu)體(輸出插件)

outcnt表示當(dāng)前輸出通道中有幾種方式

(2)mjpg-streamer-r63文件

???????.so文件是插件,可能是輸入插件(前面帶有input字樣),也可能是輸出插件(前面帶有output插件)。?

運(yùn)行mjpg_streamer時(shí)通過(guò)命令行mjpg_streamer -i "input_uvc.so -f 10 -r 320*240" -o "output_http.so -w www"指定輸入輸出通道

???????由于用的是USB攝像頭來(lái)采集數(shù)據(jù),因此選擇input_uvc.so輸入插件作為輸入渠道(如上所示,通過(guò)-i指定哪一個(gè)插件作為輸入渠道)。

??????由于我們要用的是網(wǎng)頁(yè)顯示,因而選擇output_http.so輸出插件作為輸出渠道。(如上圖所示,通過(guò)-o選項(xiàng)指定哪一個(gè)插件作為輸出渠道)

(3)主函數(shù)通過(guò)解析命令行-i "input_uvc.so -f 10 -r 320*240“ ,打開(kāi)對(duì)應(yīng)的input_uvc.so動(dòng)態(tài)鏈接庫(kù)

通過(guò)dlopen函數(shù)打開(kāi)動(dòng)態(tài)鏈接庫(kù)

(4)?主函數(shù)通過(guò)解析命令行-o "output_http.so -w www" ,打開(kāi)對(duì)應(yīng)的out_http.so動(dòng)態(tài)鏈接庫(kù)

2、輸入插件和輸出插件所做的工作

(1)輸入插件1(input_uvc.c文件)

input結(jié)構(gòu)體

(2)輸入插件2

init函數(shù)

主要執(zhí)行init_videoIn函數(shù)

傳入?yún)?shù)寬度width ,高度height,幀率fps,格式format

init_videoIn所做工作:①調(diào)用init_v4l2函數(shù)(通過(guò)V4L2提供的一系列的ioctl來(lái)設(shè)置攝像頭的分辨率,幀率,以及攝像頭的輸出格式,并分配緩沖區(qū)然后映射到應(yīng)用程序空間videoIn->mem[i]);②分配一個(gè)臨時(shí)緩沖區(qū)videoIn->tmpbuffer,用于接收攝像頭數(shù)據(jù)(攝像頭數(shù)據(jù)流向?yàn)?#xff1a;videoIn->mem[i]? ? ?----->? videoIn->tmpbuffer? ? ?----->? globals->buf(我們所說(shuō)的倉(cāng)庫(kù)) ---------->輸出通道取出數(shù)據(jù)外發(fā))

run函數(shù)

主要執(zhí)行創(chuàng)建線程函數(shù)參數(shù)里面的cam_thread函數(shù)

所做工作:調(diào)用uvcGrab函數(shù)(該函數(shù)把一幀數(shù)據(jù)從拷貝videoIn->mem[i]?里拷貝到videoIn->tmpbuffer)獲取一幀數(shù)據(jù)

判斷獲得數(shù)據(jù)的格式,如果輸入數(shù)據(jù)格式是MJPEG格式,直接把它拷貝到 global結(jié)構(gòu)體的buf里面(也就是放入倉(cāng)庫(kù));如果是YUV格式,要把YUV格式數(shù)據(jù)轉(zhuǎn)變成MJPEG格式的數(shù)據(jù)再拷貝到global結(jié)構(gòu)體的buf里面(也就是放入倉(cāng)庫(kù)globals->buf)

stop函數(shù)

做一些清理工作

?

(3)輸出插件1

output結(jié)構(gòu)體

?

(4)輸出插件2

init函數(shù)

socket編程以及用socket來(lái)模擬http協(xié)議,因此做socket的一些初始化工作,如端口號(hào)

run函數(shù)

從倉(cāng)庫(kù)中取出數(shù)據(jù),存到一個(gè)緩沖區(qū)中,然后通過(guò)write函數(shù)將數(shù)據(jù)發(fā)送出去,供手機(jī)或其他設(shè)備接收

stop函數(shù)

做一些清理工作

?

本文參考鏈接:

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

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

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

總結(jié)

以上是生活随笔為你收集整理的mjpg-streamer框架分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。