2012-06-21 73 views
1

我想在android(2.3.3)上删除一个相机应用程序。使用eclipse和android模拟器(所以没有设备)。我的应用程序有两个功能:拍照和拍摄视频。只需一个开关按钮即可改变模式。第一个工作正常,但视频有问题。模拟器上的Android视频捕获

第一个错误是:“在无效状态下调用的setOutputFormat:4”。尝试设置MediaRecorder的输出格式。如果我忽略这个(使其成为一个注释行)然后我得到的“媒体服务器死了,摄像机服务器死亡”的错误(错误100)

我是一个新的Android开发人员,所以我只是用这个教程:http://developer.android.com/guide/topics/media/camera.html

这些错误的原因可能是,我试图用没有设备测试?

这里是清单permissinos:

<uses-sdk android:minSdkVersion="10" /> 

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera" android:required="false" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.RECORD_VIDEO"/> 

这里是发生这些错误代码:

private boolean prepareVideoRecorder() { 


    mMediaRecorder = new MediaRecorder(); 
    mMediaRecorder.reset(); 

    // Unlock and set camera to MediaRecorder 
    mCamera.unlock(); 
    mMediaRecorder.setCamera(mCamera); 

    // Set sources 
    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 


    // Set output format and encoding 
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); 

    // Set a CamcorderProfile (requires API Level 8 or higher) 
    mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 


    // Set output file 
    mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString()); 

    // Set the preview output 
    mMediaRecorder.setPreviewDisplay(mPreview.getmHolder().getSurface()); 

    // Prepare configured MediaRecorder 
    try { 
     mMediaRecorder.prepare(); 
    } catch (IllegalStateException e) { 
     Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage()); 
     releaseMediaRecorder(); 
     return false; 
    } catch (IOException e) { 
     Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage()); 
     releaseMediaRecorder(); 
     return false; 
    } 
    return true; 
} 

private void videoRecording() { 
    if (isRecording) { 
     // stop recording and release camera 
     mMediaRecorder.stop(); // stop the recording 
     releaseMediaRecorder(); // release the MediaRecorder object 
     mCamera.lock();   // take camera access back from MediaRecorder 

     // inform the user that recording has stopped 
     captureButton.setText(R.string.capture); 
     isRecording = false; 
    } else { 
     // initialize video camera 
     if (prepareVideoRecorder()) { 
      // Camera is available and unlocked, MediaRecorder is prepared, 
      // now you can start recording 
      mMediaRecorder.start(); 

      captureButton.setText(R.string.stop); 
      isRecording = true; 
     } else { 
      // prepare didn't work, release the camera 
      releaseMediaRecorder(); 
     } 
    } 
} 

这里是logcat的输出:

06-21 16:27:24.034: E/MediaRecorder(329): setOutputFormat called in an invalid state: 4 
06-21 16:27:24.034: D/AndroidRuntime(329): Shutting down VM 
06-21 16:27:24.054: W/dalvikvm(329): threadid=1: thread exiting with uncaught exception  (group=0x40015560) 
06-21 16:27:24.054: E/AndroidRuntime(329): FATAL EXCEPTION: main 
06-21 16:27:24.054: E/AndroidRuntime(329): java.lang.IllegalStateException 
06-21 16:27:24.054: E/AndroidRuntime(329): at android.media.MediaRecorder.setOutputFormat(Native Method) 
06-21 16:27:24.054: E/AndroidRuntime(329): at android.media.MediaRecorder.setProfile(MediaRecorder.java:286) 
06-21 16:27:24.054: E/AndroidRuntime(329): at com.bor.Fotograf.AndroidFotoActivity.prepareVideoRecorder(AndroidFotoActivity.java:221) 
06-21 16:27:24.054: E/AndroidRuntime(329): at com.bor.Fotograf.AndroidFotoActivity.videoRecording(AndroidFotoActivity.java:257) 
06-21 16:27:24.054: E/AndroidRuntime(329): at com.bor.Fotograf.AndroidFotoActivity.access$9(AndroidFotoActivity.java:245) 
06-21 16:27:24.054: E/AndroidRuntime(329): at com.bor.Fotograf.AndroidFotoActivity$6.onClick(AndroidFotoActivity.java:107) 
06-21 16:27:24.054: E/AndroidRuntime(329): at android.view.View.performClick(View.java:2485) 
06-21 16:27:24.054: E/AndroidRuntime(329): at android.view.View$PerformClick.run(View.java:9080) 
06-21 16:27:24.054: E/AndroidRuntime(329): at android.os.Handler.handleCallback(Handler.java:587) 
06-21 16:27:24.054: E/AndroidRuntime(329): at android.os.Handler.dispatchMessage(Handler.java:92) 
06-21 16:27:24.054: E/AndroidRuntime(329): at android.os.Looper.loop(Looper.java:123) 
06-21 16:27:24.054: E/AndroidRuntime(329): at android.app.ActivityThread.main(ActivityThread.java:3683) 
06-21 16:27:24.054: E/AndroidRuntime(329): at java.lang.reflect.Method.invokeNative(Native Method) 
06-21 16:27:24.054: E/AndroidRuntime(329): at java.lang.reflect.Method.invoke(Method.java:507) 
06-21 16:27:24.054: E/AndroidRuntime(329): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
06-21 16:27:24.054: E/AndroidRuntime(329): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
06-21 16:27:24.054: E/AndroidRuntime(329): at dalvik.system.NativeStart.main(Native Method) 

回答

0

至于你说的,您需要有一个设备来测试视频和麦克风功能,srry!

也许你可以尝试使用虚拟机,你可以尝试安装它。

在这里你可以找到如何安装虚拟机;)

http://osxdaily.com/2012/02/23/android-4-ics-virtualbox/

+1

我认为你是正确的,但我想,我不能测试,但仍然我没有得到这个错误。我会尝试你的建议谢谢你。 – buttib

+1

这不是问题的答案。我在Samsung Ace todey上测试过它。错误仍然存​​在。我同意你的意见,我需要一个设备来测试,但错误还有另一个原因, – buttib