关于安卓视频拍摄的小问题

来源:互联网 发布:研究方向数据图像处理 编辑:程序博客网 时间:2024/04/23 19:09
由于在项目中要加入视频拍摄 第一次使用了系统 intent 方法
 Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);//        String currentVideoName = System.currentTimeMillis() + ".mp4";//        File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/xxx/");//        File out = new File(dir, currentVideoName);//        PreferencesUtils.getInstance(this).put("REQUEST_VIDEO", out.getAbsolutePath());//        Uri uri = Uri.fromFile(out);//        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);//        //限制时长//        intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 6);//        //0和1是所有相机都有的设置,0是最小,1是最大,不存在中间0.5//        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);//        //限制大小//        intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, 1024*1024L);
该方法使用简单 但是画面质量 只有0 和 1 2种 如果是1 1秒大概在2m 6秒的视频12m左右 上传和播放都会延迟  如果用第三方进行压缩 也比较耗时 
换了一种方式
MediaRecorder
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(mWidth, mHeight);// 设置分辨率://setVideoSize需要权衡的因素较多,主要包括三方面:MediaRecorder支持的录制尺寸、// 视频文件的大小以及兼容不同Android机型。这里采用640 * 480(微信小视频的尺寸是320*240),// 文件大小在500-1000kb之间,并且市面上99%以上机型支持此录制尺寸。mMediaRecorder.setVideoSize(640, 480);// 设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错  // mMediaRecorder.setVideoFrameRate(16);// 这个我把它去掉了,感觉没什么用mMediaRecorder.setVideoEncodingBitRate(1 * 1024 * 1024);// 设置帧频率,然后就清晰了 肯定文件越大越清晰mMediaRecorder.setOrientationHint(90);// 输出旋转90度,保持竖屏录制mMediaRecorder.setVideoEncoder(VideoEncoder.MPEG_4_SP);// 视频录制格式// mediaRecorder.setMaxDuration(Constant.MAXVEDIOTIME * 1000);mMediaRecorder.setOutputFile(mRecordFile.getAbsolutePath());mMediaRecorder.prepare();try {    mMediaRecorder.start();} catch (IllegalStateException e) {    e.printStackTrace();} catch (RuntimeException e) {    e.printStackTrace();} catch (Exception e) {    e.printStackTrace();}
使用这个的好处是可以再拍摄之前设置参数 画面的帧数 尺寸 可以有效限制文件大小 10秒的视频在1m左右 只需要注意权限文件就可以了
 
原创粉丝点击