日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

H.264流媒體播放器設(shè)計和實現(xiàn)

出處:程少煉,陳 林 武漢科技大學(xué) 發(fā)布于:2011-09-04 08:58:01

  摘要:基于目前的視頻壓縮編解碼標(biāo)準(zhǔn)H.264,采用Directshow應(yīng)用框架,設(shè)計了網(wǎng)絡(luò)流媒體播放器系統(tǒng);Directshow是微軟提供的基于windows平臺的的流媒體應(yīng)用架構(gòu),H.264標(biāo)準(zhǔn)具有高壓縮比和優(yōu)良的網(wǎng)絡(luò)親和性,基于Directshow和H.264設(shè)計的網(wǎng)絡(luò)流媒體播放器不僅具有優(yōu)良的系統(tǒng)架構(gòu),同時具有更好的靈活性和可擴展性,可以很方便地應(yīng)用于視頻點播系統(tǒng)(Video On Demand System)中和移植到嵌入式WINCE平臺。基于Direotshow分析和設(shè)計了網(wǎng)絡(luò)源Filter和H.264解碼Filter,同時闡述了網(wǎng)絡(luò)流媒體播放器系統(tǒng)的整體框架。

  0 引言

  Directshow應(yīng)用框架完成了流媒體處理的底層工作,使得編程者無需關(guān)心數(shù)據(jù)如何輸入,以及處理完后如何輸出,而只需關(guān)心如何對輸入數(shù)據(jù)進行處理。H.264視頻編解碼標(biāo)準(zhǔn)具有高壓縮比和優(yōu)良的網(wǎng)絡(luò)親和性,被普遍認(rèn)為是有影響力的流媒體視頻壓縮標(biāo)準(zhǔn)。將Direct-show和H.264兩種相結(jié)合的流媒體播放器無疑將具有非常的性能。

  1 Directshow技術(shù)和H.264視頻壓縮標(biāo)準(zhǔn)簡介

  Directshow是微軟公司提供的一套流媒體開發(fā)軟件包,為在windows平臺上處理各種格式的媒體文件的回放、音視頻采集的高性能要求的多媒體應(yīng)用,提供了完整的解決方案。

  DirectShow是微軟公司在ActiveMovie和Video for Windows的基礎(chǔ)上推出的新一代基于COM(Component Object Model)的流媒體處理的開發(fā)包,與DirectX開發(fā)包一起發(fā)布。DirectShow使用一種叫Filter Graph的模型來管理整個數(shù)據(jù)流的處理過程,運用DirectShow,我們可以很方便地從支持WDM驅(qū)動模型的采集卡上捕獲數(shù)據(jù),它廣泛地支持各種媒體格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等,為多媒體流的捕捉和回放提供了強有力的支持。

  DirectShow使用一種叫Filter Graph的模型來管理整個數(shù)據(jù)流的處理過程;參與數(shù)據(jù)處理的各個功能模塊叫做Filter;各個Filter在Filter Graph中按一定的順序連接成一條“流水線”協(xié)同工作。大家可以看到,按照功能來分,F(xiàn)ilter大致分為三類:Source Filters、Transform Filters和Rendering Filters。Source Filters主要負(fù)責(zé)取得數(shù)據(jù),數(shù)據(jù)源可以是文件、因特網(wǎng)、或者計算機里的采集卡、數(shù)字攝像機等,然后將數(shù)據(jù)往下傳輸;Transform Fitlers主要負(fù)責(zé)數(shù)據(jù)的格式轉(zhuǎn)換、傳輸;Rendering Filtes主要負(fù)責(zé)數(shù)據(jù)的終去向,我們可以將數(shù)據(jù)送給聲卡、顯卡進行多媒體的演示,也可以輸出到文件進行存儲。值得注意的是,三個部分并不是都只有一個Filter去完成功能。恰恰相反,每個部分往往是有幾個Fitler協(xié)同工作的。比如,Transform Filters可能包含了一個Mpeg的解碼Filter、以及視頻色彩空間的轉(zhuǎn)換Filter、音頻采樣頻率轉(zhuǎn)換Filter等等。除了系統(tǒng)提供的大量Filter外,我們可以定制自己的Filter,以完成我們需要的功能。

  Directshow是一套完全基于COM的應(yīng)用系統(tǒng),該系統(tǒng)位于應(yīng)用層中,它使用Filter Graph的模型來管理整個數(shù)據(jù)流的處理過程;參與數(shù)據(jù)處理的各個功能模塊叫Filter;各個Filter在Filter Graph中按照一定的順序連接成一條“流水線”協(xié)同工作。Filter是一個COM組件,其功能可以由用戶自行實現(xiàn),DirectShow SDK也為用戶提供了一些標(biāo)準(zhǔn)的Filter供用戶使用。各個Filter在Filter Graph中按一定順序通過Pin互相連接起來,Pin也是一個COM對象。

  H.264,同時也是MPEG-4第十部分,是由ITU-T視頻編碼組(VCEG)和ISO/IEC動態(tài)圖像組(MPEG)聯(lián)合組成的聯(lián)合視頻組(JVT,Joint Video Team)提出的高度壓縮數(shù)字視頻編解碼器標(biāo)準(zhǔn)。

  H.264是由ITU-T和ISO/IEC的聯(lián)合開發(fā)組共同開發(fā)的國際視頻編碼標(biāo)準(zhǔn)。H.264/AVC視頻編碼標(biāo)準(zhǔn)在編碼質(zhì)量和壓縮比上比原有的視頻編碼標(biāo)準(zhǔn)都有了明顯的提高。在相同的視覺感知質(zhì)量上,編碼效率比H.263,MPEG-2和MPEG-4提高了50%左右。H.264不僅具有優(yōu)異的壓縮性能,而且具有良好的網(wǎng)絡(luò)親和性。因此,H.264被普遍認(rèn)為是有影響力的流媒體視頻壓縮標(biāo)準(zhǔn)。

  H.264是一種高性能的視頻編解碼技術(shù)。目前國際上制定視頻編解碼技術(shù)的組織有兩個,一個是“國際電聯(lián)(ITU-T)”,它制定的標(biāo)準(zhǔn)有H.261、H.263、H.263+等,另一個是“國際標(biāo)準(zhǔn)化組織(ISO)”它制定的標(biāo)準(zhǔn)有MPEG-1、MPEG-2、MPEG-4等。而H.264則是由兩個組織聯(lián)合組建的聯(lián)合視頻組(JVT)共同制定的新數(shù)字視頻編碼標(biāo)準(zhǔn),所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4視頻編碼(Advanced Video Coding,AVC),而且它將成為MPEG-4標(biāo)準(zhǔn)的第10部分。因此,不論是MPEG-4 AVC、MPEG-4 Part 10,還是ISO/IEC 14496-10,都是指H.264。

  H.264的優(yōu)勢是具有很高的數(shù)據(jù)壓縮比率,在同等圖像質(zhì)量的條件下,H.264的壓縮比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。舉個例子,原始文件的大小如果為88GB,采用MPEG-2壓縮標(biāo)準(zhǔn)壓縮后變成3.5GB,壓縮比為25∶1,而采用H.264壓縮標(biāo)準(zhǔn)壓縮后變?yōu)?79MB,從88GB到879MB,H.264的壓縮比達到驚人的102∶1!H.264為什么有那么高的壓縮比?低碼率(Low Bit Rate)起了重要的作用,和MPEG-2和MPEG-4 ASP等壓縮技術(shù)相比,H.264壓縮技術(shù)將大大節(jié)省用戶的時間和數(shù)據(jù)流量收費。尤其值得一提的是,H.264在具有高壓縮比的同時還擁有高質(zhì)量流暢的圖像,正因為如此,經(jīng)過H.264壓縮的視頻數(shù)據(jù),在網(wǎng)絡(luò)傳輸過程中所需要的帶寬更少,也更加經(jīng)濟。

  2 系統(tǒng)設(shè)計框架

  本系統(tǒng)基于Direotshow應(yīng)用框架和H.264視頻壓縮標(biāo)準(zhǔn),實現(xiàn)了從網(wǎng)絡(luò)接收流媒體數(shù)據(jù),并在客戶端實時播放的功能。流媒體文件是采用H.264編碼的AVI文件,由于directshow提供了AVI Splitter Filter、Audio Decoder和標(biāo)準(zhǔn)的Video/Audio Renderer,因此,本系統(tǒng)只需設(shè)計自定義的網(wǎng)絡(luò)源Filter、H.264解碼Filter。

  多媒體流式傳輸實際上牽涉到兩個方面的技術(shù)。其一就是服務(wù)器與客戶端的通信技術(shù),包括多媒體數(shù)據(jù)的傳輸、命令控制等;其二就是客戶端對接收到的多媒體流實時解碼后播放的技術(shù)。顯然,網(wǎng)絡(luò)通信可以使用windows socket技術(shù),多媒體流的解碼播放可以使用direct-show技術(shù)。本文采用direetshow應(yīng)用框架,設(shè)計了網(wǎng)絡(luò)源filter和h.264解碼filter,并通過Filter Graph構(gòu)建了流媒體播放器。

     播放本地基于H.264編碼的AVI文件的Filter Graph如圖1。只需將本地File Source Filter替換為網(wǎng)絡(luò)源Filter,將CoreAVC Video De-coder替換為h.264解碼Filter,即可實現(xiàn)網(wǎng)絡(luò)H.264視頻播放器。

