• 
    

    
    

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

      ?

      基于Linux的視頻軟導播系統(tǒng)的設計

      2013-01-31 05:22:48吳天亭文成玉
      電視技術(shù) 2013年9期
      關(guān)鍵詞:多播視頻流應用層

      吳天亭,杜 鴻,文成玉,滿 宇

      (成都信息工程學院,四川 成都610225)

      隨著視頻采集和傳輸技術(shù)的發(fā)展,遠程可視化指揮手段已廣泛應用于指揮控制系統(tǒng),視頻軟導播系統(tǒng)是運行在通用計算機和網(wǎng)絡環(huán)境中的一種導播軟件,它接收來自監(jiān)控點的H.264格式的壓縮視頻流,在導播計算機中解碼并顯示,操作員可根據(jù)需要將其中幾路視頻流轉(zhuǎn)發(fā)給解碼顯示設備,實現(xiàn)視頻流的接收與派發(fā)的功能,它為指揮員提供熱點視頻導播和顯示的核心手段。目前的視頻導播系統(tǒng)一般由視頻處理裝置和轉(zhuǎn)用硬件切換矩陣構(gòu)成。視頻切換矩陣可以從多路輸入視頻信號中選擇出一路或多路送往視頻處理裝置,如視頻捕獲卡、壓縮視頻流解碼器和監(jiān)視器等[1]。這種基于專用硬件的導播系統(tǒng)存在的問題是,較為復雜的模擬信號布線帶來可靠性方面的隱患,從導播中心到顯示設備間的距離受模擬視頻信號傳輸能力的約束,模擬視頻傳輸易受環(huán)境電磁干擾而影響圖像質(zhì)量。

      在一些有設備和布線空間限制,有抗電磁干擾能力要求的指揮系統(tǒng)中,硬件導播系統(tǒng)存在的缺陷使得它難以勝任應用需求。這也是軟導播系統(tǒng)的研發(fā)動機。相對硬導播系統(tǒng)而言,軟導播系統(tǒng)是一個具有視頻解碼、監(jiān)控和視頻流重定向功能的軟件系統(tǒng),運行在通用計算機中,視頻流的輸入輸出都通過網(wǎng)絡系統(tǒng)傳輸,不需通過模擬視頻電纜;導播輸出網(wǎng)絡壓縮視頻流由終端指揮顯示設備直接解碼并顯示。軟導播系統(tǒng)工作在純網(wǎng)絡環(huán)境中,布線簡單;導播輸出視頻流為網(wǎng)絡化壓縮視頻流,不受傳輸距離限制,抗電磁干擾能力較強。

      1 總體設計

      在本系統(tǒng)當中,由于計算機性能與網(wǎng)絡帶寬等限制,在單臺計算機上本系統(tǒng)可以接收八路視頻流,并且可以轉(zhuǎn)發(fā)四路視頻流。當多臺計算機同時使用本系統(tǒng)時,通過本系統(tǒng)中的多機協(xié)調(diào)機制,可以實現(xiàn)更多路視頻的接收與派發(fā)。接收為8×N路視頻流,派發(fā)為4×N路視頻流。其中N為正在使用本系統(tǒng)的計算機的數(shù)量。

      在視頻軟導播系統(tǒng)的總體設計中,它的前端由具有將模擬視頻流編碼成IP組播網(wǎng)絡視頻流能力的編碼器和模擬視頻源構(gòu)成。后端由具有將IP多播網(wǎng)絡視頻流解碼為通過RCA接口進行播放的解碼器和視頻播放器組成。整體結(jié)構(gòu)如圖1所示。

      1.1 系統(tǒng)環(huán)境

      本系統(tǒng)的使用環(huán)境如下:

      1)支持多播轉(zhuǎn)發(fā)的交換機:該交換機用來連接多播視頻發(fā)生源與視頻接收客戶端與多播視頻轉(zhuǎn)發(fā)服務器。

      圖1 視頻軟導播系統(tǒng)結(jié)構(gòu)

      2)多播轉(zhuǎn)發(fā)服務器:安裝有Linux操作系統(tǒng)的計算機主機。該端用于視頻多播的接收和轉(zhuǎn)發(fā),該端必須具有對多播視頻的接收功能,只有接收到多播視頻才可以實現(xiàn)將接收到的視頻轉(zhuǎn)發(fā)到視頻接收端,即運行視頻軟導播系統(tǒng)的主機。

      3)多播視頻發(fā)生源(多播視頻服務器):該端用于視頻多播信號的產(chǎn)生。

      4)視頻接收端(多播視頻客戶端):該端用于對多播轉(zhuǎn)發(fā)服務器轉(zhuǎn)發(fā)的多播視頻的接收。

      視頻軟導播系統(tǒng)是將經(jīng)過編碼的IP組播網(wǎng)絡視頻源在用戶界面上進行實時播放,并且根據(jù)實際要求對所接收到的視頻流進行派發(fā)。派發(fā)的目的地點根據(jù)用戶的選擇而進行改變,接收到派發(fā)視頻的用戶可以實時地對視頻進行播放。

      1.2 系統(tǒng)結(jié)構(gòu)

      本系統(tǒng)的設計基于Linux系統(tǒng)平臺中的Netfilter架構(gòu)。整個系統(tǒng)的設計分為3個部分:第一部分是內(nèi)核層網(wǎng)絡驅(qū)動的設計,主要實現(xiàn)的是對多機協(xié)調(diào)時數(shù)據(jù)包傳輸?shù)膸袷降脑O計,對流經(jīng)本機的視頻流的截獲、封裝和派發(fā)規(guī)則的設定,并且編寫用戶空間使用的API;第二部分是應用層的系統(tǒng)指揮控制界面的設計,主要實現(xiàn)的是對視頻流的播放控制與派發(fā)作用,還有應用層視頻解碼監(jiān)控及導播控制模塊的設計;第三部分是內(nèi)核層與應用層之間的通信,由于在應用層涉及到對視頻進行界面操作的設計,而且應用層不能對內(nèi)核層進行直接操作,所以要將用戶空間的用戶口令傳達到內(nèi)核空間,因此要用到內(nèi)核層與應用層之間的通信。況且在多機協(xié)調(diào)的過程中也涉及到內(nèi)核與用戶層之間的通信,以實現(xiàn)多臺計算機可靠并有效地進行工作。

      軟件的系統(tǒng)結(jié)構(gòu)圖如圖2所示,IPSWITCH.KO為自行開發(fā)的內(nèi)核驅(qū)動程序的模塊名稱。

      1.3 設計思想

      圖2 軟件系統(tǒng)結(jié)構(gòu)

      視頻軟導播的設計思想的核心是在內(nèi)核層對截獲的數(shù)據(jù)包就行修改,封裝達到對數(shù)據(jù)包進行自由派發(fā)的目的。與此同時,對數(shù)據(jù)流量與實時性又有很高要求。所以Linux系統(tǒng)中的Netfilter架構(gòu)成為了本系統(tǒng)首選的切入點。Netfilter的設計并不相關(guān)于某個確定的協(xié)議,而是在協(xié)議棧中為每個網(wǎng)絡協(xié)議定義一套唯一的鉤子函數(shù),也就是HOOK函數(shù)。在數(shù)據(jù)包經(jīng)過協(xié)議棧的這些掛接點時,鉤子函數(shù)被系統(tǒng)調(diào)用,在這些鉤子函數(shù)的掛接點中,數(shù)據(jù)報被協(xié)議棧及鉤子函數(shù)標號作為參數(shù),傳遞給Netfilter框架。對于它在網(wǎng)絡堆棧中增加的這些HOOK。內(nèi)核的任何模塊可以對每種協(xié)議的一個或多個HOOK進行注冊,實現(xiàn)掛接。這樣當某個數(shù)據(jù)報被傳遞給Netfilter框架時,內(nèi)核能檢測到是否有任何模塊對該協(xié)議和HOOK函數(shù)進行了注冊,若注冊了,則調(diào)用該模塊的注冊時使用的回調(diào)函數(shù),這樣這些模塊就有機會檢查、修改、丟棄該數(shù)據(jù)報及指示Netfilter將該數(shù)據(jù)報傳入用戶空間的隊列[2]。這一設計思想符合本系統(tǒng)的設計理念。

      2 系統(tǒng)實現(xiàn)

      2.1 內(nèi)核層網(wǎng)絡驅(qū)動設計

      Netfilter架構(gòu)一般可以分為5個部分:數(shù)據(jù)報過濾模塊、連接跟蹤模塊(Conntrack)、網(wǎng)絡地址轉(zhuǎn)換模塊(NAT)、數(shù)據(jù)報修改模塊(mangle)、其他高級功能模塊。Netfilte的節(jié)點關(guān)系則如圖3所示,其中IPSWITCH.KO為本系統(tǒng)的網(wǎng)絡驅(qū)動模塊。

      圖3 Netfilter結(jié)構(gòu)圖

      由本系統(tǒng)前端輸入的IP組播視頻流數(shù)據(jù)包流經(jīng)IP_PRE_ROUTING點后,接下來的流經(jīng)路徑有3種選擇:第一種是對數(shù)據(jù)包不做任何處理,那么該IP視頻流會經(jīng)過IP_LOCAL_IN節(jié)點,然后傳送到系統(tǒng)主機;第二種是對數(shù)據(jù)包就行修改,使其符合從IP_FORWARD流經(jīng)的條件;第三種是將數(shù)據(jù)包直接由POST_ROUTING節(jié)點發(fā)送出去。

      顯然要達到本系統(tǒng)所要求的目的,也就是對視頻流在用戶空間進行播放并且具有派發(fā)功能。那么要用到第一種以及第三種數(shù)據(jù)包的處理方式。因為該數(shù)據(jù)包是組播包,在Linux內(nèi)核的結(jié)構(gòu)中對組播數(shù)據(jù)包進行修改,并且符合第二種條件的要求勢必要做出大量的編碼工作,而第三種數(shù)據(jù)包處理方式的選擇相對要簡單高效。

      所以本系統(tǒng)對數(shù)據(jù)包的處理過程是:在IP_LOCAL_IN之前對數(shù)據(jù)包進行截獲,然后復制數(shù)據(jù)包,一份數(shù)據(jù)包直接由IP_LOCAL_IN點進入本地主機,另一份則根據(jù)應用層傳遞的命令由POST_ROUTING點直接發(fā)送出去。截獲過程HOOK函數(shù)的實現(xiàn)代碼如下:

      modify_ops.hook=modify;

      modify_ops.hooknum=NF_IP_LOCAL_IN;

      modify_ops.pf=PF_INET;

      modify_ops.priority=NF_IP_PRI_FIRST;

      ret=nf_register_hook(&modify_ops);

      if(ret<0)

      {

      printk("%s ","can't modify skb hook!");

      return ret;

      }

      案例3:在“均值不等式的定理”一節(jié)中,可用“某商店在節(jié)前進行商品降價酬賓銷售活動,擬分兩次降價,有三種降價方案:甲方案是第一次打A折銷售,第二次打B折銷售;乙方案是第一次打B折銷售,第二次打A折銷售;丙方案是兩次都打—樣折銷售,問哪一種方案降價較多?”

      printk("%s ","insmod modify skb module");return 0;

      由加載鉤子函數(shù)的代碼可以看出,該截獲數(shù)據(jù)包的函數(shù)是掛接在IP_LOCAL_IN這個節(jié)點之前的。這樣就可以讓數(shù)據(jù)包既流經(jīng)本機又可以對數(shù)據(jù)包直接進行修改,然后發(fā)送出去。其中,對數(shù)據(jù)包的截獲和發(fā)送時修改的參數(shù)都是由用戶空間傳遞給內(nèi)核層的。

      2.2 多機協(xié)調(diào)機制

      多機協(xié)調(diào)機制借鑒于Netfilter框架的連接跟蹤機制。所謂連接跟蹤機制就是跟蹤并且記錄連接狀態(tài)。Linux為每一個經(jīng)過網(wǎng)絡堆棧的數(shù)據(jù)包,生成一個新的連接記錄項[3]。此后,所有屬于此連接的數(shù)據(jù)包都被唯一地分配給這個連接,并標識連接的狀態(tài)。連接跟蹤是防火墻模塊的狀態(tài)檢測的基礎。

      本系統(tǒng)的多機協(xié)調(diào)機制即利用Netfilter固有的連接跟蹤機制,然后多臺主機的視頻軟系統(tǒng)共同維護一張視頻軟導播派發(fā)表。在這張表格上記錄接收的視頻源的地址與轉(zhuǎn)發(fā)的視頻流的目的地址,并且對應視頻源地址與轉(zhuǎn)發(fā)目的地址。這樣在視頻進行轉(zhuǎn)發(fā)時,系統(tǒng)首先查詢該表,針對該表中的已有記錄項確定是否進行接收與派發(fā)。當該主機確定進行接收或者派發(fā)的步驟后,那么該系統(tǒng)將會把新的接收與派發(fā)規(guī)則更新入該表格。這樣就可以很好地實現(xiàn)多機互動,有效地進行更多路視頻的導播功能。

      2.3 內(nèi)核空間與用戶空間之間的通信

      因為不同的時間系統(tǒng)的視頻播放和導播方案可能會不同,對于內(nèi)核空間來說系統(tǒng)的導播方案是變換的。這樣勢必要將應用層制定的導播方案傳遞到內(nèi)核層,所以內(nèi)核空間與用戶空間之間的通信就成為本系統(tǒng)必不可少的一個環(huán)節(jié)。

      在內(nèi)核空間與用戶空間通信的方法中,本系統(tǒng)選擇了使用Netlink的通信方式來進行。Netlink套接字是用以實現(xiàn)用戶進程與內(nèi)核進程通信的一種特殊的進程間通信(IPC),也是Linux系統(tǒng)中網(wǎng)絡應用程序與內(nèi)核模塊進行通信的常用的接口[4]。簡單易用的套接字應用編程接口(API)是Netlink套接字的特點之一,并具有其他用戶與內(nèi)核進程間通信所缺少的很多特性,例如多播、I/O緩沖、全雙工通信、異步通信等。和其他的進程間通信比較而言,這種在內(nèi)核中增加新的特性的系統(tǒng),Netlink套接字更加適合作為系統(tǒng)中用戶空間與內(nèi)核空間通信的方式。而且它還支持多點傳送消息,既可以實現(xiàn)內(nèi)核模塊一點對一點的通信,也可以實現(xiàn)單一內(nèi)核模塊與多個用戶空間進程的多點通信。這為內(nèi)核向用戶空間發(fā)布事件提供了一個非常有效的機制。

      本系統(tǒng)在Netlink通信機制的設計中制定了內(nèi)核層與用戶層的數(shù)據(jù)交換規(guī)則和數(shù)據(jù)包派發(fā)規(guī)則等一系列操作,在這些操作中系統(tǒng)都設定為類似于Iptables式的命令行參數(shù)的方式來對規(guī)則進行添加、修改、刪除等操作。這樣本系統(tǒng)不僅可以通過用戶空間的程序的界面對內(nèi)核規(guī)則進行操作,也可以通過Linux的系統(tǒng)終端向內(nèi)核層傳遞命令。

      2.4 系統(tǒng)程序界面設計

      系統(tǒng)程序界面采用QT軟件進行設計,而視頻播放插件則選用開源軟件VLC(Video Lan Client)提供的視頻播放接口。在用QT對系統(tǒng)界面進行設計時,主要是設計Netlink命令行參數(shù)與QT界面控件的接口,而VLC的接口函數(shù)則對系統(tǒng)播放的多播IP地址進行解析。

      VLC是一個向用戶公開代碼的、多個平臺都可以進行使用的視頻播放器。在VLC中支持大量的音視頻傳輸、封裝和編碼解碼格式。從程序結(jié)構(gòu)來看,VLC的可擴展性是相當優(yōu)秀的。因為VLC的多平臺的性質(zhì)。它的絕大多數(shù)代碼都是用高效的C語言來編寫(少量的C++和匯編)的,但是仿照與Linux內(nèi)核的模塊機制,實現(xiàn)了完全動態(tài)的模塊化功能,VLC的全部功能就連程序框架本身都是VLC中的模塊,這樣可以在VLC運行的時候進行載入。這些特性使得VLC在功能的擴展上具有更大優(yōu)勢并且易于維護。VLC的這個特點正適合本系統(tǒng)應用的視頻播放接口。

      3 小結(jié)

      本系統(tǒng)的設計在Netfilter的框架下實現(xiàn)了視頻軟導播的功能。目前支持的視頻編碼只限于H.264的視頻格式,系統(tǒng)可以根據(jù)不同的派發(fā)規(guī)則,實現(xiàn)視頻導播的功能,在視頻的流暢性與實時性都達到了很好的效果。

      [1]韓春梅.基于MAX456的視頻切換矩陣設計[J].電視技術(shù),2004,28(3):91-93.

      [2]胡安磊,周大水,李大興.Linux中Netfilter/Iptables的應用研究[J].計算機應用與軟件,2004,21(10):56-66.

      [3]張建.服務器虛擬化在代理服務器上的應用[J].計算機系統(tǒng)應用,2011,20(7):146-149.

      [4]周莉,柯健,顧小晶.Netlink套接字在Linux系統(tǒng)通信中的應用研究[J].計算機與現(xiàn)代化,2007(3):109-111.

      猜你喜歡
      多播視頻流應用層
      胖樹拓撲中高效實用的定制多播路由算法
      邊緣實時視頻流分析系統(tǒng)配置動態(tài)調(diào)整算法研究
      用于超大Infiniband網(wǎng)絡的負載均衡多播路由
      InfiniBand中面向有限多播表條目數(shù)的多播路由算法
      基于視頻流傳輸中的擁塞控制研究
      基于分級保護的OA系統(tǒng)應用層訪問控制研究
      美國視頻流市場首現(xiàn)飽和征兆
      新一代雙向互動電力線通信技術(shù)的應用層協(xié)議研究
      物聯(lián)網(wǎng)技術(shù)在信息機房制冷系統(tǒng)中的應用
      Current advances in neurotrauma research: diagnosis, neuroprotection, and neurorepair
      拜城县| 朝阳县| 太保市| 兴化市| 涪陵区| 南汇区| 阜新| 康平县| 鹿泉市| 临安市| 阿克| 维西| 太仓市| 沾化县| 长垣县| 城固县| 丰镇市| 茶陵县| 洱源县| SHOW| 南靖县| 九龙城区| 大兴区| 兰西县| 峡江县| 扶绥县| 顺义区| 宁晋县| 准格尔旗| 山丹县| 兴国县| 交口县| 保靖县| 福建省| 邢台市| 龙门县| 白山市| 安乡县| 龙南县| 鄄城县| 奉贤区|