 物聯網倉(cang)儲項(xiang)目學習遇到(dao)的(de)困難【學員筆記】
							時(shi)間(jian):2018-07-11      來源:未(wei)知
							物聯網倉(cang)儲項(xiang)目學習遇到(dao)的(de)困難【學員筆記】
							時(shi)間(jian):2018-07-11      來源:未(wei)知 
							1. QT的客戶(hu)端,c的服(fu)務器之間不好溝通。解決(jue):框架(jia)用(yong) QT風格寫(包括信號(hao)與(yu)槽,QT界面(mian),連接(jie)服(fu)務器,發送接(jie)收(shou)等),數據用(yong)c的風格寫,做(zuo)到與(yu)服(fu)務器一致(zhi)。
2. Tcp粘(zhan)包(bao)拆(chai)包(bao),收發(fa)數據(ju)一致,結構體成員類(lei)型大小(xiao)一致。
3. Tcp處理登錄,udp處理發送視頻(pin),導致開(kai)線程pthread_create傳參(can)不好傳。Tcp的connfd,udpfd封(feng)裝(zhuang)成結構體傳,或者開(kai)2個(ge)線程。
4. 回收資源時候,關閉(bi)(bi)connf;但(dan)不(bu)能關閉(bi)(bi)udpfd,否則下(xia)一次連接傳不(bu)了圖片(pian)(視(shi)頻)了。
5. V4l2框架需(xu)要(yao)自學(xue),轉碼壓縮算法(fa)需(xu)要(yao)自學(xue)。
6. Memcpy之段(duan)錯(cuo)誤(wu): //1在(zai)unix上(shang),系(xi)統(tong)對(dui)內(nei)存管的(de)比較松(song),而在(zai)linux下,指針可能是指向了一個只讀(du)的(de)內(nei)存。buffer = (char*)malloc(outqueue.length);
7. Arm-linux-gcc編譯代(dai)碼的(de)時候需要很(hen)多頭文(wen)件和庫的(de)支持(sqlite3,jpeg),應(ying)該將(jiang)它們(men)放(fang)在相應(ying)的(de)位置(zhi)。
8. -ljpeg一直報(bao)錯,cannot found。
通過比對正(zheng)常的(de)庫文件:libsqlite3.la
# Directory that this library needs to be installed in:
libdir='/home/farsight/libjpeg/lib'
發(fa)現(xian)libjpeg.la雖然通過(guo)arm-linux-gcc交叉編譯了的(de)(de),但是生成的(de)(de)文件的(de)(de)路徑仍(reng)為gcc編譯后(hou)libjpeg目錄,而不是自(zi)己修改后(hou)的(de)(de)armjpeg目錄。
# Directory that this library needs to be installed in:
libdir='/home/farsight/libjpeg/lib'
解(jie)(jie)決:刪除解(jie)(jie)壓(ya)后(hou)的(de)文件(jian),重新(xin)解(jie)(jie)壓(ya),重新(xin)arm-linux生成(cheng)新(xin)的(de)文件(jian)夾(jia)
9. 應(ying)該用buf【】裝圖片數據,不應(ying)該用char* buf = NULL裝。
10. 應該把攝像頭采集等模(mo)塊分開,便于調(diao)試。
11. 自(zi)學M0模塊(串口(kou)函數),LCD模塊。
12. 服務器循環(huan)發圖片(pian),QT客戶(hu)端只顯示了(le)一張,因為虛擬(ni)機的原因,交叉編(bian)譯放在板子上跑,ok
13. 多(duo)個(ge)客戶端(duan)同時(shi)訪問(wen)的(de)(de)時(shi)候出現圖(tu)(tu)片花的(de)(de)情(qing)況,因(yin)為(wei)(wei)會出現搶(qiang)(qiang)占隊列資源的(de)(de)情(qing)況。把get_picture單(dan)獨開一個(ge)線(xian)程,把取得(de)的(de)(de)圖(tu)(tu)片放(fang)在全局變量buf里,客戶端(duan)訪問(wen)buf就好(hao),因(yin)為(wei)(wei)客戶端(duan)要讀(du)buf,服務器要寫buf,所以得(de)加(jia)鎖保護。Udp發(fa)送不消耗時(shi)間,mencpy消耗時(shi)間,避免(mian)搶(qiang)(qiang)鎖,udp發(fa)送后加(jia)點延時(shi)
14. 客戶端異常卡死,服務(wu)端while(1)發送,客戶端無法及時處理,數(shu)據(ju)太多,導致(zhi)卡死。???
15. 視頻不流(liu)暢,圖片(pian)數據(ju)太(tai)大,占寬帶,設(she)置320*240,QT設(she)置為飽滿縮放scaledContents打鉤
16. 圖片(pian)花(hua),QT那邊接(jie)受數組定小了(le)。
17. Test_ser模式加(jia)不加(jia)鎖都OK。True_ser模式加(jia)不加(jia)鎖兩個(ge)客戶端都相互干擾,且段(duan)錯誤。
18. True_ser中:pthread_t pid_play;//多(duo)客戶端會導致(zhi)值被修(xiu)改(gai),導致(zhi)干擾
19. True_ser中:pthread_cancel(pid_play);//存在暴(bao)力取消(xiao),導致死鎖的風險
20. True_ser中(zhong):因為udp的關系,無法(fa)判斷客戶端什(shen)么(me)時候(hou)(hou)退出(chu),客戶端退出(chu)時候(hou)(hou),服(fu)務(wu)器依然(ran)會(hui)發送圖片(pian),浪費。綜上(shang)放棄true_ser,采用test_ser。

