내 응용 프로그램 용 비디오 레코더 기능을 만들고 있습니다.탭 (Nexus 7)의 비디오 녹화가 실패합니다.
private boolean prepareCameraRecorder() {
// BEGIN_INCLUDE (configure_preview)
int numCameras = Camera.getNumberOfCameras();
int camId = 0;
if (numCameras == 1) {
PackageManager pm = getPackageManager();
boolean frontCam = pm
.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT);
boolean rearCam = pm
.hasSystemFeature(PackageManager.FEATURE_CAMERA);
if (frontCam) {
camera = CameraHelper.getDefaultFrontFacingCameraInstance();
camId = Camera.CameraInfo.CAMERA_FACING_BACK;
} else if (rearCam) {
camera = CameraHelper.getDefaultBackFacingCameraInstance();
camId = Camera.CameraInfo.CAMERA_FACING_FRONT;
}
} else if (numCameras == 2) {
if (CAMERA_TYPE == CAMERA_FRONT) {
Utils.getInstance().printDebug("displaying front camera ");
camera = CameraHelper.getDefaultFrontFacingCameraInstance();
camId = Camera.CameraInfo.CAMERA_FACING_FRONT;
} else if (CAMERA_TYPE == CAMERA_BACK) {
Utils.getInstance().printDebug("displaying back camera ");
camera = CameraHelper.getDefaultBackFacingCameraInstance();
camId = Camera.CameraInfo.CAMERA_FACING_BACK;
}
}
// We need to make sure that our preview and recording video size are
// supported by the
// camera. Query camera to find all the sizes and choose the optimal
// size given the
// dimensions of our preview surface.
parameters = camera.getParameters();
List<Camera.Size> mSupportedPreviewSizes = parameters
.getSupportedPreviewSizes();
Camera.Size optimalSize = CameraHelper.getOptimalPreviewSize(
mSupportedPreviewSizes, cameraView.getWidth(),
cameraView.getHeight());
// Use the same size for recording profile.
// Check profile in tab:
int profile = -1;
// set camera profile
if (CamcorderProfile.hasProfile(camId, CamcorderProfile.QUALITY_HIGH)) {
profile = CamcorderProfile.QUALITY_HIGH;
} else if (CamcorderProfile.hasProfile(camId,
CamcorderProfile.QUALITY_480P)) {
profile = CamcorderProfile.QUALITY_480P;
} else if (CamcorderProfile.hasProfile(camId,
CamcorderProfile.QUALITY_720P)) {
profile = CamcorderProfile.QUALITY_720P;
} else if (CamcorderProfile.hasProfile(camId,
CamcorderProfile.QUALITY_1080P)) {
profile = CamcorderProfile.QUALITY_1080P;
} else if (CamcorderProfile.hasProfile(camId,
CamcorderProfile.QUALITY_CIF)) {
profile = CamcorderProfile.QUALITY_CIF;
} else if (CamcorderProfile.hasProfile(camId,
CamcorderProfile.QUALITY_LOW)) {
profile = CamcorderProfile.QUALITY_LOW;
} else if (CamcorderProfile.hasProfile(camId,
CamcorderProfile.QUALITY_QCIF)) {
profile = CamcorderProfile.QUALITY_QCIF;
} else if (CamcorderProfile.hasProfile(camId,
CamcorderProfile.QUALITY_QVGA)) {
profile = CamcorderProfile.QUALITY_QVGA;
}
//
CamcorderProfile camProfile = null;
camProfile = CamcorderProfile.get(camId, profile);
if (profile != -1) {
Utils.getInstance().printDebug("profile: " + profile);
camProfile.videoFrameWidth = optimalSize.width;
camProfile.videoFrameHeight = optimalSize.height;
parameters.setPreviewSize(optimalSize.width, optimalSize.height);
camera.setParameters(parameters);
parameters = camera.getParameters();
}
// else {
// parameters.setPreviewSize(100, 100);
// camera.setParameters(parameters);
// }
try {
camera.stopPreview();
camera.setPreviewCallback(null);
} catch (Exception e) {
// ignore: tried to stop a non-existent preview
}
// set preview size and make any resize, rotate or
// reformatting changes here
// start preview with new settings
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
camera.setDisplayOrientation(90);
} catch (Exception e) {
Utils.getInstance().printDebug(
"Error starting camera preview: " + e.getMessage());
}
// BEGIN_INCLUDE (configure_media_recorder)
mediaRecorder = new MediaRecorder();
mediaRecorder.reset();
// Step 1: Unlock and set camera to MediaRecorder
camera.unlock();
mediaRecorder.setCamera(camera);
// Step 2: Set sources
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
if (profile != -1) {
mediaRecorder.setProfile(camProfile);
}
try {
// Step 4: Set output file
selFilePath = CameraHelper.getOutputMediaFile(
CameraHelper.MEDIA_TYPE_VIDEO).toString();
mediaRecorder.setOutputFile(selFilePath);
Utils.getInstance().printDebug("selFilePath: " + selFilePath);
// Step 5: Prepare configured MediaRecorder
// if (profile == -1) {
// mediaRecorder.setVideoFrameRate(30);
// }
mediaRecorder.setOrientationHint(90);
//mediaRecorder.setVideoSize(optimalSize.width, optimalSize.height);
//mediaRecorder.setVideoFrameRate(10);
// mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
// mediaRecorder.setAudioEncodingBitRate(192000);
// mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
// mediaRecorder.setVideoEncodingBitRate(12000000);
// mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.prepare();
} catch (IllegalStateException e) {
Log.d(TAG,
"IllegalStateException preparing MediaRecorder: "
+ e.getMessage());
e.printStackTrace();
releaseMediaRecorder();
return false;
} catch (Exception e) {
Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage());
releaseMediaRecorder();
return false;
}
return true;
}
private void startVideo(){
mediaRecorder.start()
}
내가 전화 (모바일 기기)에서 실행하고 있지만 넥서스 7 (태블릿의) 주에 실패 할 경우 잘 작동이 코드 : 넥서스 나는 카메라와 미디어 레코더 API를 준비하기위한 다음 코드를 사용했다 7에는 사용할 수있는 전면 카메라 만 있습니다.
이 오류이며 로그가 발생했습니다
01-18 19 : 31 : 30.597 : E/MediaRecorder (25847) : 시작 실패 : -19
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : 치명적인 예외 : 주
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : 프로세스 : com.appsplanet.beasting366, PID : 25847
01-18 19:31 : 31.647 : E/AndroidRuntime (25847) : java.lang.RuntimeException : 시작하지 못했습니다.
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : android.media.MediaRecorder.start (기본 메소드)
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : at com .appsplanet.beasting366.ActivityVideoRecord.startVideoRecord (ActivityVideoRecord.java:633)
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : com.appsplanet.beasting366.ActivityVideoRecord.access $ 6 (ActivityVideoRecord.java:620))
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : com.appsplanet.beasting366.ActivityVideoRecord $ 2.onClick (ActivityVideoRecord.java:581)
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : android.view.View.performClick (View.java:4438)
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : android.view.View $ PerformClick.run (View.java:18422)
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : android.os.Handler.handleCallback (Handler.java:733)
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : android.os.Handler.dispatchMessage (Handler.java:95)
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : android.os.Looper.loop (Looper.java:136)
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : android.app.ActivityThread.main ActivityThread.java:5017)
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : java.lang.reflect.Method.invokeNative (기본 메소드)
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : a (java.lang.reflect.Method.invoke (Method.java:515)
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:779)
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : com.android.internal.os.ZygoteInit.main (ZygoteInit.java:595)
01-18 19 : 31 : 31.647 : E/AndroidRuntime (25847) : at dalvik.system.NativeStart.main (기본 메소드)
누구든지이 문제를 해결할 수 있습니까?
감사 Ishan의 자이나교
충돌 전에 로그를 게시 할 수 있습니까? 'ActivityVideoRecord.prepareCameraRecorder()'가 성공적으로 끝났습니까? 노출 된 코드에 'private void startVideo()'가있는 동안 로그에 'ActivityVideoRecord.startVideoRecord()'가 표시되는 이유는 무엇입니까? 'ActivityVideoRecord.java'의 633 행에는 무엇이 있습니까? –