Android - 录制视频后停止和重置相机时的致命信号 11
Posted
技术标签:
【中文标题】Android - 录制视频后停止和重置相机时的致命信号 11【英文标题】:Android - Fatal Signal 11 when stopping and resetting camera after recording video 【发布时间】:2016-08-15 07:58:00 【问题描述】:我目前有一个正在尝试录制视频的应用程序,使用以下方法来初始化相机:
private void initRecorder(Surface surface) throws IOException
if (mCamera == null)
mCamera = Camera.open();
mCamera.unlock();
if (mMediaRecorder == null) mMediaRecorder = new MediaRecorder();
mMediaRecorder.setPreviewDisplay(surface);
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setVideoEncodingBitRate(512 * 1000);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setVideoSize(640, 480);
mMediaRecorder.setOutputFile(videoFile);
try
mMediaRecorder.prepare();
catch (IllegalStateException e)
e.printStackTrace();
initSuccess = true;
当我尝试停止摄像头或调用surfaceDestroyed
时,我调用以下方法:
private void resetCamera()
mMediaRecorder.stop();
mMediaRecorder.reset();
mMediaRecorder.release();
mCamera.release();
mCamera = null;
try
initRecorder(mHolder.getSurface());
catch (IOException e)
e.printStackTrace();
但是,在这段代码的某处,我收到了致命信号 11 错误。显然该代码试图非法访问一部分内存。
我想知道如何解决这个错误?
这是从我开始录制视频到我停止录制的 Logcat 转储:
D/dalvikvm: GC_FOR_ALLOC freed 1309K, 27% free 7434K/10168K, paused 9ms, total 9ms
I/dalvikvm: Could not compile trace for Ljava/util/Arrays;fill, offset 5
I/dalvikvm: ++++++++++++++++++++++++++++++++++++++++++++
I/dalvikvm: JIT_INFO: ME Issues while compiling trace Ljava/util/Arrays;fill, offset 5
I/dalvikvm: The trace provoked a spill.
I/dalvikvm: Trying less registerization from 1 to 0
D/dalvikvm: GC_FOR_ALLOC freed 1415K, 27% free 7438K/10168K, paused 10ms, total 10ms
A/libc: Fatal signal 11 (SIGSEGV) at 0x00000010 (code=1), thread 13774 (arch.treadmill3)
【问题讨论】:
发布错误的完整日志(我知道这不是 java 跟踪,但有时其中的其他信息很有用)。 我遇到了完全相同的问题。你解决了吗? 【参考方案1】:在 mMediaRecorder.release() 之后;你必须写 mMediaRecorder = null;因为 release() 方法似乎很少有错误。 像这样:
if (mMediaRecorder != null)
mMediaRecorder.stop();
mMediaRecorder.reset();
mMediaRecorder.release();
mMediaRecorder = null;
【讨论】:
以上是关于Android - 录制视频后停止和重置相机时的致命信号 11的主要内容,如果未能解决你的问题,请参考以下文章
Android多媒体功能开发(13)——使用MediaRecorder类录制视频