在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      EEPW首頁 > 消費電子 > 設計應用 > 基于DirectShow的MPEG-4視頻傳輸系統(tǒng)的研究與實現(xiàn)

      基于DirectShow的MPEG-4視頻傳輸系統(tǒng)的研究與實現(xiàn)

      作者: 時間:2009-03-24 來源:網(wǎng)絡 收藏

      接收端的思路如下:通過一個接收Filter接收發(fā)送端發(fā)送的數(shù)據(jù),然后再用Divx Decoder Filter對接收到的數(shù)據(jù)進行解碼。最后用Video Renderer把解碼后的數(shù)據(jù)播放出來。其Filter Graph如圖2所示:

      本文引用地址:http://www.biyoush.com/article/167017.htm


      圖2 接收端的Filter Graph
      3.1 數(shù)據(jù)采集及編碼的
      3.1.1 采集Filter Graph的
      采集應用的Filter Graph一般比較復雜,而直接使用Filter Graph Manager上的IGraphBuilder接口構建這種Filter Graph,有時候難度又很大。為此,特別提供了一個輔助組件Capture Graph Builder,來簡化這種Filter Graph的創(chuàng)建。
      首先是創(chuàng)建Filter Graph Manager 組件,核心代碼如下:

      3.1.2 加入采集Filter

      3.1.3加入編碼器Filter
      這里我們采用Divx 提供的開源編碼Filter。安裝DivX.Pro.v5.1.1后會自動安裝Divx的編碼器Filter和解碼器Filter(注:解碼器Filter在接收端要用到)。在程序中加入Divx的編碼器Filter,實現(xiàn)思想是在Video Compressors目錄下枚舉到名稱為DivX Pro(tm) 5.1.1 Codec的Filter項后,把它加入到Filter Graph中即可。
      3.2 數(shù)據(jù)的發(fā)送和接收
      3.2.1 數(shù)據(jù)的發(fā)送Filter的實現(xiàn)
      數(shù)據(jù)的發(fā)送要開發(fā)一個發(fā)送Filter,為了編程上的方便,這里采用程序內(nèi)Filter的形式來實現(xiàn)。即用類的形式而不是編寫一個成一個后綴為ax的組件注冊后再使用。這里我們定義一個繼承自CBaseFilter的類CFilterMpeg4Sender。這個類必須實現(xiàn)以下功能[3]:
      (1) 在類中定義CFilterMpeg4Sender上的Pin的實例mInputPin。
      (2) 實現(xiàn)繼承自CBaseFilter::GetPin,用于返回Filter上各個Pin的對象指針。
      (3) 實現(xiàn)繼承自CBaseFilter::GetPin,用于返回Filter上各個Pin的數(shù)量。
      定義一個繼承自CRenderedInputPin的類CMpeg4InputPin,用于實現(xiàn)CFilterMpeg4Sender上的輸入pin,發(fā)送Filter通過該輸入pin接收編碼Filter輸出的數(shù)據(jù),然后按一定的規(guī)則發(fā)送。
      這個類必須實現(xiàn)以下功能[2]:
      (1) 重寫方法EndOfStream。
      (2) 實現(xiàn)IPin::BeginFlush和IPin::EndFlush兩個函數(shù)。
      (3) 重寫方法CBasePin::CheckMediaType進行連接時媒體類型的檢查。
      (4) 重寫方法CBasePin:: Receive(),接收Sample并發(fā)送
      3.2.2 數(shù)據(jù)的接收Filter的實現(xiàn)
      數(shù)據(jù)的接收其實是要編寫一個Source Filter, 這個Source Filter名稱為CFilterMpeg4Receiver,也繼承自CBaseFilter。這跟發(fā)送Filter的實現(xiàn)有些類似,有一點需要注意的是該Filter輸出的MediaType的設置。
      Char MediaType[]=//媒體數(shù)據(jù)類型,通過在發(fā)送端把媒體類型寫到一個文件中而得到然后通過語句:CFilterMpeg4Receiver::SetupMediaType((char *)MediaType,88)設置輸出數(shù)據(jù)的MediaType。
      CFilterMpeg4Receiver::SetupMediaType再調(diào)用CMpeg4OutPin::SetupMediaType()設置、接收到的媒體數(shù)據(jù)的格式,
      3.2.3 數(shù)據(jù)的網(wǎng)絡傳輸?shù)膶崿F(xiàn)


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



      評論


      相關推薦

      技術專區(qū)

      關閉