2012-05-11 81 views
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所具有的價值:文件:// /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}] 

當我開始錄製,它會很好,但是當我reclick的錄製按鈕停止錄製,相機應用程序會拋出:

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。

+0

您是否嘗試刪除此行videoIntent.putExtra(MediaStore.EXTRA_OUTPUT,fileURI); 之後它顯示異常? – user370305

+0

是的,然後它工作正常。我沒有看到我的URI有什麼問題。 –

回答

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 
     } 
    } 
} 

捕獲的視頻文件試試上面的代碼,讓我知道你的成功。

+0

這很好!非常感謝,我從來沒有想到這一點! –

+1

感謝您的支持!聖牛,Android平臺有多破? –

+0

非常感謝。這個錯誤顯示在Galaxy S3(4.1.2)上,但不是在Nexus 5(5.0.1) – Odaym