見鬼的攝像頭與udp協議傳輸

見鬼的攝像頭與udp協議傳輸

起因:我在服務端每秒40幀的速度發送數據包,客戶端卻顯示不出圖片。
處理過程如下:
我用文本測試兩個程序間的UDP協議的連接,沒有問題。
接着我用單幅圖片測試,客戶端能收到,也沒問題。
那爲什麼我用每秒40幀的速度發射,客戶端就顯示不出來了呢?
數據包丟了嗎,還是數據打包時出錯了?丟也不可能每幀都丟吧!
是不是每秒40幀太頻繁了,網絡阻塞導致丟幀了呢?
於是我單獨手工捕捉一幀發射一幀,可爲什麼還還是顯示不出來呢?
我剛剛不是用單幅圖片測試過了嗎?這與我從攝像頭捕捉的幀圖片有什麼區別?
我每次發射幀時先暫停攝像頭的運作,圖像應該存夠了吧!可爲什麼還是不能發射成功?

爲什麼我停止攝像頭的捕捉後,那背景圖片卻又能發射成功?與我捕捉的幀又有什麼區別?

我開始改用每秒40幀的速度發射攝像頭捕捉下來的圖片大小。

計算後發現,攝像頭拍攝後的圖片的實際字節數與理論值也相符啊。

有大小怎麼會沒數據!發射接收都是成功的啊,可爲什麼就是不顯示呢?

本來我沒找到一個好的音頻庫來捕捉麥克風的音頻,有點想放棄了,

還給我整出這些個令人頭疼的事,我毫不懷疑我解決問題的能力,

我的步驟,我的思路,我的代碼都是正確的。無奈拿出殺手鐗——大量測試。

我不斷手動打開任意圖片文件,發射。卻發現有的圖能接到,有的圖不能接到。

接着不斷分析那些丟包的圖片有什麼不對勁的地方,

呵呵,我以爲我見鬼了呢?原來是圖片尺寸的問題,我發射的是沒壓縮過的圖片。

原來UDP協議的數據包有大小限制的啊!

我償試過用qCompress進行9級壓縮,沒起什麼效果。
我搜索到一遍博士生寫的論文,說是拆包發射然後組幀顯示,好像好複雜的樣子。

我比較懶,於是我將QImage圖片以JPG格式通過QBuffer保存進QByteArray再發射。

640*480的尺寸下,跑得順得很,兩個程序的cpu佔有率不到30% 事情完美解決!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章