android - 使用 MediaRecorder 的前置摄像头录制工作不顺畅
问题描述
我有一部运行 Android 7.0 的华为 P9 Plus 智能手机。我MediaRecorder
用来记录前置摄像头。这是一个 8 MP 相机。我正在使用以下设置(我认为这是最重要的部分,我没有发布整个课程,因为它的代码行太多):
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
mMediaRecorder.setOutputFile(videoFile.getAbsolutePath());
mMediaRecorder.setVideoEncodingBitRate(8000000);
mMediaRecorder.setVideoFrameRate(30)
mMediaRecorder.setVideoSize(1024 , 1920)
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaSurface = MediaCodec.createPersistentInputSurface();
mMediaRecorder.setInputSurface(mMediaSurface);
mMediaRecorder.prepare();
使用此设置它可以工作,但有时视频有点生涩。奇怪的是,视频大小为 1024 x 1920 它可以工作,但是当我设置 1080 x 1920 时它不再工作(没有错误,但视频完全损坏)。这是为什么?在我从前凸轮特性中获得的支持的分辨率中,列出了 1080 x 1920,但没有列出 1024 x 1920。
我的其他设置可以吗?setVideoEncodingBitRate
8 MP 相机可以吗?
我还尝试使用给定的配置文件,如下所示:
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFile(videoFile.getAbsolutePath());
mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_1080P));
mMediaRecorder.setVideoFrameRate(30)
mMediaSurface = MediaCodec.createPersistentInputSurface();
mMediaRecorder.setInputSurface(mMediaSurface);
mMediaRecorder.prepare();
当我以这种方式运行它时,当我尝试停止 MediaRecorder(停止失败:-1007)时出现错误,可能是因为启动视频录制没有成功。为什么?我犯错了吗?
解决方案
当我以这种方式运行它时,当我尝试停止 MediaRecorder(停止失败:-1007)时出现错误,可能是因为启动视频录制没有成功。为什么?我犯错了吗
你可能是对的。尝试检查或添加属性(例如布尔值)以确定记录器是否已经启动。在这种情况下,如果它尚未启动,您将无法调用 stop。
推荐阅读
- excel - Excel VBA超链接取消隐藏隐藏和非常隐藏的工作表
- authentication - Solr 6 独立版 - 无需重启即可重新读取 security.json
- java - 将实体绑定到具有 2 个数据源的特定持久性单元
- ios - 为什么我必须在 Swift 中使用 @objc 创建一个函数?
- sql - 需要 SQL Server 查询来获取句点
- r - 如何使用 ggplot2 或 R 中的其他方式绘制矩阵中带有数字的矩阵?这些数字是来自 vcf 文件的 snp 计数
- arrays - 如何附加到由指针标识的数组
- php - Laravel 存储到数据库中(错误空值)
- ios - 移动到上一屏时如何摆脱改变导航栏颜色的延迟?
- android - 如何使用改造获取嵌套的 json 数组对象?