我在播放一个音频文件(.aac)时遇到了问题,该音频文件作为bae64编码的字符串存储在来自javascript的中。
我有以下情况:
UPLOAD_CODE片段:
$.ajax({
url: url,
type: "PUT",
data: requestData,
processData: false,
beforeSend: function (xhr)
{
xhr.setRequestHeader('x-ms-blob-type', 'BlockBlob');
},
tryCount: 0,
retryLimit: NUMBER_OF_RETRIES,
success: successcallback,
error: errorcallback
});
现在一切都很好。我被困在从存储api回放文件。我可以通过网址访问文件,但现在我希望用户能够收听上传的音频。
我一直在思考以下的解决方案,但我还没有开始工作:
使用phonegap媒体类并将url传递给base64编码的字符串并开始播放(流)音频。
下载base64字符串,转换成javascript中的音频文件并开始播放。
将文件上传到Blob存储中,作为一个实际的aac文件,而不是base64编码的字符串,以便在打开url时开始播放,例如浏览器。
D.?
以何种方式可以将这些场景转换为可行的解决方案?
发布于 2014-02-11 06:28:56
我已经通过将文件上传为byte[]而不是base64编码的字符串来解决这个问题。文件get作为.aac音频文件存储在blob存储器中,可以直接从存储区播放。
在上传时,我使用了以下代码:
var reader = new FileReader();
reader.onloadend = function (evt) {
if (evt.target.readyState === FileReader.DONE) { // DONE == 2
var RETRY_TIMEOUT_SECONDS = 5;
var NUMBER_OF_RETRIES = 3;
var requestData = new Uint8Array(evt.target.result);
$.ajax({
url: url,
type: "PUT",
data: requestData,
processData: false,
beforeSend: function (xhr) {
xhr.setRequestHeader('x-ms-blob-type', 'BlockBlob');
},
tryCount: 0,
retryLimit: NUMBER_OF_RETRIES,
success: function (data, status) {
console.log(status);
},
error: function (xhr, desc, err) {
if (xhr.status === 403) {
console.log("Access denied, the assigned upload time has been exeeded");
} else {
this.tryCount += 1;
if (this.tryCount <= this.retryLimit) {
console.log("Retrying transmission");
setTimeout($.ajax(this), RETRY_TIMEOUT_SECONDS * 1000);
return;
}
}
console.log(desc);
console.log(err);
}
});
}
};
// Read the file as a byte[]
reader.readAsArrayBuffer(dbFile);
https://stackoverflow.com/questions/21590097
复制