<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > 基于DirectShow的MPEG-4視頻傳輸系統的實(shí)現

基于DirectShow的MPEG-4視頻傳輸系統的實(shí)現

作者: 時(shí)間:2007-06-18 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要 本文簡(jiǎn)單介紹了技術(shù),研究了利用采集、壓縮和網(wǎng)絡(luò )傳輸技術(shù)。并利用第三方提供的編解碼器數據的網(wǎng)絡(luò ),在該系統中利用RTP協(xié)議進(jìn)行數據傳輸,同時(shí)了遠端幀率的控制。
關(guān)鍵詞 視頻; 采集; 壓縮; ; ,RTP

1 引言
近年來(lái),隨著(zhù)國民經(jīng)濟的發(fā)展,社會(huì )各個(gè)部門(mén)對于視頻監視系統的需求越來(lái)越多。但目前的很多監視系統都跟具體的硬件相關(guān),必須要具體的采集卡的支持才能實(shí)現。所以有必要開(kāi)發(fā)一種具有通用性的視頻監視系統,用普通的攝像頭就能實(shí)現視頻的采集。

DirectShow的開(kāi)發(fā)能很靈活地控制音視頻的效果,所以選擇DirectShow這種可擴展性好的技術(shù)做開(kāi)發(fā)對以后的應用升級很有幫助。此外,為了實(shí)現流媒體傳輸控制的策略,流媒體的傳輸和回放也是應解決的問(wèn)題之一。由Microsoft提供的DirectShow技術(shù)組件對象模型技術(shù),支持寬松的格式變化,提供高品質(zhì)的多媒體流回放。利用它可以在普通微機中實(shí)現流媒體的客戶(hù)端處理,并可以提高系統的通用性和可擴展性。

對于視頻數據的傳輸,壓縮率是一個(gè)必須考慮到的因素。是由ISO和IEC的MPEG組制定的一個(gè)關(guān)于活動(dòng)圖像和聲音的編碼國際標準。它在內容的交互性、壓縮率、通用訪(fǎng)問(wèn)能力等方面提供了一系列新的或改進(jìn)的功能。MPEG-4視頻在提供較好的圖像質(zhì)量的同時(shí)擁有較高的壓縮率,適合于作為傳輸的圖像壓縮標準。

2 相關(guān)技術(shù)

2.1 DirectShow技術(shù)簡(jiǎn)介
DirectShow是Microsoft為開(kāi)發(fā)高性能多媒體應用而開(kāi)發(fā)的底層應用程序接口(API),它是DirectX家族的核心成員之一。DirectShow自身是通過(guò)一種系統內置的或程序員開(kāi)發(fā)的過(guò)濾器(Filter)來(lái)控制和處理多媒體數據的體系結構。該體系結構定義了如何處理和控制過(guò)濾器內部及相互之間的多媒體數據流。每個(gè)過(guò)濾器都有輸入或輸出針(Pin), 或兩者都有。

過(guò)濾器(Filter)是DirectShow的基本組成部分,是Filter Graph(過(guò)濾器圖)中最小的功能模塊,DirectShow將多媒體數據的處理分離成不同的步驟,這些不同的步驟由相應的Filter去處理。這樣我們可以把不同的過(guò)濾器搭配在一起達到我們要求的來(lái)處理多媒體數據。過(guò)濾器根據實(shí)現功能的不同大致可分為3類(lèi):
(1)源過(guò)濾器(Source Filters)。源過(guò)濾器負責得到原始媒體數據。這些媒體數據的來(lái)源包括本地硬盤(pán)或網(wǎng)絡(luò )上的媒體文件、各種采集卡等。
(2)轉換過(guò)濾器(Transform Filters)。轉換過(guò)濾器的任務(wù)是處理從其他過(guò)濾器中接收的數據,經(jīng)過(guò)一定的處理后再傳遞給下一個(gè)過(guò)濾器。編解碼器就是典型的轉換過(guò)濾器。
(3)表現過(guò)濾器(Rendering Filters)。表現過(guò)濾器對接收到的數據進(jìn)行最后的處理。它做的工作有:把媒體數據保存為文件、將數據發(fā)送到網(wǎng)絡(luò )、顯示視頻、回放音頻等[1]。

