Android:视频录制抛出错误

Android:视频录制抛出错误,android,video,Android,Video,因此,我尝试使用内置摄像头活动来录制视频,使用以下代码: Intent videoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); videoIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileURI); videoIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 60); startActivityForResult(v

因此,我尝试使用内置摄像头活动来录制视频,使用以下代码:

    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。

事实上,我在某些情况下发现了
MediaStore。额外的输出
无法正常工作, 因此,另一个窍门是,将捕获的视频文件存储在
onActivityResult()

activityresult上受保护的void(int-requestCode、int-resultCode、Intent-Intent){
super.onActivityResult(请求代码、结果代码、意图);
if(resultCode==RESULT\u OK)
{   
试一试{
AssetFileDescriptor videoAsset=getContentResolver().openAssetFileDescriptor(intent.getData(),“r”);
FileInputStream fis=videoAsset.createInputStream();
File videoFile=新文件(Environment.getExternalStorageDirectory(),“.mp4”);
FileOutputStream fos=新的FileOutputStream(视频文件);
字节[]缓冲区=新字节[1024];
整数长度;
而((长度=fis.read(缓冲区))>0){
fos.写入(缓冲区,0,长度);
}       
fis.close();
fos.close();
}捕获(IOE异常){
//TODO:句柄错误
}
}
}

试试上面的代码,让我知道你的成功。

事实上,我发现在某些情况下,
MediaStore。额外的输出
无法正常工作, 因此,另一个窍门是,将捕获的视频文件存储在
onActivityResult()

activityresult上受保护的void(int-requestCode、int-resultCode、Intent-Intent){
super.onActivityResult(请求代码、结果代码、意图);
if(resultCode==RESULT\u OK)
{   
试一试{
AssetFileDescriptor videoAsset=getContentResolver().openAssetFileDescriptor(intent.getData(),“r”);
FileInputStream fis=videoAsset.createInputStream();
File videoFile=新文件(Environment.getExternalStorageDirectory(),“.mp4”);
FileOutputStream fos=新的FileOutputStream(视频文件);
字节[]缓冲区=新字节[1024];
整数长度;
而((长度=fis.read(缓冲区))>0){
fos.写入(缓冲区,0,长度);
}       
fis.close();
fos.close();
}捕获(IOE异常){
//TODO:句柄错误
}
}
}

试试上面的代码,让我知道您的成功。

您是否尝试删除这一行videoIntent.putExtra(MediaStore.EXTRA\u OUTPUT,fileURI);之后它显示异常?是的,然后它工作正常。我看不出我的URI有什么问题。您是否尝试删除这行videoIntent.putExtra(MediaStore.EXTRA\u OUTPUT,fileURI);之后它显示异常?是的,然后它工作正常。我不知道我的URI有什么问题。这很有效!非常感谢,我从来没有想到过!谢谢你!天哪,安卓平台有多坏?非常感谢。这个错误出现在Galaxy S3(4.1.2)上,但在Nexus 5(5.0.1)上没有。为了获取图像,我应该在代码中编辑什么,因为获取图像会崩溃,我刚刚将格式从mp4更改为JPGT。这很好!非常感谢,我从来没有想到过!谢谢你!天哪,安卓平台有多坏?非常感谢。这个错误出现在Galaxy S3(4.1.2)上,但在Nexus 5(5.0.1)上没有。为了获取图像,我应该在代码中编辑什么,因为获取图像会崩溃,我刚刚将格式从mp4更改为jpg
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
         }
    }
 }