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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:12:51