1

したがって、組み込みのカメラ アクティビティを使用して、以下のコードを使用してビデオを録画しようとしています。

    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);

デバッグ中、fileURI の値は file:///mnt/sdcard/Spootur/Videos/c14e0eb2-0737-4931-9898-e85d10bab74e.mp4 であり、videoIntent の mExtras 値は次のとおりです。

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

録画を開始すると問題なく動作しますが、録画ボタンを再度クリックして録画を停止すると、カメラ アプリは次のメッセージをスローします。

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)

これを引き起こしている可能性のあるものと、それを修正する方法についてのアイデアはありますか? ありがとう!

また、記録されたビデオ ファイルがその URI にあることを確認できます。

4

1 に答える 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
         }
    }
 }

上記のコードを試して、あなたの成功について知らせてください。

于 2012-05-11T05:27:52.603 に答える