Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

做完遇到的bug #129

Closed
LoginGit opened this issue Feb 15, 2017 · 21 comments
Closed

做完遇到的bug #129

LoginGit opened this issue Feb 15, 2017 · 21 comments

Comments

@LoginGit
Copy link

java.lang.NullPointerException: Attempt to invoke interface method 'void com.ksyun.media.player.IMediaPlayer$OnCompletionListener.onCompletion(com.ksyun.media.player.IMediaPlayer)' on a null object reference
at com.ksyun.media.player.a.notifyOnCompletion(AbstractMediaPlayer.java:93)
at com.ksyun.media.player.KSYMediaPlayer$b.handleMessage(KSYMediaPlayer.java:2107)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

您有时间的话可以帮我看一下,我描述下我的使用场景:
第1,音频播放模块,一直在后台运行,等待rtmp地址有效。
第2,视频推流模块,点击按钮开始推流。
第3,视频录制模块,通过分析摄像头回调数据,进行图片对比,达到阀值,开始录制视频。

我更新了最新版本,分分支处理问题,测试结果如下:
小米4:只有推流功能和音频播放功能,测试一晚上没什么问题,现在还能正常推流,往音频播放的rtmp推数据,播放正常。
红米手机:手机随机录制视频,并拥有音频播放模块,平均每小时录制20段30秒的视频,经过一晚上,手机app奔溃,未捕获到异常日志。
三星A9:手机拥有播放音频功能、视频触发录制功能,推流功能,正常使用,发现预览数据相似度大于一个值开始录制(5-30秒视频),音频一直等待rtmp有效,然后点击推流,开始往一个地址推流,每次推流的地址不一样,经过一晚上,程序奔溃,bug日志如上。

我使用的是最新融合版,您看看我是那儿弄错了吗?

@LoginGit
Copy link
Author

录制的时候,从某一个时间点开始,视频大小均为258B,无效文件,这应该是app退到后台了吗?

@zanxiaofei
Copy link
Contributor

zanxiaofei commented Feb 15, 2017

你的IMediaPlayer的接口setOnCompletionListener是怎么使用的?
从你崩溃的log看是把这个listener置为了null但是,MediaPlayer内部又去notify导致的崩溃
崩溃的时机可能是,音频播放结束的时候,注册的listerner的对象被回收了

@LoginGit
Copy link
Author

我在setOnCompletionListener的Completion方法里面释放了播放器的资源,可能导致了这个错误,我重新修改了这部分代码,如果后期还有问题,我再提issues,但是我目前没有找到我录制视频时候只有258B的原因,我描述下这一个问题:我的代码会获取摄像头返回的byte数组,然后我做图片比对,当图片比对到底阀值的时候,说明我的设备前面有物体经过,那么我开始调用金山的录制开始录制视频,录制视频时长不超过30秒,当我把手机停留在前台,并且插上电源,我就下班了,因为我模拟这个过程,所以我使用外部条件,没3分钟会触发一次这个录制操作,在昨晚0:53 之后,录制的视频大小均为258B,但是录制视频持续到了早上8:52分我关闭程序,我早上进行推流,也推不上去流了,但是我全局捕获异常并没有得到任何异常,如果您们有思路,可以给我一点提示吗?我今天晚上再试一次。谢谢!

@LoginGit
Copy link
Author

我不录制视频我的app运行几天都没问题,我一加上录制视频,那就活不过一晚上,而且在主类里面全局trycatch 都捕获不到异常,我就对比图片后开始录制,对比图片的算法我可以运行好几天没问题,那就只能是录制的问题了,请问能不能给点提示

@zanxiaofei
Copy link
Contributor

zanxiaofei commented Feb 16, 2017

添加录制后崩溃的,麻烦给个log
我们这边也确认一下循环录制会不会有崩溃问题

@LoginGit
Copy link
Author

如果能在白天重现乐意贴bug,只是重现这个问题时机不确定,所以要贴日志真的好难

@zanxiaofei
Copy link
Contributor

这个跟白天晚上,没有关系吧,我看你的描述应该是循环录制的时候有问题,那你就开着循环录制,你一次录制多长时间,在大约这个时间看一下有没有崩溃就可以了

@LoginGit
Copy link
Author

嗯,是的,這個和時間没有关系,但是设备一直放那儿循环录制,我要看日志就得连着电脑,还不确定啥时候才奔溃,还有别的项目的事要做,我试试吧,,10秒循环录制试试。

@zanxiaofei
Copy link
Contributor

你只要连着电脑,adb logcat 把日志存起来就行了,不用一直盯着日志看

@LoginGit
Copy link
Author

1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecordJson(LogClient.java:200)
02-16 11:45:20.983 1352-1411/com.dragonfly A/art: art/runtime/java_vm_ext.cc:410] at com.ksy.statlibrary.log.LogClient.sendRecord(LogClient.java:287)

@zanxiaofei
Copy link
Contributor

这是崩溃吗?你把整个log发给我吧

@LoginGit
Copy link
Author

复现中,刚刚那个是奔溃了的信息,因为一直在打印,所以覆盖了,如果今天能复现并且得到日志,我贴到这里

@zanxiaofei
Copy link
Contributor

你用adb logcat 给存起来,应该不存在被覆盖掉的情况

@LoginGit
Copy link
Author

好的,我下午又复现了,我研究下存logcat,谢谢你的帮助。

@zanxiaofei
Copy link
Contributor

adb logcat -c & adb logcat -vtime >a.log
这个命令是执行一次log清楚,把带有时间的打印的log输出到当前目录的a.log里面

@sujia
Copy link

sujia commented Feb 16, 2017

@LoginGit 是否方便贴下你控制循环录制的代码?我这边在我们的demo里做修改,在推流的同时循环录制短视频。现在录制了300多个视频了,还没有复现你说的问题

@LoginGit
Copy link
Author

public void tempMethod(){
    if(true){
        ksyStream.startRecord(Util.getVideoName(Util.getUUID()));
        callbackHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                ksyStream.stopRecord();
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                tempMethod();
            }
        },10000);
    }
}

@LoginGit
Copy link
Author

我就简单的延时循环录制,你可以试试一晚上

@LoginGit
Copy link
Author

您那邊確定還是沒有復現,對嗎?
謝謝!

@sujia
Copy link

sujia commented Feb 17, 2017

@LoginGit 我昨晚跑了一晚上,录制确实出问题了,但程序并没有崩溃,貌似推流是OK的。跟你那边的现象一样吗?

@sujia
Copy link

sujia commented Mar 2, 2017

@LoginGit 循环录制的问题已在4.1.3版本修复

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants