天天看點

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

1、編譯調試

(1)将用戶端程式上傳到伺服器

(2)進入到用戶端目錄,進行make操作

(3)出現錯誤解決錯誤

我們用到線程相關的結構體,是以要包含pthread.h這個頭檔案。

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

沒有聲明函數atol

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

看使用這個函數需要包含什麼頭檔案

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

沒有定義函數pthread_create,但我們明明包含了相關的頭檔案,用到建立線程,依賴于一個庫,

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

因而需要在頂層makefile中,添加一個依賴的庫檔案pthread。

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

2、後續操作

(1)編譯通過,生成mjpg-streamer-client應用程式

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

(2)在開發闆運作mjpg-streamer軟體,在虛拟機上通過無線網卡連結wifi熱點。進入文本模式,輸入使用者名和密碼,進入用戶端路徑,運作用戶端,參數跟的是開發闆的IP位址

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

(3)能看到視訊資料,但是一瞬間,就卡住了。

我們要調試程式需要看他的列印資訊,但是一運作程式,馬上調用到了vga相關的操作,這樣是看不到列印資訊的。修改代碼,暫時将vga操作的代碼注釋掉,先看列印資訊,看問題出在哪裡,找到問題後再将控制台打開。将清屏函數注釋掉

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

修改crt.c裡面的init函數

将vga相關的操作注釋掉

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

在主函數中

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

(4)重新 make,運作用戶端

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

檢視列印資訊

發送一個請求以後,就會收到伺服器發過來的封包,封包

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

接下來接收視訊資料,當接受到的資料是JPEG 資料,成功過轉化,然後傳回值是0,然後接收第二幀資料,不是JPEG 資料,傳回值是-1,表示轉換失敗。然後出現段錯誤,然後程式就卡死啦。

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

(5)接下來尋找段錯誤是什麼原因導緻的

通過加列印的方式找出段錯誤出現的位置在哪裡

最終發現在convert函數裡面

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

進入Mjpeg2RgbConvert函數。

當接收到一幀圖檔不是jpeg格式,将執行以下if分支,在if分支裡面将(實際像素資料空間)aucPixelDatas給釋放掉了,第二次接收又要操作這個空間,但是這個空間已經被釋放掉了,自然而然會引發段錯誤,因而要将

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試

删掉,就可以把段錯誤給解決了。

mjpg-streamer學習筆記10-----自己寫客服端_編譯調試