是否可以为Android制作独立的摄像机?

时间:2014-05-04 15:13:34

标签: android

我需要制作一台独立的摄像机。该功能基本上应该是在应用程序中,您只能使用startRecording()和stopRecording()方法来使用相机。

相机上的所有指南和教程都是关于如何使用Intents实现它的?还有很多关于Surface视图的讨论,但我不想要预览。我只是想在toast中说“Camera started recording”,然后记录,直到你调用stopRecording()方法。

这可能吗?

我当前的代码在我的代码中的“recorder.Start()”行中给出了IllegalStateException。

package superrecorder;

import java.io.File;

import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.media.MediaRecorder;
import android.util.Log;

public class CameraRecorder {

    private File recording;
    private MediaRecorder recorder;
    private static Camera mCamera;
    private boolean hasCamera;

    CameraRecorder() {
        recorder = new MediaRecorder();
    }

    public void startRecording(Activity act) {

        hasCamera = checkCameraHardware(act);

        if (!hasCamera) {
            Log.v("CameraRecorder", "No camera on this phone");
            return;
        }

        Log.v("CameraRecorder", "Initializing camera recorder");

        mCamera = Camera.open();
        mCamera.unlock();

        recording = new File(act.getFilesDir() + "/Recording/Video", "rec.mp4");

        recorder.setCamera(mCamera);
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
        recorder.setOutputFile(recording.toString());

        try {
            recorder.prepare();
        } catch(Exception e) {
            e.printStackTrace();
            Log.d("CameraRecorder", e.toString());
        }

        recorder.start();
        Log.v("CameraRecorder", "Start recording");

    }

    public void stopRecording() {
        if (!hasCamera) {
            Log.v("CameraRecorder", "No camera on this phone");
            return;
        }
        recorder.stop();
        recorder.reset();
        recorder.release();
        mCamera.lock();
        mCamera.release();
        Log.v("CameraRecorder", "Recorded video: " + recording.toString());
    }

    private boolean checkCameraHardware(Context context) {
        if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
            return true;
        } else {
            return false;
        }
    }

    public static Camera getCameraInstance() {
        Camera c = null;
        try {
            c = Camera.open(1);
        } catch (Exception e) {
            e.printStackTrace();
            Log.d("CameraRecorder", e.toString());
        }

        return c;
    }
}

感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我发现您的代码存在一些问题:

c = Camera.open(1);

根据设备的摄像头数量,这可能有效,也可能无效。此外,如果设备有多个摄像头,不清楚您是否得到后置或前置摄像头。

您没有设置预览显示。这是必须的。

您没有设置视频大小。有许多设备不起作用。

解决此问题后,您需要确定是否可以在您使用的设备上逐个设置视频录制参数,或者是否必须使用摄像机配置文件。例如,最新一代的三星手机(例如注3)似乎只适用于配置文件。