我需要制作一台独立的摄像机。该功能基本上应该是在应用程序中,您只能使用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;
}
}
感谢任何帮助!
答案 0 :(得分:0)
我发现您的代码存在一些问题:
c = Camera.open(1);
根据设备的摄像头数量,这可能有效,也可能无效。此外,如果设备有多个摄像头,不清楚您是否得到后置或前置摄像头。
您没有设置预览显示。这是必须的。
您没有设置视频大小。有许多设备不起作用。
解决此问题后,您需要确定是否可以在您使用的设备上逐个设置视频录制参数,或者是否必须使用摄像机配置文件。例如,最新一代的三星手机(例如注3)似乎只适用于配置文件。