surfaceview播放视频被拉伸的处理

用手机竖屏拍的视频,在横屏的机器上播放时,会被拉的很扁,开始以为是横竖屏的原因,后来发现横屏播放也不行。于是做了点处理。

如果是用mediaplay的异步prepare方法,onPrepare方法中添加以下代码:

int videoWidth = mediaPlayer.getVideoWidth();
int videoHeight = mediaPlayer.getVideoHeight();

DisplayMetrics dm = new DisplayMetrics();
((MovieVideoActivity) mContext).getWindowManager().getDefaultDisplay().getMetrics(dm);
int mSurfaceViewWidth = dm.widthPixels;
int mSurfaceViewHeight = dm.heightPixels;

int w = mSurfaceViewHeight * videoWidth / videoHeight;
int margin = (mSurfaceViewWidth - w) / 2; 
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
lp.setMargins(margin, 0, margin, 0);
mSurfaceView.setLayoutParams(lp);
如果是用同步的prepare,则在prepare之后添加

发布了37 篇原创文章 · 获赞 14 · 访问量 5万+
展开阅读全文

Android 中MediaRecorder+SurfaceView 录制视频的时图像变形

07-01

项目需要一个能录制十分钟左右自动停止的功能,找SDK发现满足不了需求,没办法就自己写了 基本都写完了,但是在录制的时候图像会拉伸变形,查了好多资料一直也没有一个好办法,现在 我解决了预览变形的,下面不知道怎么弄了,请教那位大神帮助一下 MediaRecorder配置类 if (!isRecorder && mMediaRecorder == null) { mMediaRecorder = new MediaRecorder(); try { mMediaRecorder.setCamera(mCamera); // 设置从摄像头采集图像 mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // 设置从麦克风采集声音(或来自录像机的声音AudioSource.CAMCORDER) mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置视频文件的输出格式 // 必须在设置声音编码格式、图像编码格式之前设置 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); // mMediaRecorder.setMaxDuration(1000); // 设置图像编码的格式 mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); //mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); //Use myVideoSize from above mMediaRecorder.setVideoSize(320, 240); // 设置声音编码的格式 mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); // mMediaRecorder.setOrientationHint(180);// 输出旋转90度,保持竖屏录制 /* * mMediaRecorder.setAudioChannels(1);//1单声道 2 多声道 * mMediaRecorder.setAudioSamplingRate(12500); * //设置录制的音频采样率——频率越高,音质越好 * mMediaRecorder.setAudioEncodingBitRate(16); // 设置录制的音频编码比特率 */ // mMediaRecorder.setOrientationHint(180);// 输出旋转90度,保持竖屏录制 // 每秒 4帧 mMediaRecorder.setVideoFrameRate(30); mMediaRecorder.setVideoEncodingBitRate(10 * 1024 * 1024); // 文件输出路劲 mMediaRecorder.setOutputFile(mVecordFile.getAbsolutePath()); mMediaRecorder.setPreviewDisplay(mHolder.getSurface()); mMediaRecorder.prepare(); // mCamera.startPreview(); mMediaRecorder.start(); } 设置照相机 if (mCamera != null) { freeCameraResource(); } try { mCamera = Camera.open(); if(mCamera != null && isOpenCamera) setCameraParams(); mCamera.startPreview(); mCamera.setDisplayOrientation(0); mCamera.setPreviewDisplay(mHolder); mCamera.unlock(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // 设置照相机 private void setCameraParams() { // TODO Auto-generated method stub if (mCamera != null) { params = mCamera.getParameters(); WindowManager manager = (WindowManager) VideotTranscribe.this.getSystemService(VideotTranscribe.this.WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); // Point screenResolution = new Point(display.getWidth(), display.getHeight()); //Point p = getBestCameraResolution(params, screenResolution); params.setPreviewSize(display.getWidth(),display.getHeight());//防止录制预览图像变形 mCamera.setParameters(params); params = mCamera.getParameters(); } 跪求大神指导 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览