Android录制小视频(二)
来源:互联网 发布:淘宝装修市场 编辑:程序博客网 时间:2024/05/17 04:23
之前讲了camera的相关问题,今天把mediaRecorder总结一下
1.视频的videoSize设置
视频的录制尺寸设置考虑的方面比较多,说下我在这里碰到的一些坑。初次以camera的预览尺寸作为videoSize的,经过测试发现,部分手机(酷派)录制时直接崩溃了,原因是得到的bestPreviewSize不匹配该手机支持的videoSize。后来找到这个方法:getSupportVideoSize,从这个list中获取一个与预览尺寸同比例的宽高。这样崩溃的问题解决了。这里设置的videoSize比较大,拍摄的视频清晰度也比较好。这里还有个问题,nexus上预览尺寸与videoSize尺寸值不一致,设置后录制的视频,其他手机无法播放。思考了一番,在支持的videoSize中尽量选取与预览尺寸一致的,这样兼容会好很多。但是视频文件就比较大了。我用华为p7的手机,测试得到,6s视频在2m左右。我们的视频是要上传到服务端的,这个视频大小上就不符合要求了。最后参考google官方的例子,设定了640*480。视频清晰度有所下降,但在手机上基本不影响播放的。
//Step 1: Unlock and set camera to MediaRecorder camera.unlock(); recorder.setCamera(camera); recorder.setPreviewDisplay(mSurfaceHolder.getSurface()); // Step 2: Set sources //设置采集声音 recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); //设置采集图像 recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); //设置视频,音频的输出格式 recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); //设置视频输出的格式和编码 CamcorderProfile mProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_480P); recorder.setVideoSize(640, 480); //音频一秒钟包含多少数据位 recorder.setAudioEncodingBitRate(128); if (mProfile.videoBitRate > 2 * 1024 * 1024) { recorder.setVideoEncodingBitRate(2 * 1024 * 1024); } else { recorder.setVideoEncodingBitRate(mProfile.videoBitRate); } recorder.setVideoFrameRate(mProfile.videoFrameRate); //设置音频的编码格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); //设置图像的编码格式 recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); recorder.setOrientationHint(resultDegrees); //设置记录会话的最大持续时间ms recorder.setMaxDuration(6000); //Step 4: Set output file String videoPath = Constant.TALK_VIDEO_PATH + getDate() + ".mp4"; recorder.setOutputFile(videoPath);
2.MedaiaRecorder录制过短崩溃
这里主要是设置一个onErrorListener,处理该异常。
start的时候: recorder.setOnErrorListener(this); stop的时候,recorder.setOnErrorListener(null);
@Override public void onError(MediaRecorder mr, int what, int extra) { try { if (mr != null) { mr.reset(); } } catch (Exception e) { e.printStackTrace(); } }
3.关于MediaRecorder录制状态改变时发出的声音,查找了不少资料,一直没有找到解决方案,设置禁音大部分手机是无效的。后来看到Vcamera的代码,原来人家就没用系统的mediaRecorder,直接写成文件块,用ffmpeg合成。这里录制的时候,用的宽高比3:4,录制的视频再用ffmpeg处理成半屏大小。这也解释了微信为啥能半屏录制小视频了。
- Android录制小视频(二)
- Android录制视频,仿微信小视频录制(二)
- Android录制视频(二)
- Android录制视频(二)
- Android录制小视频(一)
- Android录制小视频(三)
- Android视频录制命令screenrecord(二)
- Android仿微信小视频录制功能(二)
- Android之---高仿微信录制小视频(拍摄和查看)
- Android MediaRecorder录制视频音量小问题解决 (音视频转码合成)
- Android录制视频,仿微信小视频录制(一)
- Android录制视频,仿微信小视频录制(三)
- 仿微信录制小视频
- Android Multimedia实战(二)使用MediaRecorder实现分段录制视频,mp4parser合成视频功能
- Android视频编辑器(二)预览、录制视频加上水印和美白磨皮效果
- Android基于ffmpeg媒体库小视频录制功能
- 使用Android编写录制视频小程序示例
- Android实现微信录制小视频的计时动画
- textile 自定义文本格式
- Java核心技术II:为多个客户端服务
- 链表的有序集合
- 利用session实现用户登录
- git相关资料
- Android录制小视频(二)
- ubuntu 安装scipy
- 压力之下,方能成长
- XMU 1056 瞌睡 vs 听课 【动态规划】
- 简单的三层结构到数据库例子
- Python——类属性/实例属性
- 深度学习(五)yolov2代码分析
- 使用matplotlib画图的简单封装
- ACM 第一天水题 (2)