在DirectShow 系統之上是應用程序(Application) 。應用程序要按照程序所要實(shí)現的功能建立起相應的Filter Graph ,然后借助于Filter Graph Manager 來(lái)控制整個(gè)數據的處理過(guò)程。DirectShow 能在Filter Graph 運行的時(shí)候接收到各種事件,并通過(guò)消息的方式發(fā)送到應用程序。這樣就實(shí)現了應用程序與DirectShow 系統之間的交互。

2.2 RTP/RTCP協(xié)議介紹
實(shí)時(shí)傳輸協(xié)議RTP(Realtime Transport Protocol)是針對Internet 上多媒體數據流的一個(gè)傳輸協(xié)議,1996 年由IETF( Internet 工程任務(wù)組) 的AVT小組作為RFC1889 發(fā)布AVT小組后來(lái)對該文檔進(jìn)行了不斷改進(jìn),于2003年7月提出了代替RFC1889的RFC3550。RTP充分體現了應用層分幀這一現代通信協(xié)議的設計思想,允許其用戶(hù)了解、調整甚至制定連續媒體的打包方案,該協(xié)議被廣泛用于VoIP、視頻等實(shí)時(shí)媒體的傳送。RTP 協(xié)議包括RTP 和RTCP(RTP 控制協(xié)議) 兩個(gè)關(guān)系十分密切的子協(xié)議:
(1) RTP協(xié)議-傳輸具有實(shí)時(shí)特性的數據;
(2)RTCP協(xié)議-監測QoS 和傳送參與傳輸者的信息。

RTP(實(shí)時(shí)傳輸協(xié)議) 通常工作在UDP的上層,從上層接收多媒體信息碼流(如MPEG-4視頻) ,組裝成RTP 數據包,然后發(fā)送給下層UDP ,相當于OSI 的會(huì )話(huà)層,提供同步和排序服務(wù)。故RTP 協(xié)議適用于傳送連續性強的數據,如視頻、音頻等,并對網(wǎng)絡(luò )引起的時(shí)延差錯有一定的自適應能力。RTCP 為實(shí)時(shí)控制協(xié)議,用于管理控制信息,如監視網(wǎng)絡(luò )的延時(shí)和帶寬,一旦所傳輸的多媒體信息的帶寬發(fā)生變化,接收端則通知發(fā)送端,廣播符號化識別碼和編碼參數,達到控制傳輸質(zhì)量的目的。此外,如果底層網(wǎng)絡(luò )支持多點(diǎn)傳播的話(huà),RTP 還支持使用多點(diǎn)傳播向多個(gè)目的端點(diǎn)發(fā)送數據。

RTP協(xié)議具有如下特點(diǎn)[5]:
(1)靈活性
RTP協(xié)議的數據報文和控制報文使用不同的端口,數據流和控制流分離,這樣大大地提高了協(xié)議的靈活性,處理也簡(jiǎn)單。
(2)支持多播
如果下層網(wǎng)路支持,可以支持多播。
(3)可擴展性
RTP協(xié)議通常為一個(gè)具體的應用提供服務(wù),通過(guò)一個(gè)具體的應用進(jìn)程實(shí)現,而不作為OSI體系結構中單獨的一層來(lái)實(shí)現,RTP只提供協(xié)議框架,開(kāi)發(fā)者可以根據應用的具體要求對協(xié)議進(jìn)行充分的擴展。

3 關(guān)鍵技術(shù)的實(shí)現

該系統的發(fā)送端實(shí)現思路如下:用USB攝像頭采集數據,用Divx 5.1.1 Codec 對采集到的數據進(jìn)行MPEG-4的編碼,然后連到一個(gè)發(fā)送Filter把編碼后的數據發(fā)送出去。其Filter Graph如圖1所示 :

