我正在使用MediaRecorder通过
Android的Camera API录制视频.我遇到了一个非常奇怪的问题.
private void startRecordingVideo() { recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); File file = getAlbumDir(); recorder.setOutputFile(file.getAbsolutePath()); recorder.setMaxDuration(50000); recorder.setMaxFileSize(5000000); recorder.setPreviewDisplay(CameraBridgeViewBase.surfaceHolder.getSurface()); try { recorder.prepare(); recorder.start(); } catch (IllegalStateException | IOException e) { e.printStackTrace(); } }
现在这给了我MediaRecorder:启动失败:-19错误.我检查了this和this链接,它们表示要删除mediaRecorder.setVideoSize(sView.getWidth(),sView.getHeight());但我没有使用setVideoSize(sView.getWidth(),sView.getHeight()).有了尝试和错误,我发现如果我删除编码器recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);和recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);应用程序不会崩溃,但会给出新的异常:
03-23 16:50:06.213 28226-28226/com.scenera.android.surveillance E/MediaRecorder: audio source is set,but audio encoder is not set
我不明白我在这里做错了什么.任何帮助都会得到满足.提前致谢.
解决方法
问题是你没有设置相机,使用Camera 1 API,你应该先打开相机,然后将其解锁并将其设置到录像机.只有在那之后你才能继续配置MediaRecorder(这是一个非常漂亮的API写的)
MediaRecorder recorder = new MediaRecorder(); Camera camera = Camera.open(); camera.unlock(); recorder.setCamera(camera); recorder.setPreviewDisplay(surfaceHolder.getSurface()); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); File file = getAlbumDir(); recorder.setOutputFile(file.getAbsolutePath()); recorder.setMaxDuration(50000); recorder.setMaxFileSize(5000000); try { recorder.prepare(); recorder.start(); } catch (IllegalStateException | IOException e) { e.printStackTrace(); }