国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      移動視頻監(jiān)控系統(tǒng)的媒體模塊的制作方法

      文檔序號:7756564閱讀:257來源:國知局
      專利名稱:移動視頻監(jiān)控系統(tǒng)的媒體模塊的制作方法
      技術領域
      本發(fā)明屬于監(jiān)控系統(tǒng)的監(jiān)控軟件領域,尤其是一種移動視頻監(jiān)控系統(tǒng)的媒體模塊。
      背景技術
      由于多媒體數據量大,音視頻的編碼算法復雜,特別在實時流媒體的傳輸中客戶對多媒體的解碼速度要求較高,同時音視頻的同步問題和因多媒體壓縮編解碼標準較多引起的擴展性問題使得多媒體開發(fā)技術面臨很大的挑戰(zhàn)。目前很多公司基于程序開發(fā)接口的模塊化開發(fā)模式遇到了很大的瓶頸,二次開發(fā)人員需要花較多的時間學習各個模塊的程序開發(fā)接口,同時軟件的擴展性也相對較差,在程序升級,軟件開發(fā)交接的過程中存在很大的問題,軟件開發(fā)人員需要系統(tǒng)的培訓才能進入項目的軟件開發(fā)。

      發(fā)明內容
      為了克服已有移動視頻監(jiān)控系統(tǒng)的媒體模塊的擴展性能相對較差、開發(fā)周期長、 系統(tǒng)開發(fā)效率低的不足,本發(fā)明提供一種具有較好的擴展性能、縮短開發(fā)周期、提高系統(tǒng)的開發(fā)效率的移動視頻監(jiān)控系統(tǒng)的媒體模塊。本發(fā)明解決其技術問題所采用的技術方案是一種移動視頻監(jiān)控系統(tǒng)的媒體模塊,所述媒體模塊采用Directa10W框架作為多媒體軟件開發(fā)的框架,采用“推”模式作為數據傳輸的模式,采用ffmpeg decoder作為 H. 264視頻解碼器;所述Directa10W框架包括源過濾器,用于負責視頻的采集;變換過濾器,用于負責視頻的處理,對H. 264編碼數據的解碼,然后提交到下一級過濾器中;渲染過濾器,用于負責視頻在面板上的渲染播放和音頻的播放,將解碼后的音視頻信息提交到顯卡或聲卡中處理;過濾器管理器,用于負責過濾器的管理,同時向應用程序提供Filter管理接口,并且提供參考時鐘;提供Graph事件模塊,用于以消息的形式確保媒體模塊向應用程序通知事件。作為優(yōu)選的一種方案所述過濾器管理器中,在輸出Pin上調用Connect,如果輸出Pin接受連接,則調用輸入Pin上的ReceiveConnection,如果輸入Pin也接受這次連接, 則表示雙方連接成功。本發(fā)明的技術構思為開發(fā)人員需要一種更加符合人類行為方式的軟件開發(fā)技術以從這復雜、繁重的開發(fā)中解脫出來。COMKomponent Object Model組建對象模型)開發(fā)技術正是在這種背景下由微軟公司推出,進而組件化設計的思想得到快速的發(fā)展。人們可以開發(fā)出各種功能專一的組件,然后把他們組合起來就可以構成一個復雜的系統(tǒng)。并且系統(tǒng)中的組件可以隨時替換、升級、定制,同時,每一個模塊可以被復用,具有較好的擴展性。同時Directa10W采用了 COM的標準,提供了開放的接口,用戶可以根據自己的需求開發(fā)出不同的功能模塊。同時用戶可以利用已有的功能模塊組件和自己開發(fā)的模塊組件,快速搭建媒體傳輸播放平臺軟件。媒體模塊可以采用Directa10W作為多媒體軟件開發(fā)的框架。采用“推”模式作為數據傳輸的模式,采用ffmpeg decoder作為H. 264視頻解碼器,能夠實現(xiàn)視頻的實時接收、 解碼、播放,達到預期的目的。因為有了統(tǒng)一的開發(fā)標準,各種壓縮標準組織可以開發(fā)出在Directa10W框架中運行的編解碼模塊,因此有較好的擴展性。對于音視頻同步的問題,因為有了 Directalow 框架,每個進入Directalow的音視頻數據包都會設置一個時間戳,當處理完該數據包之后,視頻渲染模塊可以根據該視頻戳進行音視頻的調整,然后再提交播放。本發(fā)明的有益效果主要表現(xiàn)在具有較好的擴展性,同時還能應用開源的COM組件,縮短軟件開發(fā)周期,提高系統(tǒng)開發(fā)效率,而且相對比較穩(wěn)定。


      圖1為本發(fā)明的Directaiow系統(tǒng)框圖。
      圖2為本發(fā)明的Source Filter框架設計。
      圖3為本發(fā)明的CPushSource264類繼承關系。
      圖4 為本發(fā)明的 CPushSourcd64: OpenRTPReceive ()方法流程圖。
      圖5 為本發(fā)明的 CPushSourcd64: :media_calIback 方法流程圖。
      圖6為本發(fā)明的視頻接收模塊實現(xiàn)的類圖。
      圖7為本發(fā)明的RTP數據包接收流程圖。
      圖8為本發(fā)明的接收端報告RR生成和發(fā)送流程圖。
      圖9為本發(fā)明的CPushPin264類圖。
      圖10為本發(fā)明的Source Filter輸出Pin線程執(zhí)行函數FillBuffer ()流程圖。
      圖11本發(fā)明的為VMR結構圖。
      具體實施例方式下面結合附圖對本發(fā)明做進一步說明。參照圖1 圖11,一種移動視頻監(jiān)控系統(tǒng)的媒體模塊,所述媒體模塊采用 DirectShow框架作為多媒體軟件開發(fā)的框架,采用“推”模式作為數據傳輸的模式,采用 ffmpeg decoder作為H. 264視頻解碼器;Directaiow框架中的源過濾器(Source Filter)負責視頻的采集,在該發(fā)明中視頻數據來源于因特網;變換過濾器(Transform Filter)負責視頻的處理,在該發(fā)明中是對 H. 264編碼數據的解碼,然后提交到下一級過濾器中;渲染過濾器(Rendering Filter)主要負責視頻在面板上的渲染播放和音頻的播放,它將解碼后的音視頻信息提交到顯卡或聲卡中處理;過濾器管理器(Filter Graph Manager)主要負責過濾器的管理,同時向應用程序提供Filter管理接口,并且提供參考時鐘(Reference Clock)以確保音視頻數據的同步;提供Graph事件,以消息的形式確保媒體模塊向應用程序通知事件。Directa10W框架中,過濾器之間的通信需要統(tǒng)一的媒體類型,媒體類型是用來描述媒體格式的方法,因此數據在Filter的Pin之間進行數據傳輸需要統(tǒng)一的媒體格式。只有兩個Filter都支持這種媒體類型,他們才能連接起來。Filter在使用之前需要進行連
      4接,即Filter之間上一級輸出Pin和下一級輸入Pin之間的連接,是雙方使用媒體類型的一個協(xié)商過程,過濾器管理器在輸出Pin上調用Connect,如果輸出Pin接受連接,則調用輸入Pin上的ReceiveConnection,如果輸入Pin也接受這次連接,則表示雙方連接成功。應用Directa10W框架做多媒體開發(fā),開發(fā)之前需要選擇數據的傳輸模式,模式的選擇決定了整個多媒體處理系統(tǒng)的框架結構和基類的選擇,本發(fā)明是實時源數據的播放, 采用“推”模式作為視頻的傳輸模式。視頻數據的解碼作為多媒體處理軟件中重要的組成部分,成為決定該處理軟件運行效率的重要因素。本發(fā)明選用H. 264作為視頻壓縮的標準,選用開源的ffmpeg decoder 作為H. 264視頻解碼器。本實施例的移動視頻監(jiān)控系統(tǒng)的媒體模塊,主要有三大Filter,分別是Source Filter、Transform Filter、Rendering Filter。以下是Source Filter的設計與實現(xiàn)(I)Source Filter 開發(fā)環(huán)境配置Source Filter 是一個 COM 組件,開發(fā)的時候需要繼承 DirectShowSDK(Software Development Kit軟件開發(fā)工具包)提供的基類,這樣可以提高開發(fā)效率和程序的健壯性。 因此我們需要對Filter的開發(fā)環(huán)境進行配置。①編譯Directaiow SDK的基類源代碼,生成靜態(tài)鏈接庫;②設置靜態(tài)鏈接庫所在目錄,即在菜單一工具一選項一VC++目錄一庫文件設置編譯好的靜態(tài)鏈接庫所在的目錄;③設置基類所在的頭文件目錄,即在菜單一工具一選項一VC++目錄一包含文件中設置基類頭文件所在目錄,如下C:\DXSDK90\IncludeC\DXSDK90\SAMPLES\C++\DIRECTSH0ff\BASECLASSC:\DXSDK90\SAMPLES\C++\C0MM0N\INCLUDE④使用多線程的C語言運行庫,即在項目一工程屬性一C/C++ —代碼生成一運行時庫選擇多線程調試;⑤在工程中設置靜態(tài)鏈接庫連接文件,同時設置該過濾器的導出文件 PushSource. def ;O) Source Filter 的設計Source Filter主要實現(xiàn)視頻數據采集,根據以上媒體模塊的技術分析,由于該系統(tǒng)是一個實時源的播放,因此選用“推”模式作為視頻數據傳輸的模式。根據Directalow的 SDK提供的實現(xiàn)數據傳輸模式的基類,“推”模式應該選擇基類Csource作為Source Filter 的父類,提供了一個“推”數據的能力,選擇基類CsourceStream作為SourceFilter輸出Pin 的基類,實現(xiàn)了一個推數據的線程,數據就是靠這個線程從Source Filter的輸出Pin“推” 向 Transform Filter 的輸入 Pin。由于Source Filter的主要功能是實時接收視頻信息,因此該過濾器的底層模塊應該是視頻接收模塊,根據多媒體傳輸模塊的設計,該模塊實現(xiàn)了基于RTP協(xié)議的流媒體實時的接收,同時根據RFC3984協(xié)議實現(xiàn)了 H. 264網絡抽象層單元的重組、分片。作為對流媒體的實時控制,客戶端處理軟件需要實時的回傳接受者報告(RR)到視頻發(fā)送端,同時,接收視頻發(fā)送端的應用控制包(APP)對視頻播放的速率進行控制,因此需要設計一個 RTCP (RTP Control Protocol RTP控制協(xié)議)控制模塊來實現(xiàn)對視頻數據的控制。因為實時視頻的傳輸使用UDP作為傳輸層協(xié)議,因此視頻的傳輸會出現(xiàn)抖動等狀況,嚴重影響視頻傳輸的質量,采用緩沖區(qū)技術可以很好的解決這個問題,因此本發(fā)明設計了一個視頻緩沖區(qū)作為視頻接收模塊和Source Filter輸出Pin “推”線程之間的緩沖。圖2為Source Filter框架圖,主要包括視頻接收模塊、RTCP控制模塊,視頻緩沖區(qū)和 Source Filter 的輸出 Pin。(3) Source Filter 的實現(xiàn)Source Filter的實現(xiàn)采用C++語言開發(fā),類作為C++語言的基本組織方式, 實現(xiàn)了 Source Filter 程序。CpushSourcd64 作為 Source Filter 的總框架類,繼承了 Csource提供了 “推”數據的能力,同時組合了 JRTPClient類和MreamBuf類。其中 JRTPClient類實現(xiàn)了視頻實時接收模塊的功能和RTCP控制模塊的功能,StreamBuf類組合了 MreamBufNode類實現(xiàn)了視頻緩沖區(qū)的功能,其中MreamBufNode類作為緩沖區(qū)中的一個節(jié)點,用來存儲實時收到的視頻單元。圖3為其類圖。其中CpushSource264: OpenRTPReceive ()方法創(chuàng)建了視頻緩沖區(qū),同時打開RTP 數據接收和RTCP消息反饋,圖4為其流程圖。圖5是回調函數CpushSource264: :media_calIback的流程圖,底層的RTP媒體接收模塊接收到多媒體數據以后,通過調用該函數將視頻數據寫入到視頻緩沖區(qū)當中。①視頻接收模塊的實現(xiàn)視頻接收模塊的主要功能是接收視頻壓縮數據,然后將其傳輸到視頻緩沖區(qū)中。因為為了保證視頻傳輸的實時性,視頻壓縮數據經過RTP的封裝,因此視頻壓縮數據的獲取需要從RTP數據包的負載中獲取,這里RTP協(xié)議的實現(xiàn)采用了開源的JRTPLIB庫, RTPSession類是JRTPLIB中實現(xiàn)RTP協(xié)議的對外接口,它里面組合了 RTPkssionParams 類和 RTPUDPv4TransmissionParam 類,RTPkssionParams 是對 RTP 會話層參數的設置, RTPUDPv4TransmissionParam是對RTP傳輸層參數的設置。該視頻傳輸模塊同時含有一個視頻接收線程,線程的實現(xiàn)通過一個線程管理類CthreadObject,CthreadObject封裝了線程創(chuàng)建、啟動、關閉、暫停、等功能,對外提供線程執(zhí)行函數RimLoopO,其派生類只要重寫該函數就可以實現(xiàn)線程的功能。JRTPClient類實現(xiàn)了該視頻接收模塊,它繼承了 RTPSession類和CthreadOb ject 類,提供創(chuàng)建RTP會話、結束RTP會話、開啟結束視頻接收、設置回調函數、設置參數等接口。 視頻接收在RunLoop ()函數中實現(xiàn),它調用了視頻處理函數ftOcessStreamO函數實現(xiàn)視頻接收,然后調用回調函數,將視頻存儲在Source Filter的視頻緩沖區(qū)中。圖6為類圖。圖7為函數ProcesdtreamO的流程圖,該函數實現(xiàn)了視頻的接收,首先調用JRTPLib中的庫函數獲取RTP數據包,然后獲取RTP數據包中的負載,判斷該負載的 NAL (Network Abstraction Layer 網絡抽象層)頭類型,如果是NALU (Network Abstraction Layer Unit網絡抽象層單元)直接分包,就將該負載加上標準NAL單元起始碼(00 00 0001)輸入到視頻緩沖區(qū)當中;如果是NALU組合分包,就將該負載分成若干個NAL單元,分別添加NAL單元起始碼輸入到視頻緩沖區(qū)當中;如果是NALU分包傳輸,就等待接受完所有的分包,添加NAL單元起始碼輸入到視頻緩沖區(qū)當中。
      ②RTCP反饋模塊的實現(xiàn)在Source Filter的RTCP反饋模塊中,客戶端首先接收RTP數據包,然后根據序列號計算出該視頻傳輸的丟包率和抖動,將這些信息以接收端報告(RR)的形式發(fā)送到視頻發(fā)送端,視頻發(fā)送端根據接收端報告(RR)對視頻的發(fā)送速率進行控制。圖8為接收端報告生成和發(fā)送圖。③Source Filter 輸出接口 Pin 的實現(xiàn)Source Filter的輸出Pin是一個COM組件,它實現(xiàn)了視頻傳輸的功能,它將讀取視頻緩沖區(qū)中的視頻數據,然后傳輸至Transform Filter的輸入Pin。整個輸出Pin的COM 組件通過CpushPin264實現(xiàn),圖9為其類圖。在CsourceStream類中OnThreadCreateO函數啟動一個“推”數據的線程。圖 10為Source Filter輸出Pin線程執(zhí)行函數FillBuffer ()流程圖,Csourc沾tream中的 FillBufferO函數實現(xiàn)了向媒體發(fā)送線程中的Sample中填充視頻數據,F(xiàn)illBufferO函數是一個純虛函數,在其派生類CpushPir^64中實現(xiàn)了該函數。CpushPin264包含媒體類型設置接口,在Filter連接前需要對Filter的Pin進行媒體類型設置,只有兩個Pin的媒體類型匹配才能進行連接。CpushPir^64: =SetMediaTypeO函數實現(xiàn)了媒體類型的設置。 CpushPin264: CheckMediaType 用于檢驗該 Pin 的媒體類型。以下是 ^Transform Filter 的實現(xiàn)根據以上的技術分析,選用開源的ffmpeg deccoder作為該系統(tǒng)的H. 264流媒體解碼器,F(xiàn)FDShow Filter封裝了 ffmpeg decoder,它是一個全能的編解碼器,是將ffmpeg、 xvid等解碼器封裝成Directalow和VFW的標準組件,它支持大多數的視頻編解碼,包括 H. 264.MPEG-UMPEG-2等,并且FFDSiow有較高的解碼效率且占系統(tǒng)的CPU資源較少,同時擁有視頻優(yōu)化功能,讓音視頻的播放更加流暢。Transform Filter 的 GUID 如下DEFINE_GUID(ffdshow_video_decoder,0x04FE9017,0xF873,0x410E,0x87,OxlE, OxAB,0x91,0x66,0xlA,0x4E,0xF7);Filter Graph Manager 根據該 GUID 創(chuàng)建該變換過濾器(TransformFilter),其實現(xiàn)如下hr = AddFilterByCLSID (ffdshow_video_decoder, L" decoder,,,&m_pDecoder);if (FAILED (hr)){m_blnit = false ;}并將其輸入Pin和源過濾器的輸出Pin進行連接,將輸出Pin和渲染過濾器 (Rendering Filter)的輸入Pin進行連接,其實現(xiàn)如下hr = ConnectFilters(m_pSource, m_pDecoder);if (FAILED (hr)) {m_blnit = false ;
      }hr = ConnectFilters(m_pDecoder, m_pVideo);if (FAILED (hr)) {m_blnit = false ;}下面是 Rendering Filter 的實現(xiàn)Rendering Filter實現(xiàn)了視頻的渲染功能。客戶端處理軟件視頻渲染采用VMR 作為視頻渲染的 Filter,VMR(Video Mixing Renderer)是 DirectShow 的新一代 Video Renderer,目前最高版本是VMR-9,只要安裝了 DirectX-9的操作系統(tǒng)上都有這個Filter。(I)VMR(Video Mixing Renderer 視頻混合渲染器)結構圖11為VMR結構圖,為了適應不同的應用場合,VMR采用模塊化設計,除了若干個引腳,它還包括混合器、圖像合成器、內存分配管理器、內核同步單元和窗口管理器等功能獨立的組件。①窗口管理器VMR提供3中窗口模式,分別是有窗口、無窗口和無呈現(xiàn)。窗口模式是VMR默認的模式,VMR會創(chuàng)建一個窗口,并將視頻顯示到該窗口上,窗口管理器只有在窗口模式下才能使用;無窗口模式是視頻直接顯示在應用程序提供的窗口上,該客戶端處理軟件的視頻渲染采用非窗口的模式,將視頻呈現(xiàn)在客戶端處理軟件提供的窗口中,這樣對視頻有較強的控制能力。②內存分配管理器是一個COM組件,它與顯卡進行交互,對視頻顯示進行控制。 應用程序可以實現(xiàn)自己的內存分配管理器,從而控制DirectDraw或Direct3D對象,并且在視頻顯示的時候能夠訪問視頻圖像的位圖信息。③內核同步單元是一個COM組件,它根據sample中的時間戳對視頻數據進行排序,它的參考時鐘是根據Filter Graph Manager來進行設置,同時提供幀報告和質量管理的功能?;旌掀骱蛨D像合成器在視頻合成時使用,混合器負責收集多路視頻信息的輸入, 并對他們進行Z排序,然后在恰當的時候通知圖像合成器進行視頻混合。圖像合成器則執(zhí)行實際的視頻混合,將多路視頻數據合成一個單一的視頻進行顯示,該客戶端處理軟件顯示程序沒有進行視頻混合,因此該組件沒有使用。(3)客戶端處理軟件Rendering Filter的實現(xiàn)因為該客戶端處理軟件不需要視頻合成,只需要調整一些視頻顯示的參數,例如 亮度、飽和度、對比度等,我們只要選擇傳統(tǒng)的VideoRenderer做視頻渲染濾波器即可,傳統(tǒng)的Video Renderer對系統(tǒng)的硬件配置要求不高,這樣使該客戶端處理軟件有較強的通用性。以下是 Video Renderer 的 GUID DEFINE_GUID(video_renderer,0x6BClCFFA,0x8FCl,0x4261,OxAC,0x22,OxCF, 0xB4,0xCC,0x38,OxDB,0x50);Filter Graph Manager根據該GUID創(chuàng)建該視頻渲染過濾器(!tendering Filter), 其實現(xiàn)如下hr = AddFilterByCLSID(video_renderer, L" video" ,&m一pVideo);
      if(FAILED (hr)) {m_blnit = false ;}并將其和變換過濾器(Transform Filter)進行連接,其實現(xiàn)如下hr = ConnectFilters(m_pDecoder, m_pVideo);if(FAILED(hr)) {m_blnit = false ;}最后在運行之后進行視頻渲染。
      權利要求
      1.一種移動視頻監(jiān)控系統(tǒng)的媒體模塊,其特征在于所述媒體模塊采用Directalow框架作為多媒體軟件開發(fā)的框架,采用“推”模式作為數據傳輸的模式,采用ffmpeg decoder 作為H. 264視頻解碼器;所述DirectShow框架包括源過濾器,用于負責視頻的采集;變換過濾器,用于負責視頻的處理,對H. 264編碼數據的解碼,然后提交到下一級過濾器中;渲染過濾器,用于負責視頻在面板上的渲染播放和音頻的播放,將解碼后的音視頻信息提交到顯卡或聲卡中處理;過濾器管理器,用于負責過濾器的管理,同時向應用程序提供Filter管理接口,并且提供參考時鐘;提供Graph事件模塊,用于以消息的形式確保媒體模塊向應用程序通知事件。
      2.如權利要求1所述的移動視頻監(jiān)控系統(tǒng)的媒體模塊,其特征在于所述過濾器管理器中,在輸出Pin上調用Connect,如果輸出Pin接受連接,則調用輸入Pin上的 ReceiveConnection,如果輸入Pin也接受這次連接,則表示雙方連接成功。
      全文摘要
      一種移動視頻監(jiān)控系統(tǒng)的媒體模塊,采用DirectShow框架作為多媒體軟件開發(fā)的框架,采用“推”模式作為數據傳輸的模式,采用ffmpeg decoder作為H.264視頻解碼器;DirectShow框架包括源過濾器;變換過濾器,用于負責視頻的處理,對H.264編碼數據的解碼,然后提交到下一級過濾器中;渲染過濾器,用于負責視頻在面板上的渲染播放和音頻的播放,將解碼后的音視頻信息提交到顯卡或聲卡中處理;過濾器管理器,用于負責過濾器的管理,同時向應用程序提供Filter管理接口,并且提供參考時鐘;提供Graph事件模塊,用于以消息的形式確保媒體模塊向應用程序通知事件。本發(fā)明具有較好的擴展性能、縮短開發(fā)周期、提高系統(tǒng)的開發(fā)效率。
      文檔編號H04N7/18GK102377985SQ20101025096
      公開日2012年3月14日 申請日期2010年8月7日 優(yōu)先權日2010年8月7日
      發(fā)明者孟利民, 王學智, 陶水娟 申請人:杭州普諾科技有限公司, 浙江工業(yè)大學
      網友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1