天天看點

Android IOS WebRTC 音視訊開發總結(六)

前段時間在搞IOS的音視訊版本,是以将标題改為了Android IOS WebRTC 音視訊開發總結, 下面總結一下開發過程中的一些經驗:

1. IOS WebRTC音視訊編譯和下載下傳: 有過android WEBRTC編譯下載下傳經驗再去弄IOS,你會發現簡單多了,  記住有MAC和IOS兩個版本,要指定好你想要哪個版本.

2. 正确區分armv7 armv7s i386平台: 編譯的時候特别容易碰到找不到armv7 .a檔案之類的錯誤, 不了解的人會一頭霧水,其實這是因為每個Target編譯的時候都可以生成不同的平台,ARMV7,ARMV7S是給手機用的,I386是給MAC和模拟器用的,明白了這一點你就很容易解決這一類問題了.

3. 正确區分.m和.mm檔案: 有一次編譯出現一個奇怪的問題,提示找不到string.h檔案,折騰了半天都沒搞定,而且很納悶這檔案不是系統自帶的嗎?後來才發現是自己.m檔案裡面調用了C++代碼造成的,解決方式就是将.m檔案改成.mm檔案.

4. 調試webrtc代碼: android上面就隻能通過LOG了,但IOS很友善,object c. c. c++互相調用(這個有點讓我一眼就喜歡上了Xcode),同時編譯成DEBUG版本,就直接進入.a檔案裡面調試了,windows上同樣的道理.

5. 原理都是一樣的: 雖然WEBRTC有針對Windows,MAC,Android,IOS的版本,但他們原理都是一樣的,主要就是表現形式不一樣,是以你如果弄懂了一套再去弄另一套就比較容易了,了解過設計模式的人會發現針對這同不同平台的處理,他裡面大量采用了模闆模式和工廠模式,如資料發送,udp_socket_xxx.h

6. 圖像顯示不了或一方有圖像另一方沒有圖像: 這種問題原因很多,首先你得通過抓包看ARtp,ARtcp,VRtp,VRtcp端口收發資料是否正常,其次再通過調試或設定斷點來觀察資料包有沒有被丢棄或者有沒有被正确解碼,前兩天剛解決一個因為KeyFrame(WEBRTC裡面有KeyFrame,DeltaFrame分别表示是完整圖像還是差異圖像)沒有正常發送導緻收不到資料的問題.

7. RTP與RTCP有啥差別: 前者主要是負責發送音視訊資料包,後者主要負責控制信令相關的包,比如回傳信令.

8. 問有針對性的問題: 發現很多新手在一些群裡問的問題要麼很泛,要麼别人已經回答了N次,同時寄希望于大神出來幫他直接解決,甚至恨不得别人幫你調試代碼,太不現實了,不過你願意另外花錢買服務又另當别論了,依我的觀察來看真正的大牛都是不怎麼說話的,基本上都在潛水.

最後:更多經驗陸續補充,各位如有更好的想法和建議歡迎回複!