Jackson065
羽沐川
采纳率0%
2016-07-01 10:21 阅读 4.7k

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

5

项目需要一个能录制十分钟左右自动停止的功能,找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();
    }

    跪求大神指导
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • HACK__ZSMJ HACK__ZSMJ 2016-07-15 02:38

    如果没有进行surfaceview居中显示操作的话,你的预览分辨率和surfaceview的长宽比例要一致

    点赞 1 评论 复制链接分享
  • zhangspace09 苦力活 2017-08-27 05:20

    设置预览尺寸parameters.setPreviewSize 和MediaRecorder类的setVideoSize 视频尺寸一直就不会出现预览不变形而录制变形的情况了

    点赞 1 评论 复制链接分享
  • shi1984 shi1984 2016-08-31 03:03

    我也遇到这个问题,想竖屏录制横屏效果,也是预览已经可以做到横屏的样子,就是录的时候就转过去了。

    点赞 评论 复制链接分享

相关推荐