Android MediaStore.ACTION_VIDEO_CAPTURE,外部路径?

时间:2011-02-14 09:09:42

标签: android video

我使用MediaStore.ACTION_VIDEO_CAPTURE意图类捕获视频,存储在默认位置(图库)的视频,我想将视频存储在具有特定名称的特定位置。

我使用MediaStore.EXTRA_MEDIA_TITLEMediaStore.EXTRA_MEDIA_OUTPUT,但我没有在正确的位置获取视频,至少我需要录制视频的路径。

提前致谢。

2 个答案:

答案 0 :(得分:10)

来自Zelimir的解决方案在我的情况下不起作用(视频位于正确的位置,但大小为零字节)。所以我找到了另一个解决方案:

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
  super.onActivityResult(requestCode, resultCode, intent);

  if (resultCode != RESULT_OK) return;

  try {
    AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(intent.getData(), "r");
    FileInputStream fis = videoAsset.createInputStream();
    File tmpFile = new File(Environment.getExternalStorageDirectory(),"VideoFile.3gp"); 
    FileOutputStream fos = new FileOutputStream(tmpFile);

    byte[] buf = new byte[1024];
    int len;
    while ((len = fis.read(buf)) > 0) {
        fos.write(buf, 0, len);
    }       
    fis.close();
    fos.close();
  } catch (IOException io_e) {
    // TODO: handle error
  }

}

在这种情况下,MediaStore.EXTRA_OUTPUT和Uri不是必需的。

答案 1 :(得分:0)

技巧是在录制前将媒体插入数据库:

String fileName = "captureTemp.mp4";  
ContentValues values = new ContentValues();  
values.put(MediaStore.Video.Media.TITLE, fileName);  
cameraVideoURI = getContentResolver()
   .insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);  

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);  
intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraVideoURI);  
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, MAXIMUM_VIDEO_SIZE);               
startActivityForResult(intent, CAPTURE_VIDEO_INTENT);

然后onActivityResult()使用保存的cameraVideoUri来引用录制的视频:

String[] projection = 
   { MediaStore.Video.Media.DATA, MediaStore.Video.Media.SIZE }; 
Cursor cursor = managedQuery(cameraVideoURI, projection, null, null, null); 
int column_index_data =
   cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA); 
int column_index_size =
   cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE); 
cursor.moveToFirst(); 
String recordedVideoFilePath = cursor.getString(column_index_data);
int recordedVideoFileSize = cursor.getInt(column_index_size);