《電子技術應用》
您所在的位置:首頁 > 其他 > 設計應用 > 基于Directshow的H.264流媒體播放器設計
基于Directshow的H.264流媒體播放器設計
山西電子技術
程少煉,陳 林 武漢科技大學
摘要: 摘要:基于目前最新的視頻壓縮編解碼標準H.264,采用Directshow應用框架,設計了網絡流媒體播放器系統;Directshow是微軟提供的基于windows平臺的優秀的流媒體應用架構,H.264標準具有高壓縮比和優良的網絡親和性,
關鍵詞: 流媒體 播放器 H.264
Abstract:
Key words :

摘要:基于目前最新的視頻壓縮編解碼標準H.264,采用Directshow應用框架,設計了網絡流媒體播放器系統;Directshow是微軟提供的基于windows平臺的優秀的流媒體應用架構,H.264標準具有高壓縮比和優良的網絡親和性,基于Directshow和H.264設計的網絡流媒體播放器不僅具有優良的系統架構,同時具有更好的靈活性和可擴展性,可以很方便地應用于視頻點播系統(Video On Demand System)中和移植到嵌入式WINCE平臺?;贒ireotshow分析和設計了網絡源Filter和H.264解碼Filter,同時闡述了網絡流媒體播放器系統的整體框架。
關鍵詞:Directshow;H.264;Filter;流媒體

0 引言
    Directshow應用框架完成了流媒體處理的底層工作,使得編程者無需關心數據如何輸入,以及處理完后如何輸出,而只需關心如何對輸入數據進行處理。H.264視頻編解碼標準具有高壓縮比和優良的網絡親和性,被普遍認為是最有影響力的流媒體視頻壓縮標準。將Direct-show和H.264兩種相結合的流媒體播放器無疑將具有非常優秀的性能。

1 Directshow技術和H.264視頻壓縮標準簡介
    Directshow是微軟公司提供的一套流媒體開發軟件包,為在windows平臺上處理各種格式的媒體文件的回放、音視頻采集的高性能要求的多媒體應用,提供了完整的解決方案。
    Directshow是一套完全基于COM的應用系統,該系統位于應用層中,它使用Filter Graph的模型來管理整個數據流的處理過程;參與數據處理的各個功能模塊叫Filter;各個Filter在Filter Graph中按照一定的順序連接成一條“流水線”協同工作。Filter是一個COM組件,其功能可以由用戶自行實現,DirectShow SDK也為用戶提供了一些標準的Filter供用戶使用。各個Filter在Filter Graph中按一定順序通過Pin互相連接起來,Pin也是一個COM對象。
    H.264是由ITU-T和ISO/IEC的聯合開發組共同開發的最新國際視頻編碼標準。H.264/AVC視頻編碼標準在編碼質量和壓縮比上比原有的視頻編碼標準都有了明顯的提高。在相同的視覺感知質量上,編碼效率比H.263,MPEG-2和MPEG-4提高了50%左右。H.264不僅具有優異的壓縮性能,而且具有良好的網絡親和性。因此,H.264被普遍認為是最有影響力的流媒體視頻壓縮標準。

2 系統設計框架
    本系統基于Direotshow應用框架和H.264視頻壓縮標準,實現了從網絡接收流媒體數據,并在客戶端實時播放的功能。流媒體文件是采用H.264編碼的AVI文件,由于directshow提供了AVI Splitter Filter、Audio Decoder和標準的Video/Audio Renderer,因此,本系統只需設計自定義的網絡源Filter、H.264解碼Filter。
    多媒體流式傳輸實際上牽涉到兩個方面的技術。其一就是服務器與客戶端的通信技術,包括多媒體數據的傳輸、命令控制等;其二就是客戶端對接收到的多媒體流實時解碼后播放的技術。顯然,網絡通信可以使用windows socket技術,多媒體流的解碼播放可以使用direct-show技術。本文采用direetshow應用框架,設計了網絡源filter和h.264解碼filter,并通過Filter Graph構建了流媒體播放器。
    播放本地基于H.264編碼的AVI文件的Filter Graph如圖1。只需將本地File Source Filter替換為網絡源Filter,將CoreAVC Video De-coder替換為h.264解碼Filter,即可實現網絡H.264視頻播放器。