a.JPG

  3 系統(tǒng)的設(shè)計與實現(xiàn)

  3.1 Filter設(shè)計流程

    Filter 技術(shù)是servlet 2.3 新增加的功能。servlet2.3是sun公司于2000年10月發(fā)布的,它的開發(fā)者包括許多個人和公司團體,充分體現(xiàn)了sun公司所倡導(dǎo)的代碼開放性原則。在眾多參與者的共同努力下,servlet2.3比以往功能都強大了許多,而且性能也有了大幅提高。

  首先,要對Filter所要完成的功能和它在Filter Graph中的位置進行分析,以確定filter模型,選擇一個合適的基類;然后,再定義輸入輸出PIN以及自定義接口,注冊Filter信息;實現(xiàn)基類的全部純虛函數(shù)和自定義接口函數(shù),并重寫基類的相關(guān)函數(shù)以定制filter功能。

  3.2 網(wǎng)絡(luò)源Filter的設(shè)計

  源Filter主要功能是接收服務(wù)器發(fā)來的流媒體數(shù)據(jù),并提供給Filter Graph中其它Filter使用。

  本源Filter采用雙緩沖循環(huán)隊列技術(shù)來實現(xiàn)數(shù)據(jù)的接收和向下Filter傳遞數(shù)據(jù)。采用該技術(shù)有如下理由:

  (1)在Source Filter與SpliRer連接的過程中,會從Source Filter中讀取一部分?jǐn)?shù)據(jù),以獲得數(shù)據(jù)的格式描述,否則Filter Graph無法完成連接。源Filter與Splitter Filter進行連接前,應(yīng)啟動一個等待線程,當(dāng)Source Filter的數(shù)據(jù)緩存預(yù)先接收到足夠的數(shù)據(jù)后,再構(gòu)建完整的Filter Graph。

  (2)當(dāng)完整的Filter Graph構(gòu)建完成,并且處于運行狀態(tài)后,Source Filter必須動態(tài)地接收數(shù)據(jù),并持續(xù)地把新數(shù)據(jù)提供給Splitter Filter,雙緩沖循環(huán)隊列既充分利用內(nèi)存空間,又能為Splitter Filter提供穩(wěn)定的數(shù)據(jù)源。

  (3)緩沖隊列可以穩(wěn)定碼率,有效減小網(wǎng)絡(luò)延時、阻塞和抖動的影響。

  源Filter的工作過程如下:建立一個循環(huán)緩沖隊列,隊列尾指針用于緩沖從網(wǎng)絡(luò)接收的數(shù)據(jù),隊列頭指針供Splitter讀取數(shù)據(jù),進行音視頻分離,并傳給下Decoder處理;當(dāng)Socket接收到網(wǎng)絡(luò)數(shù)據(jù)后,將數(shù)據(jù)插入隊列尾部,并使尾指針后移;當(dāng)Splitter需要讀取數(shù)據(jù)時,從隊列頭讀取數(shù)據(jù),并使頭指針后移。

  流媒體傳輸采用客戶端/服務(wù)器的架構(gòu),服務(wù)器與客戶端之間還有一個Socket通信協(xié)議問題,由于流媒體是連續(xù)的,它的同步點不能隨意選擇,因此,為了傳送流媒體數(shù)據(jù),必須使用面向連接的可靠的傳輸協(xié)議(TCP)。客戶端與服務(wù)器端的控制與反饋消息,則可以使用(UDP)來傳輸。當(dāng)客戶端發(fā)出命令,服務(wù)器再根據(jù)命令的類型執(zhí)行相應(yīng)的操作,如數(shù)據(jù)發(fā)送、停止、斷開連接等。

  在服務(wù)器端首先將連續(xù)的H.264流分成一塊一塊小包的負(fù)載數(shù)據(jù),并且加上一個信息頭一起使用TCP協(xié)議發(fā)送;Socket數(shù)據(jù)傳送結(jié)構(gòu)為:負(fù)載類型(8 bit)、負(fù)載數(shù)據(jù)長度(16 bit)和負(fù)載數(shù)據(jù)包(2324Byte)。

  客戶端的實現(xiàn)可以參考SDK中的MEMFile Filter,直接從SDK例子將asyncrdr.cpp、asyncrdr.h、asyncio.cpp、asyneio.h四個文件拷貝過來,然后在MemFilter.h文件中從CAsyncStream派生流處理類CMemStream,定制數(shù)據(jù)源并進行數(shù)據(jù)的讀取操作;從CAsyncReader派生濾波器類CMemReader,實現(xiàn)含1個輸出PIN的Source Filter框架,完成與Splitter Filter的連接。

  網(wǎng)絡(luò)源濾波器類間數(shù)據(jù)流程如圖2,下Filter“拉”線程數(shù)據(jù)流程如圖3。其中:CAsyneStream用以標(biāo)示數(shù)據(jù)流;CAsyneRequest標(biāo)示輸入與輸出請求;CAsyncIo實現(xiàn)數(shù)據(jù)輸入和輸出的控制。編程主要實現(xiàn)CMemStream:Read()函數(shù)以實現(xiàn)從特定的數(shù)據(jù)源讀取數(shù)據(jù)到下Filter的Sample中。

