• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于B/S模式下的值班監(jiān)控系統(tǒng)設計

      2021-02-11 07:59:20李大明
      新技術新工藝 2021年12期
      關鍵詞:字段接收端線程

      張 奔,李大明

      (中國電子科技集團公司第二十八研究所,江蘇 南京 210007)

      在值班系統(tǒng)中對重點區(qū)域的實時監(jiān)控是必不可少的,值班人員能夠掌握監(jiān)控區(qū)域的實時視頻畫面,通過視頻實時掌握區(qū)域動向[1-3]。隨著計算機性能的提升,用計算機處理視頻信息和數(shù)字視頻傳輸已經(jīng)得到廣泛應用。目前,網(wǎng)絡傳輸?shù)募夹g越來越成熟,網(wǎng)絡帶寬也越來越高,但是視頻的數(shù)據(jù)量一般都非常大,如果不通過任何壓縮技術傳遞視頻,會造成數(shù)據(jù)堵塞、延遲甚至丟失現(xiàn)象,視頻畫面會嚴重卡頓。因此,在傳遞視頻時對視頻圖像壓縮成為必然的環(huán)節(jié)。在諸多視頻壓縮標準中,MPEG-4以其高壓縮比和高性能備受人們的青睞,被廣泛應用于網(wǎng)絡環(huán)境下的視頻傳輸。本文采用Divx編解碼器[4-6]對視頻進行編碼、壓縮。Divx編碼后形成以幀為格式的MPEG-4流,Divx解碼也是以幀的格式解碼,通過Divx編解碼器有效地解決了由于網(wǎng)絡的局部不穩(wěn)定導致的視頻圖像重影、抖動、花瓶,得到了良好質量的視頻畫面。

      1 系統(tǒng)構成

      1.1 硬件環(huán)境

      系統(tǒng)硬件設備由CCD攝像頭、采集卡、服務器、交換機和若干個客戶端席位組成,組成架構如圖1所示。系統(tǒng)支持5~10個客戶端席位,在服務器上安裝一個基于PCIe總線的采集卡,攝像頭通過AV線與采集卡相連,服務器采集到的視頻流經(jīng)過壓縮成為一個信息包,通過網(wǎng)絡傳送到客戶端,客戶端接收到信息包進行解壓并實時顯示,從而得到清晰流暢的運動圖像。同時服務器端也可以實時顯示所采集的視頻。

      圖1 系統(tǒng)硬件框圖

      1.2 系統(tǒng)軟件

      圖2 系統(tǒng)軟件流程圖

      2 系統(tǒng)設計關鍵模塊

      2.1 視頻采集

      裝有視頻采集卡的服務端接收攝像頭拍攝的視頻圖像,服務端的軟件采用VFW技術對視頻圖像進行捕獲,VFW是微軟公司推出的一款關于數(shù)字視頻的軟件開發(fā)包,其優(yōu)勢簡單直觀,能夠快速地運用回調函數(shù)完成對視頻的實時捕獲并對視頻源進行控制。在視頻捕獲前先創(chuàng)建一個視頻捕獲窗口,通過capDriverConnect()關聯(lián)捕獲視頻窗口到視頻驅動程序上,對視頻捕獲參數(shù)和窗口顯示模式進行設計,通過capSetCallbackOnFrame()注冊回調函數(shù),捕獲圖像到緩存并進行相應處理,完成捕獲。

      2.2 視頻幀的組成

      視頻采集的數(shù)據(jù)是位圖型式的視頻幀,發(fā)送前要對視頻幀進行編碼,利用Divx編碼器壓縮以后形成以幀為格式的Mpeg4流。Divx解碼器也是以幀的格式解壓。為了在接收端能夠方便地提取出一幀,提出格式組建幀(見圖3)。

      圖3 視頻幀格式

      每個視頻幀由5個字段組成,各個字段的描述如下:第1個字段為占用4個字節(jié)的幀開始標志,標志著一幀的開始;第2個字段為占用4個字節(jié)的幀大小,表示整個幀的大小;第3個字段為占用4個字節(jié)的幀編號,表示幀的順序編號;第4個字段為占用1個字節(jié)的幀類型,標志此幀是否是關鍵幀;第5個字段為幀數(shù)據(jù),存放壓縮后一幀的完整數(shù)據(jù),大小不定,壓縮比越高,幀數(shù)據(jù)的大小越小。

      2.3 視頻幀的發(fā)送和接收

      為了保證接收端能夠及時接收到發(fā)送過來的視頻數(shù)據(jù),在發(fā)送端專門創(chuàng)建一個線程用來發(fā)送數(shù)據(jù)。同時主線程循環(huán)地對采集到的視頻數(shù)據(jù)進行壓縮編碼。發(fā)送線程的工作流程如圖4所示。

      圖4 發(fā)送線程工作流程

      線程中發(fā)送的數(shù)據(jù)幀是按照上一節(jié)中的方法組建好的數(shù)據(jù)幀。該方法能夠保證正在發(fā)送的當前幀能夠完整地到達接收端。

      注意此線程中剛開始或者每當發(fā)送完一幀以后,線程就轉到掛起狀態(tài),等待外界喚醒。這個任務由回調函數(shù)完成,在回調函數(shù)中,判定如果發(fā)送線程準備就緒(處于掛起狀態(tài)),則進行圖像壓縮,然后喚醒線程發(fā)送壓縮完的數(shù)據(jù),否則直接跳出,等待下一次調用回調函數(shù)。

      接收端最重要的是從接收的數(shù)據(jù)流中提取出完整的一幀。該方法的思想是:首先從數(shù)據(jù)流中尋找?guī)_始標志,再從緊挨后面的數(shù)據(jù)中提取出幀的大小,然后從接收緩沖區(qū)中讀入該幀剩余的數(shù)據(jù),最后尋找下一幀的開始標志,如此往復。接收端的工作流程如圖5所示。

      圖5 接收端的工作流程

      3 JNI技術[10]

      3.1 JNI介紹

      Java Native Interface(JNI)是Java語言的本地編程接口,是J2SDK的一部分,已經(jīng)被集成到標準Java平臺之中。在Java程序中,可以通過JNI實現(xiàn)一些用Java語言不便實現(xiàn)的功能。使用JNI提供的方法,Java代碼能夠直接與特定操作系統(tǒng)和硬件平臺中的本地共享二進制庫進行交互。這個交互過程發(fā)生在相同的Java虛擬機進程之中。

      將Java類中聲明的類型為“Native”的Java方法映像到共享二進制庫中的相應函數(shù)上,并且將這兩者加載到相同的進程空間。JNI框架使得本地方法使用Java對象的方式和Java代碼使用這些對象相同。一個本地方法能夠創(chuàng)建Java對象,然后檢查并使用這些對象,也可以檢查并使用由Java應用程序代碼創(chuàng)建的對象,甚至能夠修改它創(chuàng)建的或傳遞給它的Java對象。因此,本地語言和Java應用程序都能創(chuàng)建、修改、訪問Java對象,并在它們之間共享這些對象。本地方法也能夠很容易地調用Java方法、傳遞方法所需的參數(shù)并得到返回的結果。

      3.2 JNI使用步驟

      1)步驟1:在MyEclipse里建立一個包含Compressor類的Java工程,該類中包含了需要調用的本地化方法的描述。其中,本地化方法應當用native關鍵詞聲明。使用System.LoadLibrary()方法加載需要的動態(tài)鏈接庫。代碼如下:

      Package com.chnic.jni

      Public class Compressor{

      Static{

      System.LoadLibrary(“DeCompressorEnd”);

      }

      Public Compressor (){}

      Public native void InitCompressor();

      Public native void FillBitmapstruct();

      Public native void UnInitCompressor();

      Public native void UnCompress(byte[] in,int width,int heigh,byte[] out);

      }

      2)步驟2:將步驟1生成的源文件用Java類編譯器編譯成二進制字節(jié)碼文件,接下來要用javah方法來生成一個相對應的.h頭文件。Javah是一個專門為JNI生成頭文件的命令。CMD打開控制臺之后輸入javah回車就能看到javah的一些參數(shù),在控制臺進入到工程的根目錄之后,然后輸入命令:Javah-jni com.chnic.jni.Compressor。

      命令執(zhí)行完之后,在工程的根目錄下就會發(fā)現(xiàn)com_chnic_jni_Compressor.h這個頭文件。

      ifdef__cplusplus

      extern "C" {

      endif

      /*

      * Class: com_chnic_jni_Compressor

      * Method: InitCompressor

      * Signature: ()V

      */

      JNIEXPORT void JNICALL Java_com_chnic_jni_Compressor_InitCompressor

      (JNIEnv *, jobject);

      /*

      * Class: com_chnic_jni_Compressor

      * Method: FillBitmapStruct

      * Signature: ()V

      */

      JNIEXPORT void JNICALL Java_com_chnic_jni_Compressor_FillBitmapStruct

      (JNIEnv *, jobject);

      /*

      * Class: com_chnic_jni_Compressor

      * Method: UnInitCompressor

      * Signature: ()V

      */

      JNIEXPORT void JNICALL Java_com_chnic_jni_Compressor_UnInitCompressor

      (JNIEnv *, jobject);

      /*

      * Class: com_chnic_jni_Compressor

      * Method: Compress

      * Signature: ([BI[B)V

      */

      JNIEXPORT void JNICALL Java_com_chnic_jni_Compressor_UnCompress

      (JNIEnv *, jobject, jbyteArray, jint, jint,jintArray);

      ifdef __cplusplus

      }

      endif

      endif

      3.3 系統(tǒng)測試

      本系統(tǒng)在Windows 7平臺下服務器采集到的視頻數(shù)據(jù)壓縮之后以廣播方式將數(shù)據(jù)發(fā)送出去,圖像大小為640*512的位圖,每秒采集25幀,壓縮比最大時為100,且延遲較小,用戶只需在客戶端登錄Web網(wǎng)頁即可查看到解壓后的視頻流。經(jīng)過比較,服務器上顯示的視頻和客戶端顯示的視頻基本相同,并且客戶端的視頻和服務器上的視頻基本同步,流暢性也較好。服務端和客戶端的視頻截圖分別如圖6和圖7所示。

      圖6 服務器顯示的視頻

      圖7 客戶端顯示的視頻

      4 結語

      本文對實時視頻傳輸系統(tǒng)的開發(fā)設計做了較為詳細的描述,重點介紹了基于Divx的視頻編解碼技術、JNI技術以及基于B/S結構的實時視頻數(shù)據(jù)傳輸顯示。試驗表明,通過上述方法實現(xiàn)的網(wǎng)絡視頻傳輸能達到良好質量的視頻畫面,滿足了視頻實時傳輸?shù)囊?,達到了預期的效果。

      猜你喜歡
      字段接收端線程
      圖書館中文圖書編目外包數(shù)據(jù)質量控制分析
      基于擾動觀察法的光通信接收端優(yōu)化策略
      頂管接收端脫殼及混凝土澆筑關鍵技術
      一種設置在密閉結構中的無線電能傳輸系統(tǒng)
      新能源科技(2021年6期)2021-04-02 22:43:34
      基于多接收線圈的無線電能傳輸系統(tǒng)優(yōu)化研究
      淺談linux多線程協(xié)作
      CNMARC304字段和314字段責任附注方式解析
      無正題名文獻著錄方法評述
      關于CNMARC的3--字段改革的必要性與可行性研究
      圖書館建設(2014年3期)2014-02-12 15:41:35
      Linux線程實現(xiàn)技術研究
      沧州市| 大姚县| 阳江市| 西乡县| 淮安市| 苍梧县| 喀喇沁旗| 格尔木市| 阜平县| 清苑县| 叙永县| 曲沃县| 阳江市| 溆浦县| 广河县| 扎兰屯市| 彭阳县| 白山市| 突泉县| 台中县| 民权县| 凤阳县| 林口县| 梨树县| 三穗县| 阿拉善左旗| 广元市| 郓城县| 苏尼特右旗| 苏尼特左旗| 巩义市| 新化县| 元氏县| 彭山县| 营口市| 潮安县| 察雅县| 信宜市| 台安县| 孟州市| 军事|