a.JPG

3 系統的設計與實現
3.1 Filter設計流程
    Filter的編碼實現包括Filter的注冊信息、Filter上的框架函數實現、邏輯控制類實現、自定義接口實現、屬性頁實現、產權保護等。
首先,要對Filter所要完成的功能和它在Filter Graph中的位置進行分析,以確定filter模型,選擇一個合適的基類;然后,再定義輸入輸出PIN以及自定義接口,注冊Filter信息;最后實現基類的全部純虛函數和自定義接口函數,并重寫基類的相關函數以定制filter功能。
3.2 網絡源Filter的設計
    源Filter主要功能是接收服務器發來的流媒體數據,并提供給Filter Graph中其它Filter使用。
    由于directshow自帶的AVI splitter工作于拉模式,故該源Filter也工作于拉模式。
    本源Filter采用雙緩沖循環隊列技術來實現數據的接收和向下一級Filter傳遞數據。采用該技術有如下理由:
    (1)在Source Filter與SpliRer連接的過程中,會從Source Filter中讀取一部分數據,以獲得數據的格式描述,否則Filter Graph無法完成連接。源Filter與Splitter Filter進行連接前,應啟動一個等待線程,當Source Filter的數據緩存預先接收到足夠的數據后,再構建完整的Filter Graph。
    (2)當完整的Filter Graph構建完成,并且處于運行狀態后,Source Filter必須動態地接收數據,并持續地把新數據提供給Splitter Filter,雙緩沖循環隊列既充分利用內存空間,又能為Splitter Filter提供穩定的數據源。
    (3)緩沖隊列可以穩定碼率,有效減小網絡延時、阻塞和抖動的影響。
    源Filter的工作過程如下:建立一個循環緩沖隊列,隊列尾指針用于緩沖從網絡接收的數據,隊列頭指針供Splitter讀取數據,進行音視頻分離,并傳給下一級Decoder處理;當Socket接收到網絡數據后,將數據插入隊列尾部,并使尾指針后移;當Splitter需要讀取數據時,從隊列頭讀取數據,并使頭指針后移。
    流媒體傳輸采用客戶端/服務器的架構,服務器與客戶端之間還有一個Socket通信協議問題,由于流媒體是連續的,它的同步點不能隨意選擇,因此,為了傳送流媒體數據,必須使用面向連接的可靠的傳輸協議(TCP)??蛻舳伺c服務器端的控制與反饋消息,則可以使用(UDP)來傳輸。服務器端首先創建一個偵聽Socket,偵聽來自客戶端的連接請求。一旦偵聽到客戶端的請求,服務器端就創建一個用于數據傳送的Socket,并綁定到請求連接的客戶端,此時,服務器處于數據傳送的就緒狀態。當客戶端發出命令,服務器再根據命令的類型執行相應的操作,如數據發送、停止、斷開連接等。
    在服務器端首先將連續的H.264流分成一塊一塊小包的負載數據,并且加上一個信息頭一起使用TCP協議發送;在客戶端根據信息頭描述,將小包的負載數據進行拼裝,然后進行H.264的解碼播放。Socket數據傳送結構為:負載類型(8 bit)、負載數據長度(16 bit)和負載數據包(2324Byte)。
    客戶端的實現可以參考SDK中的MEMFile Filter,直接從SDK例子將asyncrdr.cpp、asyncrdr.h、asyncio.cpp、asyneio.h四個文件拷貝過來,然后在MemFilter.h文件中從CAsyncStream派生流處理類CMemStream,定制數據源并進行數據的讀取操作;從CAsyncReader派生濾波器類CMemReader,實現含1個輸出PIN的Source Filter框架,完成與Splitter Filter的連接。
    網絡源濾波器類間數據流程如圖2,下一級Filter“拉”線程數據流程如圖3。其中:CAsyneStream用以標示數據流;CAsyneRequest標示輸入與輸出請求;CAsyncIo實現數據輸入和輸出的控制。編程主要實現CMemStream:Read()函數以實現從特定的數據源讀取數據到下一級Filter的Sample中。

