Android:视频录制抛出错误

标签 android video

所以我尝试使用内置的相机 Activity 使用以下代码录制视频:

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

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

关于Android:视频录制抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10545760/

相关文章:

java - Servlet 视频流,但视频未显示,音频正常

java - 数据不会插入并显示在我的应用程序上 |安卓工作室

android - 如何阻止屏幕方向并仍然获得方向更改通知

android - 如何在 android 中以编程方式将样式和主题设置为线性布局?

ios - 取消 webView 后,webView 中嵌入的视频仍在播放 - iOS

javascript - 如何在 Impress.js 上聚焦幻灯片时取消视频静音

PHP如何检查openload视频是否存在?

java - 如何构建一个播放视频的 Android 小部件

java - 字符串到 key 转换/反之亦然

android - 用 picasso 调整图像大小