網路播放器的補充 (轉)
這篇主要是補充關於資料處理部分的。
由於有些朋友和我討論了這些問題,確實也是個問題。所以我測試後,統一整理給大家看看。
因為我的工程也要嵌入部分。所以我自己寫了些程式碼後,才知道和從中直接讀有些不同。檔案的讀寫快,可是網路的資料要求等待的。不是很及時。特別是處理頭資訊時。因為我做的是MPEG2的,他處理頭資訊要1M多,如果while等待話。。。累死了—*%·—#……·#
下面介紹一下MEMFILE的例子的處理頭資訊的詳細情況。
1。首先,不論是MPEG2還是MPEG1的,他都要讀32768位元組。這是用來判斷資料格式的。
2。其次,如果判斷的正確(和你所給的型別一致),對於MPEG1在讀32768,然後在讀32768,這些資料可以是檔案中間的資料。
對於MPEG2格式的,他要讀1M多,然後在讀幾百K的資料。這些資料也可以從檔案中間開始。
或是時時的資料流資料也行。也就是說這些資料是和判斷無關的。這樣大家就應該知道怎麼做了...
3。最後,就是穩定的讀資料了。MPEG1的是32768,MPEG2的是1638。然後我在以前說了如何修改MPEG1格式的資料大小。不過只能該成2的N次方。不過要求修改基類。
在下面我會說明一個更簡單的更改方法。而且可以是任意的大小(只能小於預設的)。不過還是說完這部分吧。
所以說,開始的32768是個關鍵資料,如果它不能夠透過它判斷出資訊的話,它會接著讀32768資料。一直讀下去,直到它正確的判斷了資料格式。
結論:開始時給個正確的資料吧。
改進:由於他會不斷的判斷(不知道MPEG1是不是,我測試的是MPEG2,大家可以自己測測),所以,你可以在開始也不是正確的資料!(正是由於這個原因,大家可以擺脫頭資訊的捆擾了,實在是太...嘿嘿)只要你給的資料有個包是正確的。那麼它就會接著2。的步驟開始向下執行了。
不過由於我測試的是MPEG2格式的MEDIASUBTYPE_MPEG2_TRANSPORT和MEDIASUBTYPE_MPEG2_PROGRAM,他們本來就是基於流的,所以我不是很肯定MPEG1的是不是這樣。是不是一定需要的是個頭資訊。(我本來想測試的可是我的測試...555~~~~去哪了,天哪,什麼時候刪的...)又想讓大家快點見到,所以沒有測試了。望做MPEG1的自己試試。
上面說完了開始的資料處理。下面就要說3步驟的技巧了。這個也解決了while阻塞執行緒的問題了。一舉兩得。
我剛才說了資料可以是任意的大小,現在就說明一下。只能小於預設的,應該可以是大於,可是你願意麼?
原來Read是可以提前返回的!!!不需要資料的返回。象下面的程式碼:
*pdwBytesRead = 0;
return S_OK;
這樣你就不要給資料了。不過第一個資料不能返回0。否則會OVER的。
然後,因為很多人的資料包的大小是自己定的,如果你的資料沒有達到他要求的32768或是1638,就是沒有匹配,怎麼辦呢?那麼你複製你要求的大小的資料給pbBuffer,然後,你返回你自己的大小就OK。象下面的程式碼:
CopyMemory( (PVOID)pbBuffer,(PVOID)(m_pbData + m_head),
MY_SOCK_SIZE);
*pdwBytesRead = MY_SOCK_SIZE;
return S_OK;
大家覺的怎麼樣??還不趕快試試!GO!
至於測試的程式碼...哎,我也想給啊。—#*%……·#%·
看來大家還是自己寫寫吧。如果你原來就改寫過的話,應該是很簡單的。程式碼就幾句而已。祝大家好運!節日快樂!!
afterain 9.28
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990219/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 網路流概念補充
- 網際網路流行詞~歡迎補充
- 用子圖網路補充原始網路特徵 | 圖學習論文快訊特徵
- 網路程式設計補充程式設計
- 【PyTorch】常用的神經網路層彙總(持續補充更新)PyTorch神經網路
- 關於 Struts 1.1 Exception Handler 的應用補充 (轉)Exception
- 有關元件的補充~~~~~~~元件
- iOS-framework的補充iOSFramework
- vi的補充學習
- [JLU]校園網上網攻略彙總與補充
- [轉載+補充]windows下SVN客戶端的安裝Windows客戶端
- 第三章 CSS的應用補充(轉)
- 把HTML表單提交的資料轉化成XML檔案的補充 (轉)HTMLXML
- JVM補充篇JVM
- 聯通性補充
- 網路素養教育提上日程 學校和家庭教育互為補充
- indexmerge的補充說明Index
- PS的一些補充
- css雜項補充CSS
- redis筆記補充Redis筆記
- Servlet學習補充Servlet
- Oracle 補充日誌Oracle
- UDP聊天程式補充UDP
- lambda(持續補充)
- 負載均衡補充負載
- while迴圈補充While
- step1 補充
- linux命令補充Linux
- 用C++模板描述的連結串列、棧、佇列(補充) (轉)C++佇列
- 關於"在Linux下訪問Windows分割槽"的補充(轉)LinuxWindows
- Emacs 系列(三): Org 模式的補充Mac模式
- 關於switchover的流程和補充
- Binder機制的細節補充
- MybatisPlus的一些補充MyBatis
- Python網路爬蟲實戰專案程式碼大全(長期更新,歡迎補充)Python爬蟲
- android開發者資源下載地址記錄(轉+補充)Android
- 初學java進位制轉換方面補充學習Java
- Apache安裝MOD_SSL的補充--手工簽署證書的方法(轉)Apache