2012-06-21 2 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

Смежные вопросы