Ошибка VerifiyAndSetParameter при попытке записать видео

Я пытался создать приложение, которое записывает и загружает видео в корзину S3. Я использовал (с небольшими изменениями) захват видео Android статья о намерениях. но когда запись заканчивается, я получаю список ошибок. (Я использую телефон Galaxy S2, поэтому он поддерживается).

Код для CameraActivity:

        Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
        fileUri = SavingMedia
                .getOutputMediaFileUri(SavingMedia.MEDIA_TYPE_VIDEO);
        path = fileUri.toString();

        intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 30);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
        intent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION,
                ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0.2);

        startActivityForResult(intent, CAPTURE_VIDEO_REQUEST_CODE);

Вывод LogCat:

05-08 10:46:31.875: E/CameraInput(2595): Recording is not ready (iPeer 0xfbb3c iState 2 iWriteState 1 iClockState 0), frame dropped
05-08 10:46:31.910: E/CameraInput(2595): Recording is not ready (iPeer 0xfbb3c iState 2 iWriteState 1 iClockState 0), frame dropped
05-08 10:46:31.945: E/CameraInput(2595): Recording is not ready (iPeer 0xfbb3c iState 2 iWriteState 1 iClockState 0), frame dropped
05-08 10:46:31.975: E/CameraInput(2595): Recording is not ready (iPeer 0xfbb3c iState 2 iWriteState 1 iClockState 0), frame dropped
05-08 10:46:33.455: E/yamaha::media::Parameters(2595): SalesCode = PTR
05-08 10:46:33.705: E/CameraInput(2595): Unsupported parameter(x-pvmf/media-input-node/cap-config-interface;valtype=key_specific_value)
05-08 10:46:33.705: E/CameraInput(2595): VerifiyAndSetParameter failed on parameter #0
05-08 10:46:33.705: E/audio_input(2595): unsupported parameter: x-pvmf/media-input-node/cap-config-interface;valtype=key_specific_value
05-08 10:46:33.705: E/audio_input(2595): VerifyAndSetParameter failed
05-08 10:46:33.740: E/AndroidRuntime(29786): FATAL EXCEPTION: main
05-08 10:46:33.740: E/AndroidRuntime(29786): java.lang.NullPointerException
05-08 10:46:33.740: E/AndroidRuntime(29786):    at java.io.File.fixSlashes(File.java:205)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at java.io.File.init(File.java:189)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at java.io.File.<init>(File.java:139)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at com.sec.android.app.camera.CamcorderEngine.renameTempFile(CamcorderEngine.java:1206)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at com.sec.android.app.camera.CamcorderEngine.doStopVideoRecordingSync(CamcorderEngine.java:812)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at com.sec.android.app.camera.CeStateRecording.handleRequest(CeStateRecording.java:69)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at com.sec.android.app.camera.CeRequestQueue.startFirstRequest(CeRequestQueue.java:123)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at com.sec.android.app.camera.CeRequestQueue.access$200(CeRequestQueue.java:32)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at com.sec.android.app.camera.CeRequestQueue$MainHandler.handleMessage(CeRequestQueue.java:60)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at android.os.Looper.loop(Looper.java:123)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at android.app.ActivityThread.main(ActivityThread.java:3691)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at java.lang.reflect.Method.invokeNative(Native Method)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at java.lang.reflect.Method.invoke(Method.java:507)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
05-08 10:46:33.740: E/AndroidRuntime(29786):    at dalvik.system.NativeStart.main(Native Method)
05-08 10:46:33.770: E/(2806): Dumpstate > /data/log/dumpstate_app_error

person thepoosh    schedule 08.05.2012    source источник


Ответы (2)


Приятель, вы должны увидеть ответ на следующий вопрос. Это работает для меня и определенно работает для вас.

Android: ошибка записи видео

ПРИМЕЧАНИЕ. У меня такая же ошибка, как показано ниже.

на com.sec.android.app.camera.CamcorderEngine.renameTempFile(CamcorderEngine.java:1206)

Решение. Работает в Android 2.2, 2.3... Я выполнил следующий процесс для захвата фотографии.

int CAMERA_WITH_VIDEO_DATA = 2;
//start photo capture activity...

 Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE, null);
 startActivityForResult(intent, CAMERA_WITH_VIDEO_DATA);

....
....

private void saveVideoFileOnActivityResult(Intent videoIntent){
   FileInputStream fis = null;
   FileOutputStream fos = null;
   File mCurrentVideoFile = null;
   try {
         mCurrentVideoFile = new File("path_to_your_file");
         AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(videoIntent.getData(), "r");
         fis = videoAsset.createInputStream();
         //File videoFile = new File(Environment.getExternalStorageDirectory(),"<VideoFileName>.mp4"); 
         fos = new FileOutputStream(mCurrentVideoFile);

         byte[] buffer = new byte[1024];
         int length;
         while ((length = fis.read(buffer)) > 0) {
               fos.write(buffer, 0, length);
          }       
         //fis.close();
         //fos.close();
   } catch (IOException e) {
      // TODO: handle error
     e.printStackTrace();
   }finally{
       try {
           if(fis!=null)
              fis.close();
           if(fos!=null)
              fos.close();
       } catch (Exception e2) {
        // TODO: handle exception
        e2.printStackTrace();
       }
   } 
   }
....
....

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case CAMERA_WITH_VIDEO_DATA:
//pass data to above method to save it.
saveVideoFileOnActivityResult(data);
break;

default:
break;
}
}
person Vatsalengg    schedule 15.05.2012

Хорошо, я усовершенствовал свой Logcat, чтобы увидеть, где начинается ошибка, и первая строка, в которой программа не работает, выглядит так:

05-08 10:46:33.740: E/AndroidRuntime(29786):    at com.sec.android.app.camera.CamcorderEngine.renameTempFile(CamcorderEngine.java:1206)

Быстрый поиск в Google привел меня к этому месту , и, по-видимому, MediaStore.EXTRA_OUTPUT НЕ работает правильно и имеет проблемы.

это ответ, который был написан там:

На самом деле, я обнаружил, что в некоторых случаях MediaStore.EXTRA_OUTPUT не работает должным образом, ТАК другой способ заключается в том, чтобы сохранить захваченный видеофайл в onActivityResult()

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
   super.onActivityResult(requestCode, resultCode, intent);

   if (resultCode == RESULT_OK) {   
      try {
          AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(intent.getData(), "r");
          FileInputStream fis = videoAsset.createInputStream();
          File videoFile = new File(Environment.getExternalStorageDirectory(),"<VideoFileName>.mp4"); 
          FileOutputStream fos = new FileOutputStream(videoFile);

          byte[] buffer = new byte[1024];
          int length;
          while ((length = fis.read(buffer)) > 0) {
             fos.write(buffer, 0, length);
         }       
         fis.close();
         fos.close();
         } catch (IOException e) {
            // TODO: handle error
        }
   }
}
person thepoosh    schedule 16.05.2012