【发布时间】:2017-10-30 23:27:25
【问题描述】:
我正在尝试进行自定义相机活动。在 MediaRecorder 开始录制视频之前,一切正常。预览在没有明显原因的情况下水平拉伸,如下所示。我已尝试更改预览大小和一些建议,但找不到可行的解决方案。请有任何想法!!
注意:我使用的是 TextureView 对象。
启动相机
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
mST = surface;
try {
mCamera.setDisplayOrientation(90);
mCamera.setPreviewTexture(mST);
mCamera.startPreview();
isReleased = false;
}catch(Exception e){}
//startVideoPreview();
}
启动媒体记录器
private boolean prepareMediaRecorder() {
mediaRecorder = new MediaRecorder();
mCamera.unlock();
mediaRecorder.setCamera(mCamera);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mediaRecorder.setProfile(CamcorderProfile.get(camId, CamcorderProfile.QUALITY_TIME_LAPSE_HIGH));
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
mediaRecorder.setMaxDuration(30000); //set maximum duration 60 sec.
mediaRecorder.setMaxFileSize(50000000); //set maximum file size 50M
mediaRecorder.setPreviewDisplay(new Surface(mTextureView.getSurfaceTexture()));
mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory() + "/tempVid.mp4");
if(camId == Camera.CameraInfo.CAMERA_FACING_BACK){
mediaRecorder.setOrientationHint(90);
}else{
mediaRecorder.setOrientationHint(270);
}
try {
mediaRecorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
releaseMediaRecorder();
return false;
} catch (IOException e) {
releaseMediaRecorder();
return false;
}
return true;
}
非常感谢
【问题讨论】:
-
@Ibrahim 我试过了。但它没有用。
-
真的吗?我相信i.stack.imgur.com/erj5z.png 看起来是正确的,而i.stack.imgur.com/Whzt4.png 是扭曲的......
标签: java android camera mediarecorder textureview