下面列出了android.media.MediaRecorder#setPreviewDisplay ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private boolean prepareMediaRecorder() {
mMediaRecorder = new MediaRecorder();
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_1080P));
mMediaRecorder.setPreviewDisplay(mHolder.getSurface());
String path = getSDPath();
if (path != null) {
File dir = new File(path + "/VideoRecorderTest");
if (!dir.exists()) {
dir.mkdir();
}
path = dir + "/" + getDate() + ".mp4";
mMediaRecorder.setOutputFile(path);
try {
mMediaRecorder.prepare();
} catch (IOException e) {
releaseMediaRecorder();
e.printStackTrace();
}
}
return true;
}
@Override
public void startRecording(Camera.PreviewCallback previewCallback) {
recording = true;
mCamera.unlock();
mRecordbutton.setBackgroundResource(R.drawable.red_circle_background);
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
mMediaRecorder.setOutputFile("/sdcard/Video.mp4");
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOrientationHint(90);
mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
try {
mMediaRecorder.prepare();
mMediaRecorder.start();
mCamera.startPreview();
mCamera.setPreviewCallback(previewCallback);
} catch (IOException e) {
e.printStackTrace();
}
}
protected void startRecording() throws IOException {
mMediaRecorder = new MediaRecorder(); // Works well
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
mMediaRecorder.setOutputFile("/sdcard/zzzz.mp4");
mMediaRecorder.prepare();
mMediaRecorder.start();
}
@Override
public void initRecorder(Camera camera, int cameraId, Surface surface, String filePath)
{
mMediaRecorder = new MediaRecorder();
mMediaRecorder.reset();
if (camera != null)
mMediaRecorder.setCamera(camera);
mMediaRecorder.setOnErrorListener(this);
mMediaRecorder.setPreviewDisplay(surface);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//视频源
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//音频源
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);//视频输出格式 也可设为3gp等其他格式
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//音频格式
mMediaRecorder.setVideoSize(640, 480);//设置分辨率,市面上大多数都支持640*480
// mediaRecorder.setVideoFrameRate(25);//设置每秒帧数 这个设置有可能会出问题,有的手机不支持这种帧率就会录制失败,这里使用默认的帧率,当然视频的大小肯定会受影响
//这里设置可以调整清晰度
mMediaRecorder.setVideoEncodingBitRate(2 * 1024 * 512);
if (cameraId == Camera.CameraInfo.CAMERA_FACING_BACK)
mMediaRecorder.setOrientationHint(90);
else
mMediaRecorder.setOrientationHint(270);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);//视频录制格式
mMediaRecorder.setOutputFile(filePath);
}
private boolean startRecorderInternal() throws Exception {
shutdownCamera();
if (!initCamera()) {
return false;
}
switchCamera.setVisibility(View.GONE);
mediaRecorder = new MediaRecorder();
camera.unlock();
mediaRecorder.setCamera(camera);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
setCamcorderProfile();
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
mediaRecorder.setMaxDuration(1000 * VIDEO_TIMES);
mediaRecorder.setOutputFile(filename);
setVideoOrientation();
mediaRecorder.prepare();
mediaRecorder.start();
return true;
}
private void startRecord() {
mediaRecorder = new MediaRecorder();
mediaRecorder.reset();
mCamera.unlock();
// 设置录制视频源为Camera(相机)
mediaRecorder.setCamera(mCamera);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
// 设置录制的视频编码h263 h264
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
// 设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错
mediaRecorder.setVideoSize(width, height);
// 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错
if (SELECTED_CAMERA == CAMERA_FRONT_POSITION) {
mediaRecorder.setOrientationHint(270);
} else {
mediaRecorder.setOrientationHint(90);
}
mediaRecorder.setMaxDuration(10000);
mediaRecorder.setVideoEncodingBitRate(5 * 1024 * 1024);
mediaRecorder.setVideoFrameRate(20);
mediaRecorder.setPreviewDisplay(mHolder.getSurface());
// 设置视频文件输出的路径
mediaRecorder.setOutputFile("/sdcard/love.mp4");
try {
//准备录制
mediaRecorder.prepare();
// 开始录制
mediaRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
@SuppressLint("SimpleDateFormat")
protected boolean prepareMediaRecorder() throws IOException {
mediaRecorder = new MediaRecorder(); // Works well
camera.stopPreview();
camera.unlock();
mediaRecorder.setCamera(camera);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
if (flag == 1) {
mediaRecorder.setProfile(CamcorderProfile.get(1, CamcorderProfile.QUALITY_HIGH));
} else {
mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
}
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
mediaRecorder.setOrientationHint(mOrientation);
if (Build.MODEL.equalsIgnoreCase("Nexus 6") && flag == 1) {
if (mOrientation == 90) {
mediaRecorder.setOrientationHint(mOrientation);
} else if (mOrientation == 180) {
mediaRecorder.setOrientationHint(0);
} else {
mediaRecorder.setOrientationHint(180);
}
} else if (mOrientation == 90 && flag == 1) {
mediaRecorder.setOrientationHint(270);
} else if (flag == 1) {
mediaRecorder.setOrientationHint(mOrientation);
}
mediaFileName = "wc_vid_" + System.currentTimeMillis();
mediaRecorder.setOutputFile(folder.getAbsolutePath() + "/" + mediaFileName + ".mp4"); // Environment.getExternalStorageDirectory()
mediaRecorder.setOnInfoListener(new MediaRecorder.OnInfoListener() {
public void onInfo(MediaRecorder mr, int what, int extra) {
// TODO Auto-generated method stub
if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED) {
long downTime = 0;
long eventTime = 0;
float x = 0.0f;
float y = 0.0f;
int metaState = 0;
MotionEvent motionEvent = MotionEvent.obtain(
downTime,
eventTime,
MotionEvent.ACTION_UP,
0,
0,
metaState
);
imgCapture.dispatchTouchEvent(motionEvent);
Toast.makeText(WhatsappCameraActivity.this, "You reached to Maximum(25MB) video size.", Toast.LENGTH_SHORT).show();
}
}
});
mediaRecorder.setMaxFileSize(1000 * 25 * 1000);
try {
mediaRecorder.prepare();
} catch (Exception e) {
releaseMediaRecorder();
e.printStackTrace();
return false;
}
return true;
}
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
camera = Camera.open();
try {
mediaRecorder = new MediaRecorder();
List<int[]> fps = camera.getParameters().getSupportedPreviewFpsRange();
int preview_fps[] = fps.get(0);
for (int i[] : camera.getParameters().getSupportedPreviewFpsRange())
preview_fps = (mCaptureRate <= i[1] && mCaptureRate > i[0]) ? i : preview_fps;
Camera.Parameters param = camera.getParameters();
param.setVideoStabilization(true);
param.setPreviewFpsRange(preview_fps[0], preview_fps[1]);
camera.setParameters(param);
camera.unlock();
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
mediaRecorder.setCamera(camera);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
CamcorderProfile profile;
if (mCaptureRate > 25) {
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
} else {
profile = CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_HIGH);
mediaRecorder.setCaptureRate(mCaptureRate);
profile.videoFrameRate = ((int) Math.ceil(mCaptureRate));
}
mediaRecorder.setProfile(profile);
mediaRecorder.setOutputFile(mOutFile);
mediaRecorder.prepare();
mediaRecorder.start();
ScaleAnimation a = new ScaleAnimation(3, 2, 3, 2);
a.setDuration(2000);
surfaceView.startAnimation(a);
Log.i(TAG, String.format("recording %s with rate %.2f", mOutFile, mCaptureRate));
} catch(Exception e) {
onDestroy();
Log.d(TAG, e.toString());
}
}