基于DirectShow的MPEG-4視頻傳輸系統的研究與實(shí)現
摘要 本文簡(jiǎn)單介紹了DirectShow技術(shù),研究了利用DirectShow實(shí)現視頻采集、壓縮和網(wǎng)絡(luò )傳輸技術(shù)。并利用第三方提供的編解碼器實(shí)現了MPEG-4視頻數據的網(wǎng)絡(luò )傳輸系統,在該系統中利用RTP協(xié)議進(jìn)行視頻數據傳輸,同時(shí)實(shí)現了遠端幀率的控制。
關(guān)鍵詞 視頻; 采集; 壓縮; DirectShow; MPEG-4,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è)必須考慮到的因素。MPEG-4是由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
評論