b.JPG
3.3 H.264解碼Filter的設計
    該濾波器工作于Splitter和Renderer filter之間,包含一個輸入和一個輸出,且輸入和輸出pin上的媒體類型不一致,故選擇CTrans-form Filter作為基類,派生子類CX264Decode。
    ffmpeg是一個集錄制、轉換、音/視頻編碼解碼功能為一體的完整的開源解決方案。利用ffmpeg中的Libavformat和libavcodec庫訪問大多數視頻文件格式是一個很好的方法。將ffmpeg中關于h.264解碼的操作封裝為C++類,供H.264解碼Filter調用以實現解碼功能。
    子類CX264Decode必須要實現的純虛函數有:CheckInputType()實現輸入Pin上的媒體類型檢查;CheckTransform()檢查是否支持從該輸入pin到輸出pin的變換操作;DecideBufferSize()決定Samlple內存的大?。籊etMediaType():提供輸出Pin上的首選媒體類型;Transform():實現解碼變換。
    子類CX264Decode可選的重寫虛函數有:初始化和反初始化流:StartStreaming()和StopStreaming();響應質量通告消息:AlterQuali-ty();獲取媒體類型被實際設置的時間:SetMediaType();連接時獲取額外的接口:CheckConnect()、BreakConnect()和CompleteConneet();定制變換過程:Receive();標準化設置輸出Sample:InitializeOutputSample()。
    本Filter設計主要流程如下:
    (1)Filter注冊信息
    定義類工廠模板,填寫Filter的注冊信息;同時實現DLL文件所必須實現的注冊和反注冊函數:DLLRegisterServer和DLLUnregisterSe-rver。
    (2)框架函數的實現
    實現函數CreateInstanee,用于創建Filter對象實例;實現函數CheeklnputType,用于對輸入Pin上的媒體類型檢查;實現函數Transfo-rm,用于H.264的解碼操作;實現函數NonDelegafingQueryIntefface,用于暴露Filter支持的自定義接口,使應用程序可以設置解碼器的參數;實現函數CompleteConnect,可以在輸入Pin成功連接后取得媒體類型描述,并將輸入數據的格式設置給應用邏輯控制對象;實現函數St-artStreaming和StopStreaming,可以分別調用應用控制邏輯對象的相應函數,進行流處理的初始化和反初始化操作。
    (3)邏輯控制類的實現
    邏輯控制類是本Filter設計的核心,框架函數和自定義接口函數的相關操作都是委托給邏輯控制類來實現的。該類實現了H.264.的解碼參數的設置與解碼操作,主要調用封裝了H.264解碼的C++類來實現。
    利用ffmpeg庫進行H.264解碼時,需要自定義兩個關鍵函數:open_net_file()和read_buffer_frame()。其中,open_net_file()函數完成與流媒體服務器的連接,接收指定流媒體文件的流相關信息,并返回類型為AVFormatContext結構體的值。read_buffer_frame()函數從bu-ffer緩沖中讀取一幀數據,并交由庫函數avcodec_decode_video()解碼。
    (4)自定義接口的實現
    將Filter類從自定義接口類派生,并聲明自定義接口的所有接口方法;然后在Filter類的實現文件中實現這些接口法,其實大都是調用應用邏輯控制類的相應函數;最后在函數NonDelegatingQueryInterface中暴露我們的自定義接口。
