录制时 IOS 上的 cordova-plugin-media-with-compression 错误
cordova-plugin-media-with-compression error on IOS when recording
我正在为在 IOS 和 Android 上运行的应用程序使用 cordova-plugin-media-with-compression。在 Android 上,代码运行完美,记录、播放、停止、擦除,没问题。在 IOS 上,我可以播放使用 android 应用程序保存的文件,但是当我尝试录制时,我得到错误 1,即 MEDIA_ERR_ABORTED(不知道那是什么意思)。所以在 Android 上完美运行,但不会在 IOS 上录制。我也在使用 cordovafile 做其他事情并且它们可以工作,所以我知道 cordova 文件正在工作并且我验证了我正在为 mediapath 获取合法文件夹。
我直接使用了示例中的代码。
$scope.mediapath = cordova.file.externalApplicationStorageDirectory || cordova.file.tempDirectory || cordova.file.sharedDirectory;
$rootScope.mediaOptions = {
SampleRate: 16000,
NumberOfChannels: 1
};
$scope.mediafile = "record-audio.m4a";
$scope.media = new Media($scope.mediapath + $scope.mediafile, function () {
console.log("recordAudio():Audio Success");
},
function (err) { console.log("recordAudio():Audio Error: " + err.code); },
function (s) {
if (s === 4) {
$timeout(function () {
angular.element(document.getElementById('stopButton')).triggerHandler('click');
}, 0);
}
} );
$scope.media.startRecordWithCompression($rootScope.mediaOptions);
虽然。 $scope.mediapath = $scope.mediapath.fullPath;工作了一段时间,我遇到了更多的错误并最终得到了这个解决方案。请注意,我保留了 mediapath 和 mediapath1,因为在使用 $cordovaFile.readAsDataURL($rootScope.mediapath, $scope.mediafile)... 我需要 ios 和 android 的 mediapath .
$rootScope.mediaOptions = {
SampleRate: 16000,
NumberOfChannels: 1
};
$rootScope.mediapath = cordova.file.tempDirectory || cordova.file.dataDirectory || cordova.file.externalApplicationStorageDirectory || cordova.file.sharedDirectory || cordova.file.applicationStorageDirectory;
$rootScope.mediapath1 = $rootScope.mediapath;
if (cordova.platformId === 'ios') {
$rootScope.mediapath1 = '';
}
then when I need to initialize the media
$scope.mediafile = "audio.m4a";
$scope.media = new Media($rootScope.mediapath1 + $scope.mediafile,
function () {
console.log("recordAudio():Audio Success");
},
function (err) { console.log("recordAudio():Audio Error: " + err.code + err.message); },
function (s) {
// catch change to audio here for example when s===4 the recording has been stopped.
}
});
$scope.media.startRecordWithCompression($rootScope.mediaOptions)
;
我正在为在 IOS 和 Android 上运行的应用程序使用 cordova-plugin-media-with-compression。在 Android 上,代码运行完美,记录、播放、停止、擦除,没问题。在 IOS 上,我可以播放使用 android 应用程序保存的文件,但是当我尝试录制时,我得到错误 1,即 MEDIA_ERR_ABORTED(不知道那是什么意思)。所以在 Android 上完美运行,但不会在 IOS 上录制。我也在使用 cordovafile 做其他事情并且它们可以工作,所以我知道 cordova 文件正在工作并且我验证了我正在为 mediapath 获取合法文件夹。
我直接使用了示例中的代码。
$scope.mediapath = cordova.file.externalApplicationStorageDirectory || cordova.file.tempDirectory || cordova.file.sharedDirectory;
$rootScope.mediaOptions = {
SampleRate: 16000,
NumberOfChannels: 1
};
$scope.mediafile = "record-audio.m4a";
$scope.media = new Media($scope.mediapath + $scope.mediafile, function () {
console.log("recordAudio():Audio Success");
},
function (err) { console.log("recordAudio():Audio Error: " + err.code); },
function (s) {
if (s === 4) {
$timeout(function () {
angular.element(document.getElementById('stopButton')).triggerHandler('click');
}, 0);
}
} );
$scope.media.startRecordWithCompression($rootScope.mediaOptions);
虽然。 $scope.mediapath = $scope.mediapath.fullPath;工作了一段时间,我遇到了更多的错误并最终得到了这个解决方案。请注意,我保留了 mediapath 和 mediapath1,因为在使用 $cordovaFile.readAsDataURL($rootScope.mediapath, $scope.mediafile)... 我需要 ios 和 android 的 mediapath .
$rootScope.mediaOptions = {
SampleRate: 16000,
NumberOfChannels: 1
};
$rootScope.mediapath = cordova.file.tempDirectory || cordova.file.dataDirectory || cordova.file.externalApplicationStorageDirectory || cordova.file.sharedDirectory || cordova.file.applicationStorageDirectory;
$rootScope.mediapath1 = $rootScope.mediapath;
if (cordova.platformId === 'ios') {
$rootScope.mediapath1 = '';
}
then when I need to initialize the media
$scope.mediafile = "audio.m4a";
$scope.media = new Media($rootScope.mediapath1 + $scope.mediafile,
function () {
console.log("recordAudio():Audio Success");
},
function (err) { console.log("recordAudio():Audio Error: " + err.code + err.message); },
function (s) {
// catch change to audio here for example when s===4 the recording has been stopped.
}
});
$scope.media.startRecordWithCompression($rootScope.mediaOptions)
;