姜利英,梁茂,岳保磊,孔令春
(1.鄭州輕工業學院電氣信息工程學院,鄭州 450002;2.北京凌陽愛普科技有限公司,北京 100085)
一種畫面同步系統的設計與實現
姜利英1,梁茂1,岳保磊1,孔令春2
(1.鄭州輕工業學院電氣信息工程學院,鄭州 450002;2.北京凌陽愛普科技有限公司,北京 100085)
為了更好滿足現在會議等場合的需求,通過采用和修改MJPG-streamer開源視頻服務器軟件的源碼,為其添加新的功能模塊,實現板端與PC端屏幕同步顯示的效果。使得原本多用于視頻監控的MJPG-streamer,有新的應用領域。介紹MJPG-streamer的主要插件及其功能并詳細給出利用MJPG-streamer畫面同步的實現的方法。實驗結果表明,該設計可以很好實現屏幕間的同步。
嵌入式Linux;MJPG-streamer;同步
隨著計算機網絡技術、移動通信技術、多媒體技術的快速發展[1],人們對產品的體驗的要求越來越高。當前公司在進行產品展示時,多進行遠距離展示,這樣就會增加了公司的成本,并占用了辦公室內的空間,且搬移不便。基于此,本文采用了一個開源工程軟件,經過修改,設計實現了一種畫面同步系統,減小了對投影設備的依賴,同時減少了占地空間,該系統在會展中心、學校、銀行、公司等有著廣泛的市場和發展前景。
該系統是以Cortex-A8處理器S5PV210為核心,在嵌入式Linux系統平臺下,通過MJPG-streamer的輸入插件獲取屏幕的數據,然后對所得到的視頻數據通過內部總線送到視頻服務器MJPG-streamer上,視頻服務器經過對圖像壓縮處理,經過以太網傳輸出去,遠端客戶機通過瀏覽器或者專用軟件訪問視頻服務器[2],即可在客戶端同步顯示板端實時畫面,系統總體如圖1所示。

圖1 系統總體框圖
系統的硬件系統主要包括三星公司的Cortex系列處理器S5PV210、觸摸屏、網卡、串口以及內存和NAND Flash存儲芯片組成。s5pv210是一款高性能32位RISC微處理器,采用了ARM Cortex-A8內核,ARM V7指令集,主頻可達1GHz,64/32位內部總線結構,32/ 32KB的數據/指令一級緩存,512KB的二級緩存[3],具有低功耗、低成本等優點。網卡選用支持10/100Mbps、小型、電壓可變的以太網芯片LAN9220,,內存采用DDR2 RAM(K4T1G164),NAND Flash采用Samsung K9K8G08U0B,SLC結構,大小為1Gx8bit,串口用于開發過程中的調試使用,具體硬件結構如圖2所示。

圖2 硬件結構圖
3.1 系統軟件總體框架的介紹
本次設計的系統軟件從下往上依次為Bootloader, Linux內核,Yaffs文件系統和MJPG-streamer視頻服務器,其中需要添加必要的設備驅動,系統框圖如圖3所示。

圖3 整體結構框圖
Bootloader引導加載程序是系統加電后運行的第一段代碼,是在操作系統內核運行之前運行的一小段程序,通過設備的初始化,并建立內存映射空間,為操作系統準備好合適的環境[4]。一般從網上下載的Bootloader,需要通過修改添加對特定硬件的識別、初始化之后,然后經過交叉編譯得到可執行文件,通過SD卡或其他方式下載到板子上。
由于Linux內核是采用模塊化設計的一種源碼開放的操作系統,所以在選擇了觸摸屏驅動外,為了縮小編譯后內核鏡像的大小,本系統里只保留了必需的功能模塊,刪除了冗余的功能模塊,待一切選擇好后,就可以執行make命令對內核重新編譯,然后就可以在/ arm/arch/boot目錄下產生一個zImage文件。
文件系統可以通過從官網下載有“瑞士軍刀”之稱的busybox1-1.6源碼編譯,然后通過mkyaffs2image工具制作yaffs文件系統,文件系統中包括Linux啟動時必要的文件,內核啟動后加載linuxrc文件,按照順序啟動各種服務、掛載操作和完成C庫的拷貝。
3.2 MJPG-streamer的結構和畫面同步的設計
MJPG-streamer是一個輕量級的視頻服務器軟件。一個可以從單一輸入組件獲取圖像并傳輸到多個輸出組件的命令行應用程序[5]。MJPG-streamer的源碼結構分明,層次清晰,由于它采用模塊化的設計方法,所有的工作都是通過它的各個插件完成的,所以軟件中只要定義好了各組件(plug-in)的輸入、輸出以及組件之間的銜接關系,用戶就可自行根據對功能的需求,完成自己的設計,本次設計就是通過添加input_screen插件來實現畫面同步的。
它有兩個最主要并且最常用的組件是input_uvc輸入組件和output_http輸出組件,input_uvc輸入插件用于產生視頻數據并將視頻數據復制到內存中,output_http輸出插件是網站服務器插件,它可以將攝像頭采集的視頻數據傳送到用戶瀏覽器中[6],其中output_ http輸出插件是一個功能齊全的HTTP1.0的Web服務器,可以根據現有的M-JPEG標準,從一輸入插件中獲取圖像,向客戶端瀏覽器傳輸jpeg流文件,從而實現從瀏覽器端訪問視頻數據的要求。正是由于該開源工程擁有這兩個重要的插件,所以該服務器軟件多用于視頻監控等領域。而在本文中,由于不是使用MJPG-streamer通用的功能,所以input_uvc插件用不到,只用到了output_http插件。
另外它還包括input_control、input_file、input_testpicture、input_gspcavl、output_autofocus、output_file, out_viewer等組件,具體如圖4所示。

