Вопрос по video, android – Android: ошибка записи видео

1

Поэтому я пытаюсь использовать встроенную камеру для записи видео, используя следующий код:

<code>    Intent videoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    videoIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileURI);
    videoIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 60);
    startActivityForResult(videoIntent, VIDEO_ACTIVITY);
</code>

Во время отладки fileURI имеет значение: file: ///mnt/sdcard/Spootur/Videos/c14e0eb2-0737-4931-9898-e85d10bab74e.mp4, а videoIntent имеет значение mExtras:

<code>Bundle[{output=file:///mnt/sdcard/Spootur/Videos/c14e0eb2-0737-4931-9898-e85d10bab74e.mp4, android.intent.extra.durationLimit=60}]
</code>

Когда я начинаю запись, все идет нормально, но когда я нажимаю кнопку записи, чтобы остановить запись, приложение камеры выдает следующее:

<code>05-11 01:08:11.325: E/AndroidRuntime(3748):     at com.sec.android.app.camera.CamcorderEngine.renameTempFile(CamcorderEngine.java:1352)
05-11 01:08:11.325: E/AndroidRuntime(3748):     at com.sec.android.app.camera.CamcorderEngine.doStopVideoRecordingSync(CamcorderEngine.java:849)
05-11 01:08:11.325: E/AndroidRuntime(3748):     at com.sec.android.app.camera.CeStateRecording.handleRequest(CeStateRecording.java:69)
05-11 01:08:11.325: E/AndroidRuntime(3748):     at com.sec.android.app.camera.CeRequestQueue.startFirstRequest(CeRequestQueue.java:123)
05-11 01:08:11.325: E/AndroidRuntime(3748):     at com.sec.android.app.camera.CeRequestQueue.access$200(CeRequestQueue.java:32)
05-11 01:08:11.325: E/AndroidRuntime(3748):     at com.sec.android.app.camera.CeRequestQueue$MainHandler.handleMessage(CeRequestQueue.java:60)
</code>

Есть идеи, что может быть причиной этого и как это исправить? Спасибо!

Также: я могу подтвердить, что записанный видеофайл находится по этому URI.

Вы пытались удалить эту строку videoIntent.putExtra (MediaStore.EXTRA_OUTPUT, fileURI); после этого это показывает исключение? user370305
Да, и тогда все работает нормально. Я не вижу, в чем проблема с моим URI. K. Barresi

Ваш Ответ

1   ответ
10

На самом деле, я нашел в каком-то случае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
         }
    }
 }

Попробуйте приведенный выше код и дайте мне знать о вашем успехе.

Большое спасибо. Эта ошибка появлялась на Galaxy S3 (4.1.2), но не на Nexus 5 (5.0.1)
Спасибо за это! Святая корова, насколько сломанной может быть платформа Android?
Это прекрасно работает! Большое спасибо, я бы никогда не подумал об этом! K. Barresi
для получения изображений, что я должен отредактировать в вашем коде, осторожно, чтобы он вылетал при получении изображения, я просто изменил формат с mp4 на jpg

Похожие вопросы