mum*_*mum 7 android android-camera
我的代码设置了MediaRecorder,它在行集质量上显示错误
mMediaRecorder = new MediaRecorder();
// Step 1: Unlock and set camera to MediaRecorder
mCamera.stopPreview();
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setProfile(CamcorderProfile .get(CamcorderProfile.QUALITY_HIGH));
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
// Step 4: Set output file
mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString());
// Step 5: Set the preview output
mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());
// Step 6: Prepare configured MediaRecorder
try {
mMediaRecorder.prepare();
Log.d("DEBUG", "IllegalStateException preparing MediaRecorder: "
+ e.getMessage());
releaseMediaRecorder();
return false;
} catch (IOException e) {
Log.d("DEBUG",
"IOException preparing MediaRecorder: " + e.getMessage());
releaseMediaRecorder();
return false;
}
Run Code Online (Sandbox Code Playgroud)
例如:
java.lang.IllegalStateException
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
java.lang.IllegalStateException
at android.media.MediaRecorder.setOutputFormat(Native Method)
at android.media.MediaRecorder.setProfile(MediaRecorder.java:366)
at jp.osaka.E028.prepareVideoRecorder(E028.java:1441)
at jp.osaka.E028.access$16(E028.java:1403)
at jp.osaka.E028$6.onClick(E028.java:344)
at android.view.View.performClick(View.java:3517)
at android.view.View$PerformClick.run(View.java:14155)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4503)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
设置MediaRecorder时为什么显示错误IllegalStateException?
Nan*_*oka 17
实际上你做了mMediaRecorder.setOutputFormat()两次:一次明确地mMediaRecorder.setProfile()再次尝试再次执行它,就像你在stacktrace中看到的那样.
Android Media Recorder对于类似的东西具有非常低的稳健性.
所以删除说的行
mMediaRecorder.setOutputFormat();
Run Code Online (Sandbox Code Playgroud)
而错误应该消失.顺便说一下.去掉
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
Run Code Online (Sandbox Code Playgroud)
这也是mMediaRecorder.setProfile()已经完成的事情.
您可能需要在MediaRecorder启动之前释放相机对象,例如:
private void releaseCamera() {
if (myCamera != null) {
// Release the camera object so other classes can use it.
myCamera.release();
myCamera = null;
}
}
Run Code Online (Sandbox Code Playgroud)
在启动MediaRecorder方法之前调用上述方法.
重要提示:此外,必须按以下顺序调用以下方法:
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setVideoSize(640,480);
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
Run Code Online (Sandbox Code Playgroud)
这里的重要部分是那个setVideoEncoder并且setAudioEncoder被称为最后一个.
| 归档时间: |
|
| 查看次数: |
9345 次 |
| 最近记录: |