3.4 播放器的設計
    播放器采用Directshow應用框架,采取界面、控制邏輯和數據分離的三層程序設計方法。界面類直接從標準的對話框類CDialog派生,在界面類中定義兩個自定義類:數據封裝類和邏輯控制類。界面類表達一種用戶操作邏輯;數據封裝類集中管理各種參數;邏輯控制類具體實現業務應用邏輯。采取Directshow應用框架,不必關心數據如何輸入和輸出,這些問題都由Filter框架負責,只需更多的關注數據處理的算法實現、效率優化等問題。采取界面、控制邏輯和數據分離的設計結構,不僅使程序框架清晰、容易被人理解,而且具有良好的移植性和擴展性。
    播放器基于Filter Graph Manager構建包含網絡源Filter和H.264解碼Filter的Filter Graph,即可實現網絡流媒體的播放。界面類實現視頻顯示界面與用戶的操作交互,控制邏輯可以控制視頻的播放、暫停、停止、解碼參數設置等,數據類實現對數據的操作管理。

4 結束語
   本流媒體播放器系統采用了Directshow應用框架和H.264視頻編解碼標準,能很好的實現網絡流媒體視頻的播放,具有結構清晰、良好的可擴展性與可移植性。由于WINCE系統是微軟提供的嵌入式實時操作系統,提供了對Directshow的應用支持,故本系統也可以很好的移植到win-ce的嵌入式應用平臺,實現嵌入式端的流媒體視頻播放。同時,本流媒體播放系統也可很好地移植到視頻點播系統中,因其采用高壓縮比、低碼率的H.264視頻編解碼標準。能有效減少網絡負載、減小帶寬,從而減輕網絡對流媒體傳輸中所存在的丟包、抖動、延時等影響。
 

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          午夜精品久久久久久久99热浪潮| 国产精品久久久久久福利一牛影视| 欧美一区二区国产| 亚洲精品乱码久久久久久| 国产精品福利在线观看网址| 韩国在线视频一区| 国产欧美一区二区三区久久人妖| 欧美性大战久久久久久久| 亚洲国产免费看| 91久久久久| 欧美黄色大片网站| 国产精品一区一区三区| 欧美三级午夜理伦三级中视频| 亚洲日本精品国产第一区| 国产精品自在在线| 亚洲日韩欧美视频一区| 亚洲激情视频在线观看| 久久久久中文| 在线观看欧美亚洲| 欧美日本高清一区| 国产一区二区三区网站| 国内精品国语自产拍在线观看| 一区二区三区日韩精品视频| 国产亚洲精品成人av久久ww| 国产精品国产三级国产普通话99| 美女在线一区二区| 亚洲视频在线一区观看| 欧美日韩视频一区二区三区| 亚洲影院一区| 欧美三级在线播放| 中日韩美女免费视频网站在线观看| 在线观看三级视频欧美| 久久亚洲欧美国产精品乐播| 国产精品日韩一区| 国产精品v日韩精品| 欧美一区二区三区免费观看视频| 国产情侣一区| 国内免费精品永久在线视频| 久久久国产视频91| 久久九九电影| 一本色道综合亚洲| 国产女主播一区二区三区| 韩国v欧美v日本v亚洲v| 国产日产亚洲精品| 一区二区免费看| 欧美三级网址| 欧美一区二区三区男人的天堂| 国产片一区二区| 一区二区国产在线观看| 欧美成人激情在线| 欧美一区二区观看视频| 国产精品亚洲аv天堂网| 久久人人爽爽爽人久久久| 国产永久精品大片wwwapp| 亚洲国产日韩欧美| 欧美日韩一区二区三区在线视频| 亚洲国产天堂网精品网站| 欧美日韩色综合| 国产精品一区二区男女羞羞无遮挡| 韩国女主播一区| 欧美午夜精品一区| 亚洲欧美日韩综合国产aⅴ| 国内一区二区三区| 亚洲乱码国产乱码精品精天堂| 在线亚洲伦理| 欧美色图一区二区三区| 国产三级欧美三级日产三级99| 欧美资源在线| 国产精品扒开腿做爽爽爽视频| 狠狠色综合日日| 国产亚洲va综合人人澡精品| 国产精品女主播一区二区三区| 黄色一区三区| 国产精品夜色7777狼人| 久久国产精品久久w女人spa| 国产精品网红福利| 国产欧美日本一区二区三区| 性xx色xx综合久久久xx| 开心色5月久久精品| 国产亚洲欧美一级| 久久夜色撩人精品| 日韩视频精品在线观看| 欧美午夜久久久| 欧美一区二区三区婷婷月色| 国产欧美短视频| 亚洲人成网站在线观看播放| 欧美日韩国产综合久久| 国产精品福利影院| 亚洲精品久久久一区二区三区| 亚洲国产精品专区久久| 毛片一区二区| 久久精品系列| 国产视频一区在线观看一区免费| 在线中文字幕不卡| 日韩一区二区精品在线观看| 亚洲午夜精品网| 欧美日韩一区二区在线视频| 亚洲国产精品久久久久秋霞不卡| 在线观看精品一区| 欧美专区中文字幕| 国产精品网曝门| 欧美大成色www永久网站婷| 亚洲欧美日韩在线| 精品av久久久久电影| 国产欧美精品一区二区三区介绍| 999在线观看精品免费不卡网站| 国产欧美短视频| 欧美紧缚bdsm在线视频| 亚洲乱亚洲高清| 亚洲免费观看高清完整版在线观看熊| 欧美激情一区二区三区在线视频| 曰韩精品一区二区| 激情欧美亚洲| 亚洲欧美电影在线观看| 亚洲国产精品电影| 欧美激情一区在线| 在线亚洲激情| 在线精品国产欧美| 欧美中在线观看| 国产自产2019最新不卡| 娇妻被交换粗又大又硬视频欧美| 在线亚洲观看| 亚洲欧美久久久久一区二区三区| 亚洲欧美日韩一区二区在线| 亚洲午夜av电影| 乱码第一页成人| 国产麻豆91精品| 亚洲品质自拍| 欧美色视频日本高清在线观看| 亚洲男人第一av网站| 欧美午夜视频在线观看| 欧美乱大交xxxxx| 一本色道久久综合亚洲精品按摩| 国产精品magnet| 欧美日韩精品在线观看| 欧美日韩一区二区在线视频| 亚洲专区国产精品| 国产欧美精品va在线观看| 欧美xxx成人| 久久成人精品无人区| 欧美激情综合色综合啪啪| 欧美精品大片| 在线成人性视频| 欧美中文在线观看国产| 国产精品久久久久久久久久久久| 亚洲国产一二三| 西西人体一区二区| 香蕉久久夜色精品国产| 午夜亚洲影视| 欧美精品福利在线| 欧美高潮视频| 玖玖综合伊人| 欧美黄色免费网站| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久影视精品| 精品96久久久久久中文字幕无| 欧美精品18videos性欧美| 欧美成人福利视频| 一本综合精品| 欧美色视频日本高清在线观看| 欧美日韩国产一区二区三区| 中国女人久久久| 国产精品美女久久久久aⅴ国产馆| 国产视频在线观看一区| 久久国产精品免费一区| 欧美成人按摩| 日韩视频免费看| 欧美日本一区二区视频在线观看| 国产精品免费观看视频| 麻豆成人在线播放| 黄页网站一区| 国产一区二区三区在线观看网站| 欧美日韩亚洲国产精品| 欧美日韩在线电影| 91久久精品日日躁夜夜躁欧美| 国产精品久久久久久久久久久久久久| 欧美午夜视频一区二区| 伊人久久大香线蕉av超碰演员| 欧美一区二区高清| 欧美久久婷婷综合色| 国产精品丝袜白浆摸在线| 亚洲黄色有码视频| 欧美在线观看你懂的| 欧美国产极速在线| 香蕉精品999视频一区二区| 国产精品一二| 国产精品久久7| 久久精品一本| 国产精品久久久久久久午夜| 国产精品激情偷乱一区二区∴| 欧美在线电影| a91a精品视频在线观看| 国产精品视频免费| 国产资源精品在线观看| 国产日产亚洲精品| 一区二区冒白浆视频| 日韩特黄影片| 欧美在线一级视频| 久久久久久久久伊人| 久久理论片午夜琪琪电影网| 欧美三级韩国三级日本三斤| 午夜精品一区二区三区在线播放| 一区二区三区日韩欧美精品| 中文国产亚洲喷潮| 一区二区三区在线免费播放| 国产精品久久影院| 欧美日韩免费在线观看| 久久国产直播| 久久久噜噜噜久噜久久| 国内精品免费在线观看| 欧美日韩综合视频网址| 午夜精品久久久久久久久久久久| 国产精品亚洲成人| 久久久www| 亚洲免费在线| 亚洲一区三区电影在线观看| 欧美视频中文字幕| 美女网站在线免费欧美精品| 樱桃成人精品视频在线播放| 国产专区欧美精品| 久久精品视频99| 亚洲一级二级在线| 在线观看免费视频综合| 国产在线观看91精品一区| 一区二区不卡在线视频 午夜欧美不卡'| 卡一卡二国产精品| 狂野欧美性猛交xxxx巴西| 久久久综合香蕉尹人综合网| 亚洲精品日韩在线| 一区二区三区回区在观看免费视频| 精品99一区二区三区| 韩国欧美国产1区| 国产无遮挡一区二区三区毛片日本| 在线日本欧美| 国产精品黄视频| 国产日韩在线一区| 欧美日韩国产一区二区三区地区| 在线免费高清一区二区三区| 欧美亚洲一区三区| 久热爱精品视频线路一| 久久精品72免费观看| 亚洲欧美在线高清| 久久久久se| 国产一区美女| 国产午夜精品一区二区三区欧美| 亚洲精品免费看| 亚洲精品国产精品国自产观看| 亚洲欧洲午夜| 久久综合亚州| 另类专区欧美制服同性| 欧美一区二区三区在线观看| 欧美一区激情| 亚洲精品视频在线| 1204国产成人精品视频| 国产精品久久久久一区二区| 亚洲高清在线视频| 欧美日韩无遮挡| 国产精品男gay被猛男狂揉视频| 亚洲第一福利在线观看| 一区二区不卡在线视频 午夜欧美不卡'| 欧美jizz19hd性欧美| 亚洲国产成人久久综合| 亚洲精品免费在线| 一区二区三区在线视频播放| 极品日韩久久| 国产日本欧美一区二区| 黄色免费成人| 一本色道久久综合亚洲精品不| 久久一本综合频道| 精品成人a区在线观看| 99re6热在线精品视频播放速度| 久久亚洲精品一区二区| 国产精品久久久久久久9999| 欧美日本三区| 午夜精品网站| 国产自产高清不卡| 一区二区三区波多野结衣在线观看| 欧美日韩在线三区| 亚洲精品国产精品国自产观看| 欧美在线免费观看亚洲| 久久精品日韩一区二区三区| 亚洲国产你懂的| 欧美午夜不卡| 国产精品三区www17con| 国产欧美一区二区三区在线老狼| 欧美三级视频在线播放| 国产精品久久国产精麻豆99网站| 久久精品日产第一区二区| 久久久精品免费视频| 免费黄网站欧美| 午夜精品福利在线| 欧美激情网友自拍| 在线观看欧美激情| 久久视频免费观看| 牛夜精品久久久久久久99黑人| 久久综合伊人77777尤物| 欧美日韩美女一区二区| 国产精品大片wwwwww| 亚洲免费观看| 99av国产精品欲麻豆| 国产亚洲精品美女| 中日韩男男gay无套| 精品99一区二区三区| 欧美日韩亚洲一区二区三区在线| 国内久久精品视频| 久久国产加勒比精品无码| 国产欧美日韩视频一区二区| 国产精品一区在线观看| 亚洲欧美日产图| 国产精品视区| 久久中文字幕一区二区三区| 欧美激情久久久| 亚洲国产高清视频| 久久久久久久激情视频| 亚洲日本中文字幕| 夜夜嗨网站十八久久| 欧美一区在线看| 欧美成年人视频网站欧美| 欧美日韩综合在线免费观看| 亚洲欧美在线播放| 欧美全黄视频| 欧美专区日韩视频| 欧美不卡视频| 国产色视频一区| 亚洲国产精品99久久久久久久久| 亚洲精品国产日韩| 久久综合久久综合九色| 在线成人激情视频|