新聞中心

        EEPW首頁 > 消費電子 > 設計應用 > 基于Directshow的H.264流媒體播放器設計

        基于Directshow的H.264流媒體播放器設計

        作者: 時間:2011-03-04 來源:網絡 收藏

        在服務器端首先將連續的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中。

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

        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內存的大小;GetMediaType():提供輸出Pin上的首選媒體類型;Transform():實現解碼變換。
        子類CX264Decode可選的重寫虛函數有:初始化和反初始化流:StartStreaming()和StopStreaming();響應質量通告消息:AlterQuali-ty();獲取媒體類型被實際設置的時間:SetMediaType();連接時獲取額外的接口:CheckConnect()、BreakConnect()和CompleteConneet();定制變換過程:Receive();標準化設置輸出Sample:InitializeOutputSample()。



        關鍵詞: 播放器

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 德化县| 阳谷县| 门源| 黄梅县| 上饶市| 六盘水市| 康乐县| 新干县| 龙胜| 左云县| 金门县| 宝应县| 宣城市| 金华市| 兰西县| 乌兰浩特市| 通渭县| 深水埗区| 西畴县| 师宗县| 瓮安县| 乐昌市| 徐汇区| 贡山| 怀集县| 高邮市| 清原| 偃师市| 新闻| 襄城县| 同仁县| 南京市| 乐业县| 高雄市| 延吉市| 鱼台县| 高州市| 石屏县| 澜沧| 秦安县| 沙田区|