b.JPG

  3.3 H.264解碼Filter的設(shè)計

    其中重要的就是filter功能.它使用戶可以改變一個request和修改一個response. Filter 不是一個servlet,它不能產(chǎn)生一個response,它能夠在一個request到達servlet之前預(yù)處理request,也可以在response離開servlet時處理response.換種說法,filter其實是一個“servlet chaining“(servlet 鏈).

  該濾波器工作于Splitter和Renderer filter之間,包含一個輸入和一個輸出,且輸入和輸出pin上的媒體類型不一致,故選擇CTrans-form Filter作為基類,派生子類CX264Decode。

  子類CX264Decode必須要實現(xiàn)的純虛函數(shù)有:CheckInputType()實現(xiàn)輸入Pin上的媒體類型檢查;CheckTransform()檢查是否支持從該輸入pin到輸出pin的變換操作;DecideBufferSize()決定Samlple內(nèi)存的大小;GetMediaType():提供輸出Pin上的媒體類型;Transform():實現(xiàn)解碼變換。

  子類CX264Decode可選的重寫虛函數(shù)有:初始化和反初始化流:StartStreaming()和StopStreaming();響應(yīng)質(zhì)量通告消息:AlterQuali-ty();獲取媒體類型被實際設(shè)置的時間:SetMediaType();連接時獲取額外的接口:CheckConnect()、BreakConnect()和CompleteConneet();定制變換過程:Receive();標(biāo)準(zhǔn)化設(shè)置輸出Sample:InitializeOutputSample()。

  本Filter設(shè)計主要流程如下:

  (1)Filter注冊信息

  定義類工廠模板,填寫Filter的注冊信息;同時實現(xiàn)DLL文件所必須實現(xiàn)的注冊和反注冊函數(shù):DLLRegisterServer和DLLUnregisterSe-rver。

  (2)框架函數(shù)的實現(xiàn)

  實現(xiàn)函數(shù)CreateInstanee,用于創(chuàng)建Filter對象實例;實現(xiàn)函數(shù)CheeklnputType,用于對輸入Pin上的媒體類型檢查;實現(xiàn)函數(shù)Transfo-rm,用于H.264的解碼操作;實現(xiàn)函數(shù)NonDelegafingQueryIntefface,用于暴露Filter支持的自定義接口,使應(yīng)用程序可以設(shè)置解碼器的參數(shù);實現(xiàn)函數(shù)CompleteConnect,可以在輸入Pin成功連接后取得媒體類型描述,并將輸入數(shù)據(jù)的格式設(shè)置給應(yīng)用邏輯控制對象;實現(xiàn)函數(shù)St-artStreaming和StopStreaming,可以分別調(diào)用應(yīng)用控制邏輯對象的相應(yīng)函數(shù),進行流處理的初始化和反初始化操作。

  (3)邏輯控制類的實現(xiàn)

  利用ffmpeg庫進行H.264解碼時,需要自定義兩個關(guān)鍵函數(shù):open_net_file()和read_buffer_frame()。其中,open_net_file()函數(shù)完成與流媒體服務(wù)器的連接,接收指定流媒體文件的流相關(guān)信息,并返回類型為AVFormatContext結(jié)構(gòu)體的值。read_buffer_frame()函數(shù)從bu-ffer緩沖中讀取一幀數(shù)據(jù),并交由庫函數(shù)avcodec_decode_video()解碼。

  (4)自定義接口的實現(xiàn)

  將Filter類從自定義接口類派生,并聲明自定義接口的所有接口方法;然后在Filter類的實現(xiàn)文件中實現(xiàn)這些接口法,其實大都是調(diào)用應(yīng)用邏輯控制類的相應(yīng)函數(shù);在函數(shù)NonDelegatingQueryInterface中暴露我們的自定義接口。

  3.4 播放器的設(shè)計

  播放器采用Directshow應(yīng)用框架,采取界面、控制邏輯和數(shù)據(jù)分離的三層程序設(shè)計方法。界面類直接從標(biāo)準(zhǔn)的對話框類CDialog派生,在界面類中定義兩個自定義類:數(shù)據(jù)封裝類和邏輯控制類。界面類表達一種用戶操作邏輯;采取Directshow應(yīng)用框架,不必關(guān)心數(shù)據(jù)如何輸入和輸出,這些問題都由Filter框架負(fù)責(zé),只需更多的關(guān)注數(shù)據(jù)處理的算法實現(xiàn)、效率優(yōu)化等問題。采取界面、控制邏輯和數(shù)據(jù)分離的設(shè)計結(jié)構(gòu),不僅使程序框架清晰、容易被人理解,而且具有良好的移植性和擴展性。

  播放器基于Filter Graph Manager構(gòu)建包含網(wǎng)絡(luò)源Filter和H.264解碼Filter的Filter Graph,即可實現(xiàn)網(wǎng)絡(luò)流媒體的播放。界面類實現(xiàn)視頻顯示界面與用戶的操作交互,控制邏輯可以控制視頻的播放、暫停、停止、解碼參數(shù)設(shè)置等,數(shù)據(jù)類實現(xiàn)對數(shù)據(jù)的操作管理。

  4 結(jié)束語

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


  

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!