1.集成聲網(wǎng)的音視頻服務(wù),做測試的時候發(fā)現(xiàn),采集的視頻方向一直是90°偏差怎么都轉(zhuǎn)不過來。
自習(xí)查看文檔后發(fā)現(xiàn):
用來顯示視頻的SurfaceView 是直接寫在布局里的而不是 聲網(wǎng)提供的構(gòu)造方法:
文檔原文 描述
public static SurfaceView CreateRendererView (Context context)
該方法創(chuàng)建視頻渲染視圖,返回SurfaceView的類型。
view的操作和布局由App管理, Agora SDK在App提供的view上進(jìn)行渲染。
顯示視頻視圖必須調(diào)用該方法,而不是直接調(diào)用SurfaceView。
-
測試正常,偶發(fā)
Fatal Exception: Java.lang.NullPointerException: Attempt to invoke virtual method 'Android.hardware.Camera$Parameters android.hardware.Camera.getParameters()' on a null object reference at io.agora.rtc.video.VideoCaptureCamera$1.onFaceDetection(SourceFile:224) at android.hardware.Camera$EventHandler.handleMessage(Camera.java:1212) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:7325) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
分析:
FaceDetection是內(nèi)部對Camera采集數(shù)據(jù),應(yīng)該是在音頻的時候也開啟了enableVideo這個方法,而這時camera是null。
在官網(wǎng)找解決方案,已經(jīng)有人遇到這個坑:
https://dev.agora.io/cn/question/721
最后官方給的 解決方案是
這個問題我們已經(jīng)在SDK 1.10里面修復(fù)了,1.10目前有Beta版,正式版最晚在5月中上旬發(fā)布
所以如果不是最新的SDK,請?zhí)鎿Q一下。
- 美顏 效果的添加(折騰的約一周) 。
給出的支持是kiwi的demo ,同樣的ios 簡單的傳入對象就好了,android demo 有一個UI的libary ,demo app中還有jni ,準(zhǔn)門問了下用不用集成這些cpp 文件(商務(wù)不懂技術(shù)果斷的告訴我不用),于是在第一天完全沒有任何效果。自己研究了代碼,才發(fā)現(xiàn)必須參考demo的寫法,調(diào)用jni方法 創(chuàng)建一個緩沖區(qū)進(jìn)行對采集到的每一幀 進(jìn)行渲染。
開始了調(diào)試生涯:
參照demo完全嚴(yán)格按照路徑寫了,但是報錯
08-03 10:27:26.021 12905-13208/com.meodgame.wolfkill I/Choreographer: Skipped 101 frames! The application may be doing too much work on its main thread.
08-03 10:27:26.022 12905-14860/com.meodgame.wolfkill W/AudioTrack: releaseBuffer() track 0xc070f8b0 disabled due to previous underrun, restarting
libc: Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 11621 (ViECaptureThrea)
字面意思顯然跳過了太多幀,考慮到主線程受阻,于是乎,又向各種辦法來讓它立即執(zhí)行,無果。
參照demo 那種直接獲取工作線程(app啟動創(chuàng)建工作線程的寫法很新穎)的方法,依然無果。
或者偶爾一下渲染的日志出來了,但是并滅有起效。

最后想到了因為是u3d 混合開發(fā),可能是 u3d 也在執(zhí)行渲染引起的(原生的界面在u3d 之上),有時候會有
call to OpenGL ES API with no current context (logged once per thread),
這樣的日志,總之是摸不著頭腦。
最后驗證是否是u3d 引起的,u3d導(dǎo)出一個幾乎什么都沒有的包,集包之后竟然完美運(yùn)行!
那就不是u3d的原因。
仔細(xì)一想,因為聲網(wǎng)的SDK版本!!
美顏demo里用的是 1.9.項目里剛更新到最新的1.12.
替換老的sdk,圓滿起效。
這個事件前后差不多三天多,一開始就應(yīng)該想到的,但是沒有,找解決問題的方法從最開始觸發(fā)的地方開始,也許能省下很多功夫。