如何在fire fox os中使用getUserMedia捕获的Sdcard中存储音频文件

时间:2015-04-13 09:00:58

标签: javascript storage audio-recording firefox-os

我正在创建一个应用程序,当我按下保存按钮时,它会将给定的blob audion数据存储到firefox os中的SD卡中,我在这里呈现代码。

   var audioURL = window.URL.createObjectURL(e.data);
           audio.src = audioURL;
           audio.type="video/ogg";

           deleteButton.onclick = function(e) {
             evtTgt = e.target;
             evtTgt.parentNode.parentNode.removeChild(evtTgt.parentNode);
           }

           saveButton.onclick = function(e) {
             evtTgt = e.target;
             var sdcard = navigator.getDeviceStorage("sdcard");
            var file   = new Blob([audioURL], {type: "video/ogg"});

            var request = sdcard.addNamed(file, "my-file.ogg");

                request.onsuccess = function () {
                var name = this.result;
                console.log('File "' + name + '" successfully wrote on the sdcard storage area');

}

这里我已经编写了代码,但它没有工作。所以任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我假设您从传递给MediaRecorder事件处理程序的"dataavailable"事件对象获取数据,如此处列出的示例所示:https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder/ondataavailable

在这种情况下,e.data已经是Blob,您只需将其传递给addNamed函数,如下所示:https://developer.mozilla.org/en-US/docs/Web/API/DeviceStorage/addNamed

var audioData = e.data,
    audioURL = window.URL.createObjectURL(e.data);
audio.src = audioURL;
audio.type ="video/ogg";

deleteButton.onclick = function(e) {
    evtTgt = e.target;
    evtTgt.parentNode.parentNode.removeChild(evtTgt.parentNode);
}

saveButton.onclick = function(e) {
    evtTgt = e.target;
    var sdcard = navigator.getDeviceStorage("sdcard");
    var request = sdcard.addNamed(audioData, "my-file.ogg");

    request.onsuccess = function () {
        var name = this.result;
        console.log('File "' + name + '" successfully wrote on the sdcard storage area');
    }
}

但是,您应该仔细检查您的代码,因为它似乎有不匹配的括号。