Android 聲網(wǎng) Bug 修改記錄: 視頻方向不對, Camera.getParameters() 空指針

1.集成聲網(wǎng)的音視頻服務(wù),做測試的時候發(fā)現(xiàn),采集的視頻方向一直是90°偏差怎么都轉(zhuǎn)不過來。

自習(xí)查看文檔后發(fā)現(xiàn):

用來顯示視頻的SurfaceView 是直接寫在布局里的而不是 聲網(wǎng)提供的構(gòu)造方法:
文檔原文 描述

創(chuàng)建渲染視圖

public static SurfaceView CreateRendererView (Context context)

該方法創(chuàng)建視頻渲染視圖,返回SurfaceView的類型。
view的操作和布局由App管理, Agora SDK在App提供的view上進(jìn)行渲染。
顯示視頻視圖必須調(diào)用該方法,而不是直接調(diào)用SurfaceView。

  1. 測試正常,偶發(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一下。

  1. 美顏 效果的添加(折騰的約一周) 。

給出的支持是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)建工作線程的寫法很新穎)的方法,依然無果。

或者偶爾一下渲染的日志出來了,但是并滅有起效。

Paste_Image.png

最后想到了因為是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ā)的地方開始,也許能省下很多功夫。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容