這節主要介紹WebRTCDemo的結構,以此來簡單了解WebRTC的調用流程,轉載請說明出處(博客園RTC.Blacker)
1、先看WebRTCDemo的代碼結構,如下圖:
2、WebRTCDemo中音視頻管理接口--MediaEngine,包括操作音頻和視頻的接口,詳見MediaEngine的實現。
3、jni實現:細心的讀者會發現WebRTCDemo下面有一個jni目錄,這是android提供的調用本地代碼的方式,即Java Native Call(讀者如想詳細了解JNI是怎么回事,可以買本書或找些相關資料來看看,這里面涉及到NDK編譯,JNI語法)。
MediaEngine中native方法最終都是通過Jni下面的video_engine_jni.cc和video_engine_jni.cc來實現的,這些Jni方法最終就轉到WebRTC提供的接口類中去了,即VoiceEngine和VideoEngine,順着這個思路再看源代碼就比較容易理解了。
4、如何調試WebRTCDemo中的c++代碼?
根據JNI要求,需要用NDK編譯WebRTCDemo,不過目前WebRTCDemo是直接調用現成的libwebrtcdemo-jni.so,如果要調試得自己寫一個Andorid.mk文件將相關源代碼加進來,幾乎涉及大部分WebRTC代碼,這樣工作量有點大,所以放棄了。
WebRTCDemo過濾和查看日志的具體方法如下(TraceLevel選項很多,可根據自己需求選擇):
1 public void setTrace(boolean enable, VideoEngine.TraceLevel traceLevel) { 2 if (enable) { 3 vie.setTraceFile("/sdcard/trace.txt", false); 4 vie.setTraceFilter(traceLevel);// huly 5 return; 6 } 7 vie.setTraceFilter(VideoEngine.TraceLevel.TRACE_NONE); 8 }
后面我還會具體講到自定義開發中如果修改底層代碼排查問題。
5、肯定有人會問IOS下WebRTCDemo在哪里?是怎么實現的?
答案:請繼續關注
題外話:被微軟寵壞了兄弟們,在linux下改webrtc代碼蛋疼了吧,哈哈哈!