You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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系统对权限的校验更严格,确保你已经正确申请了以下权限:

  • CAMERA
  • RECORD_AUDIO
  • WRITE_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的编码配置;
  • 不推荐手动添加该库,因为系统库可能存在兼容性风险。

三、测试步骤建议

  1. 先确认权限是否全部正确授予;
  2. 尝试升级组件版本到最新稳定版;
  3. 自定义MediaRecorder参数,替换为兼容Nougat的配置;
  4. 在官方Nougat设备上测试,排除定制ROM的影响。

内容的提问来源于stack exchange,提问作者Prashant Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:50:25