80,351
社区成员
发帖
与我相关
我的任务
分享
/**
* 开始视频录制。
*/
private void startRecordingVideo() {
isRecordingVideo = true;
SurfaceTexture mSurfaceTexture = tv.getSurfaceTexture();
//设置TextureView的缓冲区大小
mSurfaceTexture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight());
List<Surface> surfaces = new ArrayList<>();
Surface previewSurface = new Surface(mSurfaceTexture);
surfaces.add(previewSurface);
//获取Surface显示预览数据
setUpMediaRecorder();
try {
mCaptureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
// 设置自动对焦模式
mCaptureRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
//设置Surface作为预览数据的显示界面
mCaptureRequestBuilder.addTarget(previewSurface);
Surface mSurface = mMediaRecorder.getSurface();-------这里崩溃
surfaces.add(mSurface);
mCaptureRequestBuilder.addTarget(mSurface);
cameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
mPreviewSession = cameraCaptureSession;
mCaptureRequest = mCaptureRequestBuilder.build();
try {
mPreviewSession.setRepeatingRequest(mCaptureRequest, null, childHandler);
mMediaRecorder.start();
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
}
}, childHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
/**
* 设置媒体录制器的配置参数
* <p>
* 音频,视频格式,文件路径,频率,编码格式等等
*
* @throws IOException
*/
private void setUpMediaRecorder() {
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
String videoPath = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/";
mMediaRecorder.setOutputFile(videoPath);
//设置视频编码比特率
mMediaRecorder.setVideoEncodingBitRate(10000000);
//每秒30帧
mMediaRecorder.setVideoFrameRate(30);
mMediaRecorder.setVideoSize(previewSize.getWidth(), previewSize.getHeight());
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
int rotation = getWindowManager().getDefaultDisplay().getRotation();
if ("1".equals(mCameraId)) {
rotation = 2;
} else {
rotation = 0;
}
mMediaRecorder.setOrientationHint(ORIENTATIONS.get(rotation));
try {
mMediaRecorder.prepare();
printLog("录像准备");
} catch (IOException e) {
e.printStackTrace();
}
}