MediaRecorder.stop()挂在Android 4.0(ICS)

Ada*_*dam 22 android hang mediarecorder android-4.0-ice-cream-sandwich

stop()在我的视频捕获活动中进行呼叫时,软件有时会挂起并且不会恢复生命.只有通过点击"返回"触发ANR才能让我杀死活动.

在日志中,我看到以下一行一遍又一遍地重复:

W/CameraSource(YYYYY):等待传入的摄像机视频帧超时:XXXXXX us

有没有人见过这种行为?任何解决方法?

vid*_*ida 5

我们长期以来一直在努力解决这个问题.我们刚刚从android开发者网站复制代码来捕获视频,但应用程序在调用mediarecorder.stop()之前挂起.经过几乎逐行调试,我发现了ff.行导致问题:

captureButton.setText("start");
Run Code Online (Sandbox Code Playgroud)

我已将其评论出来并停止使用mediarecorder将不再导致ANR.我所做的不是改变按钮的文本,而是改变背景.

captureButton.setBackgroundResource(R.drawable.icon_post_camera_record_main);
Run Code Online (Sandbox Code Playgroud)

没有看到你的代码,我不确定我们是否有相同的问题原因,但这解决了我的问题.我仍在搜索为什么这会发生在settext()而不是setBackgroundResource.我的猜测是它与背景/异步任务有关,但它仍然是猜测.


goo*_*ool 5

这也发生在我身上,因为我在记录器上执行stop()之前释放了相机。它还说明了错误消息“等待传入的摄像机视频帧超时”。它正在等待已经发布的相机。确保停止录像机-然后才释放相机:

mMediaRecorder.stop();
mMediaRecorder.release();

camera.stopPreview();
camera.release();
Run Code Online (Sandbox Code Playgroud)


sda*_*bet 0

我建议您在后台线程中执行此操作,这样即使该方法阻塞,您的应用程序也不会卡住stop()

    new Thread("STOP_RECORDER") {
        public void run() {
            Log.d(TAG, "Stopping recorder...");
            mediaRecorder.stop();
            Log.d(TAG, "Recorder successfully stopped");
        }
    }.start();
Run Code Online (Sandbox Code Playgroud)