開源視頻服務器軟件MJPG-streamer的研究和應用
2)int input_run(void)
該函數(shù)使用pthread_create函數(shù)創(chuàng)建工作線程。并使用pthread_detach函數(shù)將該線程設置為分離狀態(tài)。在input_uvc組件中,input_run函數(shù)創(chuàng)建cam_thread線程,該線程負責抓取攝像頭采集的一幀圖像并進行格式轉(zhuǎn)換,采用的是V4L2視頻設備開發(fā)框架。具體工作流程請參考下文描述。
3)int input_stop(void)
該函數(shù)通過調(diào)用pthread_cancel(pthread_t tid)函數(shù)實現(xiàn)主線程取消cain_thread線程(抓取數(shù)據(jù)幀的工作線程),這兩個線程在同一個進程內(nèi),共享該進程的地址空間。主線程通過內(nèi)核發(fā)送信號以取消工作線程。tid是要取消線程的線程ID。
4)int input_cmd(int in_cmd_type cmd,int value)
該函數(shù)的主要功能是對網(wǎng)絡攝像頭鏡頭的控制,例如對色彩、飽和度、對焦等功能的控制。in_cmd_type結(jié)構(gòu)體定義了對輸入組件進行控制的命令類型,把對鏡頭的控制命令類型和參數(shù)值傳入此函數(shù)。函數(shù)內(nèi)進行匹配,以完成對鏡頭的控制操作。
input_uvc組件的私有函數(shù)如下:
1)void help(void)
該函數(shù)打印相關的幫助信息到stderr。
2)void*cam_thread(void*arg)
這個工作線程的作用是抓取一幀數(shù)據(jù)并把它復制到全局緩沖區(qū)。它的工作流程如圖4所示。本文引用地址:http://2s4d.com/article/148910.htm
工作流程不斷循環(huán),直至線程退出。退出前使用pthread_cleanup_pop函數(shù)調(diào)用cam_cleanup線程清理函數(shù)。
3)void cam_cleanup(void*arg)
該函數(shù)是線程清理函數(shù),線程退出前,使用此函數(shù)釋放在工作線程中被分配的資源。
2.2 ouput_http輸出組件
output_http輸出組件中的http.c文件內(nèi)定義了服務器對客戶端請求的響應。
send_snapshot、send_stream、send_error、send_file分別定義了如何響應客戶端發(fā)送截圖、發(fā)送視頻流、發(fā)送錯誤信息、發(fā)送文件的請求信息。
command函數(shù)執(zhí)行客戶端指定控制命令,并發(fā)送反饋信息。
server_thread服務線程的作用是打開一個TCP socket并等待客戶端連接。如有客戶端鏈接,則為每一個連接到服務器的客戶端創(chuàng)建一個client_thread專門服務于該客戶端。
client_thread客戶線程的作用是為連接到服務器的客戶端服務。
3 MJPG-streamer在嵌入式中的應用
本文通過修改軟件源代碼,實現(xiàn)軟件的額外功能。將MJPG-streamer作為視頻服務器軟件,應用于嵌入式開發(fā)。
系統(tǒng)以S3C2440微處理器為核心,構(gòu)建嵌入式視頻監(jiān)控系統(tǒng)。Arm9將攝像頭拍攝圖像經(jīng)壓縮后傳到Web客戶端,客戶端除了可以查看攝像頭拍攝圖像外,還可以控制云臺設備,從而獲得任意角度的圖像。
采用低端云臺作為前端的控制設備,嵌入式視頻服務器可提供多個前端設備接口與多個云臺連接。嵌入式視頻服務器根據(jù)各客戶端的請求,將圖像或云臺控制信號傳輸給相應的前端設備。本文只實現(xiàn)系統(tǒng)的基本模型,采用一個云臺設備??稍诨灸P偷幕A上,擴展成多路傳輸。
3.1 系統(tǒng)硬件平臺
系統(tǒng)的硬件平臺采用的是天嵌的TQ-2440開發(fā)板,CPU處理器是S3C2440AL,主頻為400MHz,最高可達533MHz,配備256MB的Nand Flash、2 MB的Nor Flash以及64 MB的SDRAM,可滿足系統(tǒng)要求。另外使用了一個V4L2攝像頭,以及一個RS485接口的低端云臺設備。
c語言相關文章:c語言教程
攝像頭相關文章:攝像頭原理 矢量控制相關文章:矢量控制原理
評論