如何在后台使用 Android 相机? [英] How to use Android Camera in Background?

查看:98
本文介绍了如何在后台使用 Android 相机?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在开发一个需要在后台录制视频并对其进行处理的应用.

I'm currently developing an app which need to record video in background and process it.

(需要后台实时获取相机预览数据,并对预览数据进行图像处理)

(It needs to get camera preview data real-time in background and have to image process the preview data)

但是,要实现它,我需要使用Camera和OpenCV as Service,而且在OpenCV和Android.Hardware.Camera中使用JavaCameraView似乎不可能不使用任何预览.

However, to achieve it, I need to use Camera and OpenCV as Service, and it seems that it is impossible to use JavaCameraView in OpenCV and Android.Hardware.Camera without using any preview.

这是我的问题.

  1. 我听说 OpenCV 中的 NativeCamera 可以用于此目的.是否可以?(可能有例子?)

  1. I heard that NativeCamera in OpenCV can be used for this purpose. Is it possible? (Possibly with examples?)

是否有任何方法可以为此目的使用 JavaCameraView(或类似的东西)?我目前使用的是 Galaxy S4.

Is there any method that I can use JavaCameraView(or similar stuff) for this purpose? I currently use Galaxy S4.

如果 android 不支持这种方法,是否有可能的解决方法?(使用没有任何表面视图的相机预览,或不使用预览处理相机数据)

Is there any possible workarounds if android doesn't support such method?(Using Camera Preview without any surface view, or Process camera data without using preview)

(可选)为什么安卓不支持这样的操作?很烦人!

(OPTIONAL)Why the android doesn't support such operation? It is very annoying!

感谢您回答问题.

推荐答案

可以通过以下步骤..

创建一个活动,它会在某个事件上启动您的后台服务,或者您也可以根据需要使用警报管理器来启动和停止服务.

Create one activity which will start your background service on some event or you can also use alarm manager to start and stop the service as per your requirement.

查看下面的代码可以帮助您.

See the below code that'll help you.

public boolean starMediaRecording(){
        Camera.Parameters params = mServiceCamera.getParameters();
        mServiceCamera.setParameters(params);
        Camera.Parameters p = mServiceCamera.getParameters();

        final List<Size> listSize = p.getSupportedPreviewSizes();
        Size mPreviewSize = listSize.get(2);
        p.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
        p.setPreviewFormat(PixelFormat.YCbCr_420_SP);
        mServiceCamera.setParameters(p);

        try {
            mServiceCamera.setPreviewDisplay(mSurfaceHolder);
            mServiceCamera.startPreview();
        }
        catch (IOException e) {
            Log.e(TAG, e.getMessage());
            e.printStackTrace();
        }

        mServiceCamera.unlock();

        mMediaRecorder = new MediaRecorder();
        mMediaRecorder.setCamera(mServiceCamera);
        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
        mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
        mMediaRecorder.setOutputFile("/sdcard/filenamevideo.mp4");
        mMediaRecorder.setVideoFrameRate(30);
        mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height);
        mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());

        mMediaRecorder.prepare();
        mMediaRecorder.start(); 

        mRecordingStatus = true;

        return true;

}

public void stopMediaRecorder() {
    mServiceCamera.reconnect();

    mMediaRecorder.stop();
    mMediaRecorder.reset();

    mServiceCamera.stopPreview();
    mMediaRecorder.release();

    mServiceCamera.release();
    mServiceCamera = null;
    }
}

这篇关于如何在后台使用 Android 相机?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