分享

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

 火柴个人资料馆 2017-01-11
由于在项目中要加入视频拍摄 第一次使用了系统 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左右 只需要注意权限文件就可以了
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多