2014-01-21 70 views
1

我正在開發適用於Firefox OS的應用程序< 1.3將您的歌曲設置爲鈴聲。 回購https://github.com/Mte90/RingTone-Picker-for-FirefoxOS和有問題的文件的script.jsAudio.src和Firefox中的路徑操作系統

在行https://github.com/Mte90/RingTone-Picker-for-FirefoxOS/blob/master/script.js#L73它是正確的,如「/emmc/audio.ogg」,但音頻播放器返回核心錯誤4. 這個問題對於一個路徑錯誤的路徑,但路徑是正確的!

如果我在線上添加74 console.log(player.src)返回類似「app://strangenumberhash/emmc/audio.ogg」的路徑。 我不知道如何解決這個問題。

回答

1

應用協議不允許用於引用打包應用中的音頻/視頻文件。我相信這是一個安全限制是爲了防止跨應用程序的內容閱讀。您需要在HTML中使用音頻標籤或使用XMLHttpRequest。類似下面的(視頻爲例):

var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'myvid.ogg'); 
xhr.responseType = 'blob'; 
xhr.send(); 
xhr.onload = function() { 
videoblob = new Blob([xhr.response], { type: 'video/ogg' }); 
    var openingVideo = new MozActivity({ 
      name: "open", 
      data: { 
       type: [ 
        "video/webm", 
        "video/mp4", 
        "video/3gpp", 
        "video/mkv", 
        "video/ogg" 
       ], 
       blob: videoblob 
      } 
     });     

}; 
xhr.onerror = function() { 
    console.log('Error loading test video', xhr.error.name); 
}; 

如果該文件是在SD卡,你有兩個選擇:

一個你可以只使用一個選秀活動,讓用戶找到它:

var act = new MozActivity({ 
    name: 'pick', 
    data: { 
     type: 'audio/ogg' 
    } 
    }); 

,或者您可以設置在該清單中的SD卡讀寫權限和手動閱讀並與音頻標籤或有開啓的活動(非常小的錯誤檢查)播放。

var sdcard = navigator.getDeviceStorage('sdcard'); 
//assumes sample.ogg is located at the top of the sdcard 
var request = sdcard.get("sample.ogg"); 

request.onsuccess = function() { 
    var file = this.result; 
    console.log("Get the file: " + file.name); 
    var mysrc = URL.createObjectURL(file); 
    var audio1 = new Audio(); 
    audio1.onerror = function(e) { 
    console.log(" error playing file "); 
    } 
    audio1.src = mysrc; 
    audio1.type = "video/ogg"; 
    console.log("audio src " + audio1.src); 
    audio1.play(); 
    URL.revokeObjectURL(url); 
} 
request.onerror = function() { 
    console.warn("Unable to get the file: "); 
} 
+0

謝謝,但解決方案不工作: - /我得到NS_ERROR_FILE_NOT_FOUND:在控制檯上xhr.send();新代碼https://github.com/Mte90/RingTone-Picker-for-FirefoxOS/blob/master/script.js#L75。它使用DeviceStorage API獲得的路徑: - // – Mte90

+0

如果audio/vid文件位於打包的應用程序中,則應該能夠使用相對url而不是DeviceStorage。在上面的例子中,如果myvid.ogg位於打包應用的vid direcotry中,我會使用xhr.open('GET','vid/myvid.ogg'); –

+0

順便說一句,如果你正在做的僅音頻類型更改爲類似:類型: 「音頻/ MPEG」, 「音頻/ OGG」, 「音頻/ MP4」 ] –

相關問題