Android 声网 Bug 修改记录: 视频方向不对, Camera.getParameters() 空指针

1.集成声网的音视频服务,做测试的时候发现,采集的视频方向一直是90°偏差怎么都转不过来。

自习查看文档后发现:

用来显示视频的SurfaceView 是直接写在布局里的而不是 声网提供的构造方法:
文档原文 描述

创建渲染视图

public static SurfaceView CreateRendererView (Context context)

该方法创建视频渲染视图,返回SurfaceView的类型。
view的操作和布局由App管理, Agora SDK在App提供的view上进行渲染。
显示视频视图必须调用该方法,而不是直接调用SurfaceView。

  1. 测试正常,偶发

    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是内部对Camera采集数据,应该是在音频的时候也开启了enableVideo这个方法,而这时camera是null。
在官网找解决方案,已经有人遇到这个坑:

https://dev.agora.io/cn/question/721

最后官方给的 解决方案是

这个问题我们已经在SDK 1.10里面修复了,1.10目前有Beta版,正式版最晚在5月中上旬发布

所以如果不是最新的SDK,请替换一下。

  1. 美颜 效果的添加(折腾的约一周) 。

给出的支持是kiwi的demo ,同样的ios 简单的传入对象就好了,android demo 有一个UI的libary ,demo app中还有jni ,准门问了下用不用集成这些cpp 文件(商务不懂技术果断的告诉我不用),于是在第一天完全没有任何效果。自己研究了代码,才发现必须参考demo的写法,调用jni方法 创建一个缓冲区进行对采集到的每一帧 进行渲染。

开始了调试生涯:
参照demo完全严格按照路径写了,但是报错

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)

字面意思显然跳过了太多帧,考虑到主线程受阻,于是乎,又向各种办法来让它立即执行,无果。
参照demo 那种直接获取工作线程(app启动创建工作线程的写法很新颖)的方法,依然无果。

或者偶尔一下渲染的日志出来了,但是并灭有起效。

Paste_Image.png

最后想到了因为是u3d 混合开发,可能是 u3d 也在执行渲染引起的(原生的界面在u3d 之上),有时候会有

call to OpenGL ES API with no current context (logged once per thread),

这样的日志,总之是摸不着头脑。

最后验证是否是u3d 引起的,u3d导出一个几乎什么都没有的包,集包之后竟然完美运行!
那就不是u3d的原因。
仔细一想,因为声网的SDK版本!!

美颜demo里用的是 1.9.项目里刚更新到最新的1.12.

替换老的sdk,圆满起效。

这个事件前后差不多三天多,一开始就应该想到的,但是没有,找解决问题的方法从最开始触发的地方开始,也许能省下很多功夫。

你可能感兴趣的:(Android 声网 Bug 修改记录: 视频方向不对, Camera.getParameters() 空指针)