應用協議不允許用於引用打包應用中的音頻/視頻文件。我相信這是一個安全限制是爲了防止跨應用程序的內容閱讀。您需要在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: ");
}
謝謝,但解決方案不工作: - /我得到NS_ERROR_FILE_NOT_FOUND:在控制檯上xhr.send();新代碼https://github.com/Mte90/RingTone-Picker-for-FirefoxOS/blob/master/script.js#L75。它使用DeviceStorage API獲得的路徑: - // – Mte90
如果audio/vid文件位於打包的應用程序中,則應該能夠使用相對url而不是DeviceStorage。在上面的例子中,如果myvid.ogg位於打包應用的vid direcotry中,我會使用xhr.open('GET','vid/myvid.ogg'); –
順便說一句,如果你正在做的僅音頻類型更改爲類似:類型: 「音頻/ MPEG」, 「音頻/ OGG」, 「音頻/ MP4」 ] –