2016-01-05 61 views
5

我正在使用以下代碼在Android設備上使用Cordova Media插件錄製音頻。儘管在stopRecord()上成功返回,但這會導致音頻文件爲空。有人可以指出這段代碼可能有什麼問題嗎?使用cordova媒體插件錄製音頻結果爲空文件

$cordovaFile.createFile(cordova.file.dataDirectory, 'new-rec.amr'), false) 
    .then(function (fileObj) { 
     console.log('File created', fileObj); 

     var nativePath = fileObj.nativeURL; 
     resolveLocalFileSystemURL(nativePath, function (entry) { 
     var internalPath = entry.toInternalURL(); 

     var mediaRec = new Media(internalPath, 
      //success callback 
      function (success) { 
      console.log("record success", success); 
      }, 

      //error callback 
      function (err) { 
      console.log("record error: " + JSON.stringify(err)); 
      }); 

     // Start recording audio 
     mediaRec.startRecord(); 
     }); 
    }, function (error) { 
     console.log('Cannot create a file to initiate a new recording', error); 
    }); 
+0

任何這運氣?我有同樣的問題 –

回答

0

我今天有這個完全相同的問題。通過釋放媒體對象解決它。我不知道爲什麼這會有所幫助,但我有一種感覺,可能是操作系統持有媒體對象而不是保存它,然後一旦它被釋放,它會被正確保存?

雖然不是100%的確定。它工作時不會在其他Cordova目錄中釋放(例如cordova.file.externalDataDirectory)。

這裏是我的代碼:

var fileName = randomFileName(); 
fileName = fileName + ".aac"; 
var store = cordova.file.dataDirectory; 

window.resolveLocalFileSystemURL(store, function(dir){ 

    var directoryToSave = dir.nativeURL + fileName;   

    $scope.audioRecording = new Media(directoryToSave, audioRecordingSuccess, audioRecordingFail, audioStatus); 

    $scope.audioRecording.startRecord(); 

    setTimeout(function(){ 
     $scope.audioRecording.stopRecord(); 
     $scope.audioRecording.release(); 
    }, 5000); 

}); 
相關問題