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

查看:245
本文介绍了如何在后台使用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作为服务,看起来不可能使用JavaCameraView OpenCV和Android.Hardware.Camera而不使用任何预览。

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. 我听说NativeCamera OpenCV可用于此目的。是否可以? (可能有示例?)

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

有没有任何方法可以使用JavaCameraView(或类似的东西)

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)

(可选)为什么android不支持这样的操作?非常烦人!

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

感谢您回答问题。

推荐答案

,可以执行以下步骤。

Yes it is possible with following steps..

创建一个活动在某些事件上启动您的后台服务,或者您也可以使用闹钟管理器根据您的要求启动和停止服务。

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天全站免登陆