iOS模拟器中Ionic MediaCapture调用captureVideo报code20错误求助
iOS模拟器中MediaCapture调用captureVideo出现code20错误的解决方案
你碰到的{"code":20}错误是MediaCapture API定义的NOT_SUPPORTED_ERROR,说白了就是当前环境不支持你要执行的视频录制操作——而问题的核心就在你用的是iOS模拟器,它根本没有真实的摄像头硬件,没法完成视频录制这个动作。
为什么会出现这个错误?
iOS模拟器只是模拟了iOS系统的软件环境,但并没有模拟摄像头这类硬件功能。MediaCapture的captureVideo方法需要调用真实设备的摄像头硬件,所以在模拟器里调用必然会返回“不支持”的错误(code20)。
怎么解决?
1. 改用真实iOS设备测试
这是最直接的解决方案,因为只有真实设备才有摄像头硬件支持视频录制:
- 确保你已经配置好苹果开发者账号和对应的证书、配置文件
- 使用命令部署到真实设备:
ionic cordova run ios --device
2. 给模拟器环境添加兼容处理
如果暂时没有真实设备,你可以在代码里先判断当前是否是模拟器环境,提前给用户友好提示,避免报错:
首先安装@ionic-native/device插件:
ionic cordova plugin add cordova-plugin-device npm install @ionic-native/device
然后修改你的代码:
import { Component } from '@angular/core'; import { Platform } from 'ionic-angular'; import { NavController } from 'ionic-angular'; import { MediaCapture, MediaFile, CaptureError, CaptureVideoOptions } from '@ionic-native/media-capture'; import { Device } from '@ionic-native/device'; // 导入Device插件 @Component({ selector: 'page-home', templateUrl: 'home.html' }) export class HomePage { constructor( private platform: Platform, public navCtrl: NavController, private mediaCapture: MediaCapture, private device: Device // 注入Device ) {} startRecording() { // 判断是否是模拟器 if (this.device.isVirtual) { alert('视频录制功能需要在真实iOS设备上测试,请使用真机运行'); return; } const options: CaptureVideoOptions = { limit: 3 }; this.platform.ready().then(() => { this.mediaCapture.captureVideo(options) .then((data: MediaFile[]) => { console.log(data) }) .catch((err: CaptureError) => { console.error(JSON.stringify(err)); }); }).catch((err) => { console.log(JSON.stringify(err)); }); } }
3. 提前配置真实设备的权限
当你切换到真实设备时,别忘了在config.xml里添加摄像头和麦克风的权限申请描述,否则App会被系统拒绝访问硬件:
<platform name="ios"> <!-- 摄像头权限描述 --> <config-file parent="NSCameraUsageDescription" platform="ios" target="*-Info.plist"> <string>我们需要访问您的摄像头来录制视频</string> </config-file> <!-- 麦克风权限描述 --> <config-file parent="NSMicrophoneUsageDescription" platform="ios" target="*-Info.plist"> <string>我们需要访问您的麦克风来录制视频声音</string> </config-file> </platform>
内容的提问来源于stack exchange,提问作者diebarral
相关产品推荐
相关产品推荐

