Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ionic Cordova使用媒体插件在IOS上录制音频失败_Ios_Xcode_Cordova_Ionic Framework_Cordova Plugins - Fatal编程技术网

ionic Cordova使用媒体插件在IOS上录制音频失败

ionic Cordova使用媒体插件在IOS上录制音频失败,ios,xcode,cordova,ionic-framework,cordova-plugins,Ios,Xcode,Cordova,Ionic Framework,Cordova Plugins,我正在开发一款ionic应用程序,我需要录制音频文件,所以我使用了cordova插件媒体,它在android上运行良好,但当我在ios上尝试时,我发现以下错误: {“消息”:“无法使用AVAudioRecorder开始录制”,“代码”:1} 这是我的密码: var extension = '.wav'; var name = 'filename'; var audio = null; var filepath; $scope.startRecording = function() { na

我正在开发一款ionic应用程序,我需要录制音频文件,所以我使用了cordova插件媒体,它在android上运行良好,但当我在ios上尝试时,我发现以下错误:


{“消息”:“无法使用AVAudioRecorder开始录制”,“代码”:1}

这是我的密码:

var extension = '.wav';
var name = 'filename';
var audio = null;
var filepath;

$scope.startRecording = function() {
  name = Utils.generateFilename();
  if(device.platform == "iOS")
  {
     //var path = "documents://";
     //var path = cordova.file.documentsDirectory;
     //var path = cordova.file.cacheDirectory;
     var path = cordova.file.dataDirectory;
     path = path.replace("file:///", "cdvfile://");

  }
  else if(device.platform == "Android")
  {
    var path = cordova.file.externalApplicationStorageDirectory;
  }
  var filename = name + extension;
  filepath = path + filename;
  audio = new Media(filepath, function(e){console.log(e, "success Media");},function(e){console.log(e, "error");});
    audio.startRecord();

  };

  $scope.sendAudioMsg = function() {
     audio.stopRecord();
     audio.release();
  };
当我记录路径时,我得到以下信息:

cdvfile://var/mobile/Containers/Data/Application/F47A76AD-E776-469F-8EFA-85B0A0F14754/Library/NoCloud/dJzSapEU6k16hV7EGrD06L29NjZcOCVzHCUTrcjEDiTCF7uUNGmCHchEcwfGls3V88p85ij0NUkv0KVagevbgh3lwWsEfmAO8uNq.wav


有人能帮我吗???

试试下面的Android

var path = "Android/data/"+YOUR_APP_ID+"/files/"+FILENAME+".wav";

var myMedia = new Media(path, success, error);
myMedia.startRecord();
完成录制后访问文件的步骤

var path = cordova.file.externalApplicationStorageDirectory+"files/"+FILENAME+".wav";
var myMedia1 = new Media(path, success, error);
myMedia1.play();
您的应用程序ID将为com.test.APP

iOS,见下文

var fileName = "myrec.wav";
var myMedia = new Media(path, success, error);
myMedia.startRecord();
访问文件

window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, function (fileSystem){
            fileSystem.root.getFile(fileName, null, function (fileEntry){
                fileEntry.file(function OnFileEntry(file){
                    // file is actual recorded file, get the path and play or get base64 string
                    var reader = new FileReader();
                    reader.onloadend = function(evt) {
                        evt.target.result; // this is base64 string
                    };
                    reader.readAsDataURL(file);
                }, error);
            }, error);
        }, error);

我的答案只适用于IOS

当我尝试使用介质进行录制并将录制文件的位置设置为以下任意组合时,出现了相同的错误消息

var pathFile = cordova.file.dataDirectory;
pathFile = 'documents://';
pathFile = cordova.file.documentsDirectory;
然后我意识到只传递文件名会将文件保存在临时目录(cordova.file.tempDirectory)中,所以我最终用这种方式让录制在IOS上运行(我发布了完整的代码,我唯一的一点是我使用的是压缩媒体插件,而不是普通的媒体插件)

然后,通过将“cordova.file.tempDirectory+src”传递给resolveLocalFileSystemURL,使用临时目录解析记录文件的位置

    console.log("Recording Stopped");
    console.log(mediaRec);
    mediaRec.stopRecord();
    mediaRec.release();

    resolveLocalFileSystemURL(
        cordova.file.tempDirectory + src,
        function (entry) {
            console.log('cdvfile URI: ');
            console.log(entry);
            player.src = entry.toURL();
            console.log("Saved file location :" + src.toInternalURL());
        },
        function (error) {
            console.log('about to resolve this files errors');
            console.log(error);
        });

在我的例子中,我使用的是本机录制GUI

IOS

cordova.file.applicationStorageDirectory + "tmp/OSAudioRecordings/" + file_name;
ANDROID

cordova.file.applicationStorageDirectory + "files/AudioRecords/" + file_name;

我对android没有任何问题。但我在IOS上有这个错误,正如我在标题中提到的,感谢“无法使用AVAudioRecorder开始录制”,即使我在IOS上使用.wav。我遇到了同样的问题。你解决了这个问题吗?如果你找到了解决方案plz postit@Ionut如果有帮助,请看我的答案。@Sartheristrommhammer如果有帮助,请看我的答案。
cordova.file.applicationStorageDirectory + "files/AudioRecords/" + file_name;