使用florent37:cameraFragment遇兼容问题:Android Nougat无法运行求协助
解决Android Nougat下camerafragment 1.0.8无法正常工作的问题
针对你遇到的在Android Nougat系统中使用com.github.florent37:camerafragment:1.0.8组件出现的相机异常,结合报错日志,我整理了几个针对性的解决方案:
一、先理解报错背后的原因
E/WVMExtractor: Failed to open libwvm.so:libwvm.so是系统级的Widevine DRM相关库,部分定制Nougat ROM可能缺失该库,或者组件的视频编码配置依赖了DRM功能导致加载失败。E/MediaRecorder: start failed: -2147483648:这是MediaRecorder的通用错误码,通常和权限未正确获取、参数配置不兼容或系统API适配问题有关。
二、具体解决方案
1. 严格适配Nougat的动态权限要求
Android 6.0+开始需要动态申请危险权限,Nougat系统对权限的校验更严格,确保你已经正确申请了以下权限:
CAMERARECORD_AUDIOWRITE_EXTERNAL_STORAGE(如果需要保存视频到本地)
示例权限申请代码:
private static final String[] REQUIRED_PERMISSIONS = { Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE }; private static final int PERMISSION_REQUEST_CODE = 100; // 在Activity/Fragment中触发权限申请 if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, REQUIRED_PERMISSIONS, PERMISSION_REQUEST_CODE); }
同时要在AndroidManifest.xml中声明这些权限:
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />
2. 调整MediaRecorder的参数配置
旧版本的camerafragment可能使用了Nougat不兼容的MediaRecorder参数,你可以尝试自定义组件的MediaRecorder配置,改用系统兼容的参数:
// 自定义MediaRecorder初始化逻辑(如果组件允许扩展) MediaRecorder mediaRecorder = new MediaRecorder(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); // 推荐用SURFACE适配新系统 mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mediaRecorder.setVideoSize(1280, 720); // 选择设备支持的分辨率 mediaRecorder.setVideoFrameRate(30); mediaRecorder.setVideoEncodingBitRate(2 * 1024 * 1024);
注意:避免使用依赖DRM的编码格式,比如某些需要Widevine支持的编码器,改用通用的H264/AAC组合。
3. 升级camerafragment组件版本
1.0.8是2017年的旧版本,大概率没有适配Nougat及以上系统的兼容性问题。你可以检查该库的最新版本,升级到较新的稳定版,新版本通常会修复这类系统兼容问题。
4. 处理libwvm.so缺失的问题
如果你的测试设备是定制ROM,缺失libwvm.so库,可以尝试:
- 更换为官方Nougat ROM测试,确认是ROM问题还是组件问题;
- 禁用组件中依赖DRM的视频功能,改用无需DRM的编码配置;
- 不推荐手动添加该库,因为系统库可能存在兼容性风险。
三、测试步骤建议
- 先确认权限是否全部正确授予;
- 尝试升级组件版本到最新稳定版;
- 自定义MediaRecorder参数,替换为兼容Nougat的配置;
- 在官方Nougat设备上测试,排除定制ROM的影响。
内容的提问来源于stack exchange,提问作者Prashant Sharma
相关产品推荐
相关产品推荐

