使用cordova媒体插件录制音频会导致空文件

Posted

技术标签:

【中文标题】使用cordova媒体插件录制音频会导致空文件【英文标题】:Recording audio using cordova media plugin results in empty file 【发布时间】:2016-01-05 04:59:15 【问题描述】:

我正在使用以下代码在 android 设备上使用 Cordova Media 插件录制音频。尽管在 stopRecord() 上成功返回,这会导致一个空的音频文件。有人能指出这段代码可能有什么问题吗?

$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);
    );

【问题讨论】:

这个运气好吗?我也有同样的问题 【参考方案1】:

我今天遇到了同样的问题。通过释放 Media 对象来解决它。我不确定为什么这会有所帮助,但我有一种感觉,可能是操作系统保留了 Media 对象而不是保存它,然后一旦它被释放,它就被正确保存了?

虽然不是 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);

);

【讨论】:

以上是关于使用cordova媒体插件录制音频会导致空文件的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 插件和依赖项

Cordova:在 iOS 中存储录制的音频文件的正确位置是啥?

phoneGap/Apache Cordova 媒体捕获插件 - 多视频录制

无法使用 XMLHttpRequest 绘制音频文件的波形

如何显示来自 Cordova 媒体捕获的图像和播放音频

iOS 10 上的 Cordova 媒体插件是不是仍可使用后台播放?