Expo AV 录音机无法在 iOS / iPhone 上录制

问题描述

在我的应用中,我使用 Expo-AV 录制音频,这在 Android 上运行良好,但在 iPhone 上运行不正常。 尝试录制时出现此错误: Prepare 遇到错误:Error Domain=NSOsstatusErrorDomain Code=561145203 "(null)"

 async startRecordingAudio() {
if (!this.state.isRecording) {
  const recording = new Audio.Recording();
  this.setState({
    timerdisplay: "01:30",timerCnt: 90,});
  try {
    await Audio.setAudioModeAsync({
      playsInSilentModeIOS: true,allowsRecordingIOS: true,staysActiveInBackground: false,interruptionModeIOS: Audio.INTERRUPTION_MODE_IOS_DO_NOT_MIX,shouldDuckAndroid: true,interruptionModeAndroid: Audio.INTERRUPTION_MODE_ANDROID_DO_NOT_MIX,playThroughEarpieceAndroid: false,});
    await recording.preparetoRecordAsync({
      android: {
        extension: ".mp3",outputFormat: RECORDING_OPTION_ANDROID_OUTPUT_FORMAT_MPEG_4,audioEncoder: RECORDING_OPTION_ANDROID_AUdio_ENCODER_AAC,sampleRate: 44100,numberOfChannels: 2,bitRate: 128000,},ios: {
        extension: ".m4a",outputFormat:
          Audio.RECORDING_OPTION_IOS_OUTPUT_FORMAT_APPLELOSSLESS,audioQuality: Audio.RECORDING_OPTION_IOS_AUdio_QUALITY_MIN,linearPCMBitDepth: 16,linearPCMIsBigEndian: false,linearPCMIsFloat: false,});
    console.log("prepare record");
    let x = await recording.startAsync();
    this.setState({
      refreshdisabled: true,recorddisabled: false,playdisabled: true,});
    let recInt = setInterval(() => {
      let counter = this.state.timerCnt - 1;
      let mins = parseInt(counter / 60,10);
      let secs = parseInt(counter % 60,10);

      mins = mins < 10 ? "0" + mins : mins;
      secs = secs < 10 ? "0" + secs : secs;
      Helpers.printLog(current_page_name,2,mins + ":" + secs);
      this.setState({ timerdisplay: mins + ":" + secs,timerCnt: counter });

      if (counter <= 0) {
        clearInterval(this.state.intTimer);
        this.setState({
          isRecording: false,timerdisplay: "01:30",refreshdisabled: false,playdisabled: false,});
      }
    },1000);

    this.setState({
      recording: recording,isRecording: true,intTimer: recInt,});

    // Helpers.printLog(current_page_name,"3" + " recording status - ",x);
  } catch (error) {
    console.log(error);
    // Helpers.printLog(
    //   current_page_name,//   4,//   "Audio recording error - ",//   error
    // );
    console.log(error);
  }
} else {
  try {
    await Audio.setAudioModeAsync({
      allowsRecordingIOS: true,playsInSilentModeIOS: true,playsInSilentLockedModeIOS: true,});
    let rec = this.state.recording;
    let y = await rec.stopAndUnloadAsync();
    this.setState({
      refreshdisabled: false,recordingURI: rec.getURI(),});
    // Helpers.printLog(current_page_name,"5 record stopped object- ",y);
    console.log("5 record stopped object- " + y);

    clearInterval(this.state.intTimer);
    this.setState({
      isRecording: false,recordingDuration: y.durationMillis,filePath: rec.getURI(),});
  } catch (error) {
    // Helpers.printLog(
    //   current_page_name,//   "6 Audio recording stopped error - ",//   error
    // );
    console.log(error);
  }
}

}

当我触摸按钮开始录制时会调用函数。 尝试更改 setAudioModeAsync 和 preparetoRecordAsync 中的编解码器配置,尝试 m4a、caaf、wav、ac3 格式

编解码器配置有什么变化吗?请提出建议。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...