工作需要測試網絡傳輸算法,逐學習WebRTC源碼
工作環境
Mac OS 10.14
Xcode 10.2.1
源碼下載
從google(需要【你懂的】)
- 首先【你懂的】
- 打開終端,輸入
curl www.google.com
看能不能返回正確的html數據,有的【你懂的】手段只有瀏覽器能翻過去,但是終端不行,這樣沒法安裝 - 按照官方教程,一步步輸入命令:
mkdir webrtc-checkout cd webrtc-checkout fetch --nohooks webrtc gclient sync
- 漫長的等待后源碼下載完成,創建自己的brantch,用於git版本控制:
cd src git checkout master git new-branch your-branch-name
- 如果需要更新源碼:(還沒試過)
git checkout master git pull origin master gclient sync git checkout my-branch git merge master
從別人下載好的源碼
這個可能可以從github、CSDN等地方找到吧,我沒試
編譯源碼
生成Ninja文件
google的大項目的編譯首先會通過gn
工具來組織項目的編譯,約等同於Cmake
吧,BUILD.gn
大概扮演了CMakeList.txt
的角色
它會根據你的目標環境(比如不同操作系統之類的),生成相應的Ninja
文件,約等於Makefile
的作用。
gn+Ninja
比CMake+makefile
的優勢是速度快,尤其是改動很小的時候
gn gen out/Default
就能生成Ninja文件了,GN的文檔里還有很多參數的介紹,可以使用--ide
選項來生成對應IDE的項目文件。
由於CLION
用不了,所以用了Xcode
,命令如下:
gn gen out/Default --ide="xcode" --workplace="audio_fec"
如果想清空某次生成的Ninja文件,使用:
gn clean out/Default
利用Ninja進行編譯
ninja -C out/Default
這時候!!!!!有bug!!!!
吐槽一下找bug歷程:
懵逼了幾個月,后來突然看到有一句but the deployment target is 10.10.0
,我就在想,這個deployment target是在哪設置的呢?往上一看,命令行里有一句-mmacosx-version-min=10.10.0
ok,這個命令是在哪出來的呢?還記得ninja文件有makefile的作用嘛,那估計是在ninja文件里。出bug的.o
是obj/examples/apprtc_signaling/ARDSettingsModel.o
,所以去out/Default/obj/examples
下面看到了apprtc_signaling.ninja
文件,命令行里的這句話果然是在這里定義的,但是找到了ninja文件並沒有什么卵用
ninja文件是gn
產生的,所以要看gn
文件,找到出問題的src/examples/objc/
下面的BUILD.gn
,一打開就看到這個:
好吧,那macos
版本信息估計在這個rules.gni
里了,打開之后發現估計在base_rules.gni
里,打開這個文件之后:
ok,那估計就在這個mac_sdk.gni
里了
打開來之后終於看到了曙光!
找到src/build/config/mac/mac_sdk.gni
文件,打開來長成這樣:(截圖是我改過之后的)
,把mac_deployment_target
從10.10.0
改成10.11.0
就可以了,保存之后clean
,然后再用gn gen
生成一次ninja文件,最后再用ninja編譯,就沒問題了!
運行Demo
out/Default
下面有個AppRTCMobile.app
打開來可以玩= =