新聞中心

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

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

作者: 時(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,即可實(shí)現(xiàn)網(wǎng)絡(luò)H.264視頻。

本文引用地址:http://butianyuan.cn/article/166218.htm

a.JPG

3 系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
3.1 Filter設(shè)計(jì)流程
Filter的編碼實(shí)現(xiàn)包括Filter的注冊(cè)信息、Filter上的框架函數(shù)實(shí)現(xiàn)、邏輯控制類實(shí)現(xiàn)、自定義接口實(shí)現(xiàn)、屬性頁實(shí)現(xiàn)、產(chǎn)權(quán)保護(hù)等。
首先,要對(duì)Filter所要完成的功能和它在Filter Graph中的位置進(jìn)行分析,以確定filter模型,選擇一個(gè)合適的基類;然后,再定義輸入輸出PIN以及自定義接口,注冊(cè)Filter信息;最后實(shí)現(xiàn)基類的全部純虛函數(shù)和自定義接口函數(shù),并重寫基類的相關(guān)函數(shù)以定制filter功能。
3.2 網(wǎng)絡(luò)源Filter的設(shè)計(jì)
源Filter主要功能是接收服務(wù)器發(fā)來的流媒體數(shù)據(jù),并提供給Filter Graph中其它Filter使用。
由于directshow自帶的AVI splitter工作于拉模式,故該源Filter也工作于拉模式。
本源Filter采用雙緩沖循環(huán)隊(duì)列技術(shù)來實(shí)現(xiàn)數(shù)據(jù)的接收和向下一級(jí)Filter傳遞數(shù)據(jù)。采用該技術(shù)有如下理由:
(1)在Source Filter與SpliRer連接的過程中,會(huì)從Source Filter中讀取一部分?jǐn)?shù)據(jù),以獲得數(shù)據(jù)的格式描述,否則Filter Graph無法完成連接。源Filter與Splitter Filter進(jìn)行連接前,應(yīng)啟動(dòng)一個(gè)等待線程,當(dāng)Source Filter的數(shù)據(jù)緩存預(yù)先接收到足夠的數(shù)據(jù)后,再構(gòu)建完整的Filter Graph。
(2)當(dāng)完整的Filter Graph構(gòu)建完成,并且處于運(yùn)行狀態(tài)后,Source Filter必須動(dòng)態(tài)地接收數(shù)據(jù),并持續(xù)地把新數(shù)據(jù)提供給Splitter Filter,雙緩沖循環(huán)隊(duì)列既充分利用內(nèi)存空間,又能為Splitter Filter提供穩(wěn)定的數(shù)據(jù)源。
(3)緩沖隊(duì)列可以穩(wěn)定碼率,有效減小網(wǎng)絡(luò)延時(shí)、阻塞和抖動(dòng)的影響。
源Filter的工作過程如下:建立一個(gè)循環(huán)緩沖隊(duì)列,隊(duì)列尾指針用于緩沖從網(wǎng)絡(luò)接收的數(shù)據(jù),隊(duì)列頭指針供Splitter讀取數(shù)據(jù),進(jìn)行音視頻分離,并傳給下一級(jí)Decoder處理;當(dāng)Socket接收到網(wǎng)絡(luò)數(shù)據(jù)后,將數(shù)據(jù)插入隊(duì)列尾部,并使尾指針后移;當(dāng)Splitter需要讀取數(shù)據(jù)時(shí),從隊(duì)列頭讀取數(shù)據(jù),并使頭指針后移。
流媒體傳輸采用客戶端/服務(wù)器的架構(gòu),服務(wù)器與客戶端之間還有一個(gè)Socket通信協(xié)議問題,由于流媒體是連續(xù)的,它的同步點(diǎn)不能隨意選擇,因此,為了傳送流媒體數(shù)據(jù),必須使用面向連接的可靠的傳輸協(xié)議(TCP)。客戶端與服務(wù)器端的控制與反饋消息,則可以使用(UDP)來傳輸。服務(wù)器端首先創(chuàng)建一個(gè)偵聽Socket,偵聽來自客戶端的連接請(qǐng)求。一旦偵聽到客戶端的請(qǐng)求,服務(wù)器端就創(chuàng)建一個(gè)用于數(shù)據(jù)傳送的Socket,并綁定到請(qǐng)求連接的客戶端,此時(shí),服務(wù)器處于數(shù)據(jù)傳送的就緒狀態(tài)。當(dāng)客戶端發(fā)出命令,服務(wù)器再根據(jù)命令的類型執(zhí)行相應(yīng)的操作,如數(shù)據(jù)發(fā)送、停止、斷開連接等。



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

評(píng)論


相關(guān)推薦

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

關(guān)閉