React Native集成ExoPlayer后部分安卓设备录制崩溃求助
React Native安卓端接入ExoPlayer后录制崩溃问题
技术栈
- React Native 0.64
- react-native-video 5.2.0(已接入ExoPlayer)
- react-native-vision-camera 2.13.0
问题概述
为react-native-video接入ExoPlayer后,部分安卓设备使用react-native-vision-camera进行录制时出现崩溃,iOS端运行正常。已尝试升级react-native-video版本但无效果,且无法升级/降级react-native-vision-camera版本(操作触发报错)。
错误日志核心内容:
java.lang.IllegalStateException: Could not create media recorder
at com.mrousavy.camera.CameraSession.startRecording(CameraSession.kt:654)
...(后续调用栈略)
可能的解决方案
1. 统一ExoPlayer依赖版本
react-native-video和react-native-vision-camera可能依赖不同版本的ExoPlayer,导致冲突:
- 执行
./gradlew app:dependencies查看安卓项目依赖树,定位两个库引用的ExoPlayer版本 - 在
android/build.gradle中强制统一版本(替换为兼容的版本号):allprojects { configurations.all { resolutionStrategy.force 'com.google.android.exoplayer:exoplayer-core:2.18.1' resolutionStrategy.force 'com.google.android.exoplayer:exoplayer-ui:2.18.1' } }
2. 检查并完善权限配置
确保安卓权限配置完整且运行时已正确申请:
- 在
AndroidManifest.xml中添加权限:<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" /> <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" /> - 确认已通过react-native-permissions等库动态请求相机和音频权限后再启动录制
3. 调整录制参数适配设备
部分安卓设备对高规格录制参数支持有限,尝试降低配置:
await camera.current.startRecording({ quality: 'medium', codec: 'h264', audioBitrate: 128000, videoBitrate: 1500000, maxDuration: 60, onRecordingError: (error) => console.error(error), onRecordingFinished: (video) => console.log(video) })
4. 避免硬件资源冲突
ExoPlayer播放和相机录制可能抢占同一硬件资源,录制前后切换ExoPlayer状态:
// 录制前暂停视频播放 videoRef.current?.pause(); // 执行录制 try { await camera.current.startRecording(options); } finally { // 录制结束后恢复播放(如果需要) videoRef.current?.play(); }
5. 配置相机兼容性声明
创建android/app/src/main/res/xml/camera_manifest.xml并添加相机特性:
<?xml version="1.0" encoding="utf-8"?> <camera-features> <feature name="android.hardware.camera.back" /> <feature name="android.hardware.camera.capability.video_recording" /> <feature name="android.hardware.microphone" /> </camera-features>
在AndroidManifest.xml的application标签内添加引用:
<meta-data android:name="com.mrousavy.camera.manifest" android:resource="@xml/camera_manifest" />
内容的提问来源于stack exchange,提问作者Zakir Bangash
相关产品推荐
相关产品推荐

