Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从摄像机捕获视频?_Android_Android Camera_Video Capture - Fatal编程技术网

Android 如何从摄像机捕获视频?

Android 如何从摄像机捕获视频?,android,android-camera,video-capture,Android,Android Camera,Video Capture,我想从camera Intent中捕获视频并保存在应用程序目录中(不要将视频保存在设备库中),然后将视频路径插入数据库以加载并显示在我的应用程序中 我在活动中尝试: public class VideoActivity extends Activity { private TblVideo TBL_VIDEO; private Uri fileUri; public static final int MEDIA_TYPE_VIDEO = 2; privat

我想从camera Intent中捕获视频并保存在应用程序目录中(不要将视频保存在设备库中),然后将视频路径插入数据库以加载并显示在我的应用程序中

我在活动中尝试:

    public class VideoActivity extends Activity {
    private TblVideo TBL_VIDEO;
    private Uri fileUri;
    public static final int MEDIA_TYPE_VIDEO = 2;
    private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;

    long date = System.currentTimeMillis();
    String string_path = DATABASE_LOCATION + LAST_MOMENT_ID + "_" + date + ".mp4";
    File mediaFile = new File(string_path);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);

        Button buttonRecording = (Button) findViewById(R.id.photo_btn_take_video);
        buttonRecording.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                try {
                    ContentValues values = new ContentValues();
                    fileUri = getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
                    Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
                    intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
                    fileUri = Uri.fromFile(mediaFile);
                    startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
                    getContentResolver().delete(fileUri, null, null);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    private String SaveMediaFile(int type) {
        if (type == MEDIA_TYPE_VIDEO) {
            FileOutputStream fileOutputStream = null;
            try {
                fileOutputStream = new FileOutputStream(mediaFile);
            } catch (Exception e) {
                displayToast(this, "خطای ذخیره ویدیو:" + "\n" + e.toString());
            } finally {
                try {
                    assert fileOutputStream != null;
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return string_path;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) {
            try {
                if (resultCode == RESULT_OK) {
                    insertVideo();
                } else if (resultCode == RESULT_CANCELED) {
                    displayToast(this, "ضبط لغو شد");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
但当转到文件目录时,视频大小是0Kb!!并保存到设备库中 如何解决这个问题?
谢谢,请尝试此应用程序,但应用程序已崩溃:

buttonRecording.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            try {
                ContentValues values = new ContentValues();
                fileUri = getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
                Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
                intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
                startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            fileUri = data.getData();
            FileOutputStream fileOutputStream = null;
            try {
                FileInputStream fileInputStream = new FileInputStream(fileUri.getPath());
                fileOutputStream = new FileOutputStream(mediaFile);
                byte[] buf = new byte[1024];
                int len;
                while ((len = fileInputStream.read(buf)) > 0) {
                    fileOutputStream.write(buf, 0, len);
                }
                fileInputStream.close();
                fileOutputStream.close();
                insertVideo();
                getContentResolver().delete(fileUri, null, null);
            } catch (Exception e) {
                displayToast(this, "خطای ذخیره ویدیو:" + "\n" + e.toString());
            } finally {
                try {
                    assert fileOutputStream != null;
                    fileOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } else if (resultCode == RESULT_CANCELED) {
            displayToast(this, "ضبط لغو شد");
        }
    }
}

我使用这个并保存视频文件后,活动结果是确定的,保存在目录中的视频

private String SaveMediaFile() {
    try {
        InputStream in = getContentResolver().openInputStream(fileUri); // Uri
        OutputStream out = new FileOutputStream(mediaFile); // file
        byte[] buf = new byte[1024];
        int len;
        assert in != null;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        out.close();
        in.close();
    } catch (Exception e) {
        displayToast(this, "خطای ذخیره ویدیو");
    }
    return string_path;
}

谢谢

“我想从摄像头中捕获视频并保存在应用程序目录中(不要将视频保存在设备库中)”--您没有执行这些操作的代码。您没有请求将视频保存在“应用程序目录”中,而是告诉
MediaStore
了解视频。谢谢-如何保存在我的应用程序目录中!?