前段時間在搞webrtc iOS開發,所以將標題改為了Android IOS WebRTC 音視頻開發總結, 下面都是開發過程中的經驗總結,轉載請說明出處(博客園RTC.Blacker):
1. IOS WebRTC音視頻編譯和下載: 有過android WEBRTC編譯下載經驗再去弄IOS,你會發現簡單多了,再有問題,可參考:
1.1、http://www.cnblogs.com/ProbeStar/p/3411510.html 記住有MAC和IOS兩個版本,要指定好你想要哪個版本.
1.2、webrtc ios不支持直接用xcode編譯,他給出的解決方案:通過xcode調用ninja,通過ninja編譯,跟命令行一樣的效果,不過調試方便多了。
2. 正確區分armv7 armv7s i386平台,ios開發編譯的時候經常會碰碰到找不到armv7 .a文件之類的錯誤:
2.1、armv7,armv7s,amd64是真機用的,i386是模擬器用的,明白了這一點對你解決類似問題很有幫助。
2.2、查看.a文件架構的命令:lipo -info libwebrtc.a
2.3、合並.a文件的命令:lipo -create lib.armv7.a lib.arm64.a -output lib.a
2.4、合並不同.a文件的命令:libtool -static -o dest.a lib*.a; strip -S -x -o dest2.a -r dest.a;
2.5、webrtc現已支持arm64(我已經編譯成功了),這也是響應蘋果商店上架審核要求,詳見:https://developer.apple.com/news
3. 正確區分.m和.mm文件:
3.1、有一次編譯出現一個奇怪的問題,提示找不到string.h文件,折騰了半天都沒搞定,很納悶這文件不是系統自帶的嗎?后來才發現是自己.m文件里面調用了C++代碼造成的,解決方式就是將.m改成.mm。
4. webrtc iOS開發與調試:
4.1、調試webrtc在Android基本上都是通過日志(后面會寫到怎么加日志),但i可將代碼加進去調試,為蘋果點贊,VS還沒做這么好。
4.2、xcode里面object c. c. c++代碼可以相互調用,好強,這個優點讓我一眼就喜歡上了Xcode,
5. 代碼架構都是一樣的,所以弄懂了一套再去弄另一套就比較容易了,不過如果不熟悉另一個平台開發則還是要點成本的:
5.1、講設計模式的書很多,其實優秀源代碼就是最好的書籍,webrtc代碼就是一本介紹涉及模式的優秀書籍,如工廠模式,模版模式。
5.2、有些模的具體實現還是有些不一樣的,如音頻設備操作在android上用的是opensles,蘋果上就不是這么搞的。
6. 視頻的時候圖像顯示不了或一方有圖像另一方沒有圖像,具體原因很多:
6.1、首先你得通過抓包查看收發數據是否正常,其次邏輯判斷找出可能出問題的模塊,最后通過調試或設置斷點來具體查找。
6.2、理清視頻圖像捕獲、處理、編碼、發送、接收、解碼、顯示、驗證這個邏輯對你處理類似問題有很大幫助,后面會整理流程圖。
6.3、開始視頻前會先發送KeyFrame(KeyFrame和DeltaFrame分別表示是完整圖像還是差異圖像), KeyFrame間隔可自定義.
6.4、 很多人容易混淆RTP RTCP RTSP:RTP RTCP是傳輸層協議,RTSP是應用層協議,類似http。
最后:關於問別人問題,發現很多新手在一些群里問的問題要么很泛,要么別人已經回答了N次,同時寄希望於大神出來幫他直接解決,甚至恨不得別人幫你調試代碼,太不現實了,不過你願意另外花錢買服務又另當別論了,依我的觀察來看真正的大牛都是不怎么說話的,基本上都在潛水.
更多經驗陸續補充...