当前位置: 首页 > 知识库问答 >
问题:

如何从相机意图中捕获视频?

杜辰龙
2023-03-14

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

我在活动中尝试:

    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!!并保存到设备库如何解决这个问题?谢谢

共有2个答案

路阳华
2023-03-14

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

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

谢啦

漆雕皓轩
2023-03-14

试试这个,但应用程序崩溃了:

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, "ضبط لغو شد");
        }
    }
}
 类似资料:
  • 我已经开发了一个应用程序来拍摄一张照片并保存在画廊里。我在网上搜索过,我能练习的最简单的方法就是使用。下面是从相机上拍照的代码。注意,我在这个类中使用的是fragment。 获取捕获的图像并将其转换为字符串 我将字符串保存到全局变量中,以便其他活动可以访问它。在另一个活动中,我有一个按钮,通过访问图像字符串将图像保存到文件夹/图库中。 它可以将图像保存到文件夹/图库中......但是图像质量很低.

  • 我已经被困在相机里6天了,但没有得到任何适当的解决方案。当我通过相机意图捕获图像时,图像正在旋转。我试图修复方向,但有时它没有在onActivityResult()中给出位图值。当我尝试在ImageView中设置图像时,它会显示一个黑色屏幕。这是我的密码请帮帮我- 我得到的图像在横向模式,但不是在potrait模式。相机预览在拍摄图像后自动旋转90度。

  • 我有以下代码,它要求用户从照片应用程序中选择一个图像或通过相机应用程序捕捉一个图像: 和OnActivityResult的代码:

  • 在lollipop和更高版本中从相机捕获图像时,在OnActivityResult上获得结果数据null。 launchCamera(); getOutputMediaFileUri() getOutputMediaFile()

  • 我有一个海康威视IP摄像机内置的人计数应用程序。我正在尝试构建一个桌面/Web应用程序,它读取通过的人数并对其进行处理。我只想知道我怎样才能知道这些人的数量,不管用什么编程语言。相机型号为海康威视IDS-2CD6412FWD/C。任何回答都很重要。谢谢你。

  • 如何获取相机捕获的原始图像的路径或uri。当我使用下面的代码时,它会返回google文档中提到的原始图像的缩略图。我想要原始图像的路径或uri。 我使用了以下代码,但它返回一个缩略图。