最近项目要做一个类似于微信下拉拍小视频的控件,要求在竖屏拿着手机的时候在预览界面里面看到的画面宽高比是4:3,输出的视频也是宽高比是4:3,从网上扒下来的Demo关键代码如下:
private void initRecord() throws IOException { mMediaRecorder = new MediaRecorder(); mMediaRecorder.reset(); if (mCamera != null) mMediaRecorder.setCamera(mCamera); mMediaRecorder.setOnErrorListener(this); mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); mMediaRecorder.setVideoSource(VideoSource.CAMERA);// 视频源 mMediaRecorder.setAudioSource(AudioSource.MIC);// 音频源 mMediaRecorder.setOutputFormat(OutputFormat.MPEG_4);// 视频输出格式 mMediaRecorder.setAudioEncoder(AudioEncoder.AMR_NB);// 音频格式 mMediaRecorder.setVideoSize(320, 240);// 设置分辨率: // mMediaRecorder.setVideoFrameRate(16);// mMediaRecorder.setVideoEncodingBitRate(1 * 1024 * 512);// 设置帧频率 mMediaRecorder.setOrientationHint(90);// 输出旋转90度,保持竖屏录制 mMediaRecorder.setVideoEncoder(VideoEncoder.MPEG_4_SP);// 视频录制格式 // mediaRecorder.setMaxDuration(Constant.MAXVEDIOTIME * 1000); mMediaRecorder.setOutputFile(mVecordFile.getAbsolutePath()); mMediaRecorder.prepare(); try { mMediaRecorder.start(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (RuntimeException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } //设置摄像头的参数 private void setCameraParams() { if (mCamera != null) { Parameters params = mCamera.getParameters(); params.set("orientation", "landscape"); //此处设置成landscape、portrait都无效 mCamera.setParameters(params); } }
使用SurfaceView进行视频的拍摄时预览时虽然做成了4:3的宽高比,但是画面的高度被压缩了,没有达到预期的效果,输出的视频宽高比也不是4:3,依旧是系统相机的宽高比。
设置mMediaRecorder.setOrientationHint(90)无效
设置Camera的参数 params.set("orientation", "landscape"); 设置为portrait依旧无效。
求助大神,帮忙看看怎么做,谢谢。
需求:竖屏拿手机时预览画面宽高比是4:3,录制的视频宽高也是4:3。做到跟微信下拉拍一个效果。
布鲁弗
相关分类