圖1 發(fā)送端的Filter Graph
接收端的實(shí)現思路如下:通過(guò)一個(gè)接收Filter接收發(fā)送端發(fā)送的數據,然后再用Divx Decoder Filter對接收到的數據進(jìn)行解碼。最后用Video Renderer把解碼后的數據播放出來(lái)。其Filter Graph如圖2所示:

圖2 接收端的Filter Graph
3.1 數據采集及編碼的實(shí)現
3.1.1 采集Filter Graph的實(shí)現

采集應用的Filter Graph一般比較復雜,而直接使用Filter Graph Manager上的IGraphBuilder接口構建這種Filter Graph,有時(shí)候難度又很大。為此,DirectShow特別提供了一個(gè)輔助組件Capture Graph Builder,來(lái)簡(jiǎn)化這種Filter Graph的創(chuàng )建。

首先是創(chuàng )建Filter Graph Manager 組件,核心代碼如下:

3.1.2 加入采集Filter


3.1.3加入MPEG-4編碼器Filter

這里我們采用Divx 提供的開(kāi)源編碼Filter。安裝DivX.Pro.v5.1.1后會(huì )自動(dòng)安裝Divx的編碼器Filter和解碼器Filter(注:解碼器Filter在接收端要用到)。在程序中加入Divx的編碼器Filter,實(shí)現思想是在Video Compressors目錄下枚舉到名稱(chēng)為"DivX Pro(tm) 5.1.1 Codec"的Filter項后,把它加入到Filter Graph中即可。

3.2 數據的發(fā)送和接收
3.2.1 數據的發(fā)送Filter的實(shí)現

數據的發(fā)送要開(kāi)發(fā)一個(gè)發(fā)送Filter,為了編程上的方便,這里采用程序內Filter的形式來(lái)實(shí)現。即用類(lèi)的形式而不是編寫(xiě)一個(gè)成一個(gè)后綴為ax的組件注冊后再使用。這里我們定義一個(gè)繼承自CBaseFilter的類(lèi)CFilterMpeg4Sender。這個(gè)類(lèi)必須實(shí)現以下功能[3]:

(1) 在類(lèi)中定義CFilterMpeg4Sender上的Pin的實(shí)例mInputPin。
(2) 實(shí)現繼承自CBaseFilter::GetPin,用于返回Filter上各個(gè)Pin的對象指針。
(3) 實(shí)現繼承自CBaseFilter::GetPin,用于返回Filter上各個(gè)Pin的數量。

定義一個(gè)繼承自CRenderedInputPin的類(lèi)CMpeg4InputPin,用于實(shí)現CFilterMpeg4Sender上的輸入pin,發(fā)送Filter通過(guò)該輸入pin接收編碼Filter輸出的數據,然后按一定的規則發(fā)送。

這個(gè)類(lèi)必須實(shí)現以下功能[2]:
(1) 重寫(xiě)方法EndOfStream。
(2) 實(shí)現IPin::BeginFlush和IPin::EndFlush兩個(gè)函數。
(3) 重寫(xiě)方法CBasePin::CheckMediaType進(jìn)行連接時(shí)媒體類(lèi)型的檢查。
(4) 重寫(xiě)方法CBasePin:: Receive(),接收Sample并發(fā)送

3.2.2 數據的接收Filter的實(shí)現
數據的接收其實(shí)是要編寫(xiě)一個(gè)Source Filter, 這個(gè)Source Filter名稱(chēng)為CFilterMpeg4Receiver,也繼承自CBaseFilter。這跟發(fā)送Filter的實(shí)現有些類(lèi)似,有一點(diǎn)需要注意的是該Filter輸出的MediaType的設置。

Char MediaType[]=//媒體數據類(lèi)型,通過(guò)在發(fā)送端把媒體類(lèi)型寫(xiě)到一個(gè)文件中而得到然后通過(guò)語(yǔ)句:CFilterMpeg4Receiver::SetupMediaType((char *)MediaType,88)設置輸出數據的MediaType。