圖4 MJPG-streamer結構框圖
由于M JPG-streamer主函數的定義在mjpg_ streamer.c文件,在實現了各個輸入輸出組件后,主函數通過調用各個組件即可完成整個視頻采集傳輸顯示的全部過程。以下是本設計中input_screen輸入組件各個模塊程序設計的具體實現思路。
(1)int input_init(input-parameter *param)
該函數的功能是通過對輸入參數的判斷,循環分析輸入參數來進行對應的操作,如提示保存所需要的輸入參數的信息,設置延時的秒數等。
(2)int input_run(void)
該函數創建了一個工作線程worker_thread線程,該線程實現了rgb24格式圖片到JPEG格式圖片的轉換,以方便視頻畫面的傳輸和顯示,具體工作流程見下文。最后使用pthread_deatch函數回收線程序資源。
(3)int input_stop(void)
該函數通過調用pthread_cancel(worker)取消圖片格式轉換的工作線程,回收線程資源,節省內存空間。
(4)int input_cmd(int in_cmd_type cmd,int value)
該函數的功能為對屏幕參數的調整和控制,通過對參數的判別,增加或減小獲取到的屏幕的數據。
其中第二步里的線程函數worker_thread(void*arg)具體實現流程圖如下:

圖5
經過上述對MJPG-streamer輸入插件input_screen的增加,即可實現畫面的同步,然后就是對整個項目的重新編譯和移植,具體移植過程不再詳述,可參考相關文獻。由于編譯過程中需要libjpeg.so庫,所有需要先移植jpeg庫,然后導入環境變量export LIB_PATH=/ home/edu/share/install/,進行編譯安裝,最后把生成的.so文件拷貝到m jpg目錄下。啟動視頻服務器后,指定服務器的輸入/輸出組件以及該文件夾的路徑,那么客戶端會瀏覽事先存編寫好的已存放在/m jpg/www目錄下的網頁,最后在start.sh啟動該服務器即可,修改后的語句如下:

本文通過研究開源工程MJPG-streamer的結構和源碼,在它通用的功能基礎上,通過增加input_screen輸入組件,很好地實現了視頻同步。不僅拓展了MJPG-streamer的用途,而且設計了一種簡單方便的同步方法,經驗證,該系統實現的效果很好,可以用于各種需要演示的場合。效果如圖6。

圖6
[1] 許青,劉方.基于ARM9的室內無線監控報警系統設計與實現[J].電子科技,2013,26(2):103
[2] 于艷萍,朱曉智,王中訓.基于ARM9和USB攝像頭的網絡視頻采集系統設計[J].現代電子技術,2011,34(24):50
[3] 三星處理器芯片手冊
[4] 楊闊,何東健.基于S3C6410的田間視頻監控系統的實現[J].計算機工程與設計,2013,34(6):1979
[5] 陳書益,黃永慧.開源視頻服務器軟件MJPG-streamer的研究和應用[J].電子設計工程,2012,20(5):172
[6] 楊宏,張志文.基于Web的嵌入式遠程監控系統的研究與實現[J].計算機與數字工程,2012,10:72
Design and Implementation of Screen Synchronous System
JIANG Li-ying1,LIANG Mao1,YUE Bao-lei1,KONG Ling-chun2,
(1.Institute of Electrical Engineering,Zhengzhou University of Light Industry,Zhengzhou 450002;2.Beijing Sunplusapp Technology Co.Ltd.,Beijing 100085)
In order to bettermeet the requirements of presentmeeting,modifies the MJPG-streamer open source video server s of tware and source code,adds new modules for the realization of the plate,tomake the screen synchronization display of terminal and PC.Makes the new use for videomonitoring of MJPG-streamer.Introduces themain plug-ins and their functions and themethod of screen synchronization, the experimental results show that the design is very good to achieve the synchronization between the screens.
Embedded Linux;MJPG-streamer;Synchronous
1007-1423(2015)07-0065-04
10.3969/j.issn.1007-1423.2015.07.018
姜利英(1981-),女,河南郾城人,博士,副教授,研究方向為生物傳感器及檢測微系統
梁茂(1988-),男,河南固始人,碩士,研究生,研究方向為單片機及嵌入式系統
2014-10-20
2015-02-10
岳保磊(1987-),男,河南駐馬店人,碩士,,研究方向為生物傳感器、單片機檢測微系統
孔令春(1984-),男,江蘇南京人,工程師,研究方向為視音頻、嵌入式系統