I am using Android development (SDK 2.2) and I would like to make a video recording with mediaRecorder
and, at the same time, do some process on each preview fr
You just add tag to your manifest file .Thus it will work.Sample code shown below.
eg:-
</application>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
***<uses-feature android:name="android.hardware.camera" />***
</manifest>
you cannot access the video stream while recording, onPreviewFrame will not get called once you start recording. Oddly, onPreviewFrame does not seem to get called after you record either...
Eureka! The trick is to attach your PreviewCallback
in the surfaceChanged(...)
SurfaceHolder.Callback
! After doing this, you'll continue to get preview frame data after a MediaRecorder is running!
For example:
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
mCamera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] _data, Camera _camera) {
Log.d("onPreviewFrame-surfaceChanged",String.format("Got %d bytes of camera data", _data.length));
}
});
}
if you are using os 2.2 or higher then use this method your prepare failed and other exception will removed
public boolean startRecording() {
try {
camera.unlock();
mediaRecorder = new MediaRecorder();
mediaRecorder.setCamera(camera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setProfile(CamcorderProfile
.get(CamcorderProfile.QUALITY_HIGH));
File tempFile = new File(getOutputMediaFile(MEDIA_TYPE_VIDEO)
.toString());
mediaRecorder.setOutputFile(tempFile.getPath());
mediaRecorder.setVideoFrameRate(videoFramesPerSecond);
mediaRecorder.setVideoSize(surfaceView.getWidth(),
surfaceView.getHeight());
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
mediaRecorder.setMaxFileSize(maxFileSizeInBytes);
mediaRecorder.prepare();
mediaRecorder.start();
return true;
} catch (IllegalStateException e) {
Log.e(TAG, e.getMessage());
e.printStackTrace();
return false;
} catch (IOException e) {
Log.e(TAG, e.getMessage());
e.printStackTrace();
return false;
}
}