CFilterMpeg4Receiver::SetupMediaType再調用CMpeg4OutPin::SetupMediaType()設置、接收到的媒體數據的格式,

3.2.3 數據的網(wǎng)絡(luò )傳輸的實(shí)現



數據的發(fā)送我們采用開(kāi)源代碼JRTPLIB【6】提供的RTP協(xié)議棧。最新的JRTPLIB對RFC3550的實(shí)現進(jìn)行了封裝,開(kāi)發(fā)人員只要初步了解RTP協(xié)議就可以開(kāi)發(fā)出高質(zhì)量的音視頻傳輸程序。使用JRTPLIB時(shí),只需要通過(guò)繼承RTPSession類(lèi),再重新以下幾個(gè)函數就可以實(shí)現視頻數據的接收。


在網(wǎng)絡(luò )帶寬比較低的情況下(如十幾KBps),數據丟幀現象比較嚴重,這對于圖像質(zhì)量有很大的影響。我們采用拆幀(拆成1400個(gè)字節)以后再發(fā)送的方法,來(lái)降低丟幀率。接收端收到數據后,再把屬于同一視頻幀的數據再組起來(lái)。

網(wǎng)絡(luò )發(fā)送接收程序流程圖如圖3所示:

圖3 網(wǎng)絡(luò )發(fā)送接收程序流程圖


對程序流程圖的說(shuō)明如下:
(1)發(fā)送端拆幀的算法如下:

然后把屬于同一視頻幀的數據組好,發(fā)送到解碼Filter。
經(jīng)過(guò)測試(在CDMA1.X網(wǎng)絡(luò )下),采用拆幀方法傳輸視頻數據比直接發(fā)送丟包率更低,傳輸質(zhì)量有了很大的提高。

3.3 數據解碼及回放的實(shí)現
解碼Filter使用的是Divx提供的開(kāi)源解碼器,在接收Filter的后面接上該解碼Filter即可,最后接上Renderer Filter就可以把接收到的數據回放出來(lái)。

3.4 實(shí)現幀率控制功能
通過(guò)在采集設備和編碼Filter(DivX Pro(tm) 5.1.1 Codec)之間加入一個(gè)幀率控制Filter來(lái)實(shí)現幀率的控制,該Filter相當于一個(gè)視頻幀數計數器,每接收到一幀,并不立即把該幀發(fā)給下游的編碼Filter,而是把計數器的值加1,當計數器的值達到最大值時(shí)才把當前收到的幀發(fā)出去。在接收端發(fā)控制幀率命令給采集端可以很方便的實(shí)現幀率的遠端控制。

程序片斷如下:

加了幀率控制Filter的發(fā)送端 Filter Graph 如圖4所示:


圖4 實(shí)現了幀率控制的Filter Graph

4 總結

該系統采用了DirectShow技術(shù)實(shí)現了MPEG-4視頻數據的傳輸,視頻數據的傳輸采用了RTP協(xié)議。而且還實(shí)現了遠端幀率的控制,該系統可以很方便的移植到未來(lái)3G網(wǎng)絡(luò )的圖像中。對編解碼器進(jìn)行研究,采用H.264技術(shù)實(shí)現編解碼Filter是下一步要完成的工作,當然在傳輸質(zhì)量(QoS)方面也要深入進(jìn)行研究。

參考文獻

1 邵林,曹漢強.基于DiectShow的視頻廣播系統設計與實(shí)現[J].微型機與應用,2004, 4 :58-60
2 Microsoft DirectX C++ SDK Document [EB/OL],2003
3 陸其明.DiectShow開(kāi)發(fā)指南[M].北京.清華大學(xué)出版社,2004
4 陸其明.DiectShow實(shí)務(wù)精選[M].北京:科學(xué)出版社,2004
5 張明華.《基于RTP的視頻傳輸控制方法的研究》[D].鄭州市:鄭州大學(xué), 2004.3
6 Jori Liesenborgs JRTPLIB 3.1.0 [EB/OL]



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>