新聞中心

        EEPW首頁 > 消費電子 > 設(shè)計應(yīng)用 > 基于Directshow的H.264流媒體播放器設(shè)計

        基于Directshow的H.264流媒體播放器設(shè)計

        作者: 時間:2011-03-04 來源:網(wǎng)絡(luò) 收藏

        播放本地基于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視頻

        本文引用地址:http://www.104case.com/article/166218.htm

        a.JPG

        3 系統(tǒng)的設(shè)計與實現(xiàn)
        3.1 Filter設(shè)計流程
        Filter的編碼實現(xiàn)包括Filter的注冊信息、Filter上的框架函數(shù)實現(xiàn)、邏輯控制類實現(xiàn)、自定義接口實現(xiàn)、屬性頁實現(xiàn)、產(chǎn)權(quán)保護等。
        首先,要對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使用。
        由于directshow自帶的AVI splitter工作于拉模式,故該源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)來傳輸。服務(wù)器端首先創(chuàng)建一個偵聽Socket,偵聽來自客戶端的連接請求。一旦偵聽到客戶端的請求,服務(wù)器端就創(chuàng)建一個用于數(shù)據(jù)傳送的Socket,并綁定到請求連接的客戶端,此時,服務(wù)器處于數(shù)據(jù)傳送的就緒狀態(tài)。當(dāng)客戶端發(fā)出命令,服務(wù)器再根據(jù)命令的類型執(zhí)行相應(yīng)的操作,如數(shù)據(jù)發(fā)送、停止、斷開連接等。



        關(guān)鍵詞: 播放器

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 鹤壁市| 遂平县| 台北市| SHOW| 阆中市| 枣庄市| 柳江县| 平安县| 延吉市| 项城市| 天全县| 来凤县| 临武县| 河池市| 钦州市| 株洲市| 舒城县| 惠安县| 赤壁市| 泉州市| 涞源县| 陆良县| 宜宾市| 五大连池市| 简阳市| 滨海县| 贵德县| 庆元县| 大英县| 兴安盟| 息烽县| 镇宁| 淮安市| 万源市| 黄大仙区| 梁河县| 青龙| 阿巴嘎旗| 岳西县| 海伦市| 漯河市|