Android,关于摄像头开发问题求指导!

程序需要调用摄像头,完成录像功能,要求在录制时可以对**视频质量**(分辨率,编码器,格式的MP4或3GP,码率,帧率)进行设置!(类似LG相机)

该回答引用ChatGPT

实现 Android 摄像头开发需要使用 Android 提供的 Camera API 或 Camera2 API。以下是一些基本步骤:

  • 获取 Camera 实例:通过调用 Camera.open() 方法获取 Camera 实例,该方法接受一个参数表示要使用哪个摄像头(前置或后置)。
  • 配置 Camera 参数:通过 Camera.Parameters 类来配置摄像头参数,例如设置分辨率、码率、帧率等。
  • 预览摄像头:使用 SurfaceView 或 TextureView 等预览摄像头画面。
  • 录制视频:使用 MediaRecorder 类来录制视频,可以通过 setVideoSize()、setVideoEncodingBitRate()、setOutputFormat()、setVideoEncoder() 等方法来设置视频质量。

以下是一个简单的示例代码:

private Camera mCamera;
private MediaRecorder mMediaRecorder;
private SurfaceView mPreview;

private void prepareCamera() {
    mCamera = Camera.open();
    Camera.Parameters params = mCamera.getParameters();
    params.setPreviewSize(640, 480);
    mCamera.setParameters(params);

    mPreview = findViewById(R.id.preview);
    SurfaceHolder holder = mPreview.getHolder();
    holder.addCallback(new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            try {
                mCamera.setPreviewDisplay(holder);
                mCamera.startPreview();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            mCamera.stopPreview();
            mCamera.release();
            mCamera = null;
        }
    });
}

private void prepareRecorder() throws IOException {
    mMediaRecorder = new MediaRecorder();
    mMediaRecorder.setCamera(mCamera);
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
    mMediaRecorder.setVideoSize(640, 480);
    mMediaRecorder.setVideoEncodingBitRate(5 * 1024 * 1024);
    mMediaRecorder.setOutputFile(getOutputMediaFile().toString());
    mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());
    mMediaRecorder.prepare();
}

private void startRecording() {
    try {
        prepareRecorder();
        mMediaRecorder.start();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private void stopRecording() {
    mMediaRecorder.stop();
    mMediaRecorder.reset();
    mMediaRecorder.release();
    mMediaRecorder = null;
}

private File getOutputMediaFile() {
    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_MOVIES), "MyCameraApp");

    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            return null;
        }
    }

    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile = new File(mediaStorageDir.getPath() + File.separator +
            "VID_" + timeStamp + ".mp4");

    return mediaFile;
}

该示例代码可以预览摄像头画面,并录制视频到指定文件。你可以根据需要修改其中的参数。