Javascript 上传明显成功时,为什么上传的音频会损坏?
我已经使用JavaScript、PHP和Cordova上传了一篇文章。一切正常。但当我试图在浏览器或Windows Media player等桌面播放器中打开上传的mp3时,它会说文件已损坏。知道为什么会这样吗 我还必须说,当我在浏览器中检查损坏的文件时,它有视频标记而不是音频标记 我的代码:Javascript 上传明显成功时,为什么上传的音频会损坏?,javascript,php,android,cordova,html5-audio,Javascript,Php,Android,Cordova,Html5 Audio,我已经使用JavaScript、PHP和Cordova上传了一篇文章。一切正常。但当我试图在浏览器或Windows Media player等桌面播放器中打开上传的mp3时,它会说文件已损坏。知道为什么会这样吗 我还必须说,当我在浏览器中检查损坏的文件时,它有视频标记而不是音频标记 我的代码: //method to upload the audio function uploadAudio(recordedSrc) { var win = function(r) { console
//method to upload the audio
function uploadAudio(recordedSrc) {
var win = function(r) {
console.log("Code = " + r.responseCode);
console.log("Response = " + r.response);
console.log("Sent = " + r.bytesSent);
}
var fail = function(error) {
alert("An error has occurred: Code = " + error.code);
console.log("upload error source " + error.source);
console.log("upload error target " + error.target);
}
var options = new FileUploadOptions();
options.fileKey = "file";
options.fileName = "recordupload.mp3";
options.mimeType = "audio/mpeg";
console.log(options);
var ft = new FileTransfer();
console.log(ft);
console.log(recordedSrc);
ft.upload(recordedSrc, encodeURI(app_url + "json/upload.php"), win, fail, options);
}
$('.upload').on('click', function(e) {
e.preventDefault();
//Method to upload Audio file to server
uploadAudio(mediaRecSrc);
});
PHP中的服务器端处理脚本:
更新:
问题似乎出在文件中(安卓系统上的文件正在播放)。我通过usb设备复制了文件,并尝试播放,但也存在同样的问题,文件无法播放。
我不得不说,该文件是使用cordova的媒体插件录制的。也许这就是问题所在,对吧
第二次更新:
我以
.amr
格式录制并上传了一个文件,并将其转换为.mp3
在线播放,声音正常。你知道如何解决这个问题吗?你可能是在用ASCII而不是二进制上传文件?我对PHP不是很在行,但对我来说,很可能你需要告诉别人它是一个二进制文件,而不是文本。可能是您可以在选项中指定的内容。可能是mp3
的编码方式是mp3
播放器无法理解的。一些mp3
播放器只支持以某种方式编码的音频,不支持某些编码方法,如可变比特率、高比特率(320kbps+)或带有的mp3
。作为应用程序开发人员,您可以自由使用任何Android设备上可用的任何媒体编解码器,包括Android平台提供的编解码器和特定于设备的编解码器。但是,最好使用与设备无关的媒体编码配置文件, 您首先是如何制作
mp3
文件的?
我在android上制作了3gp
音频文件,它们在VLC媒体播放器中播放得很好
Android上的Cordova设备以自适应多速率格式录制音频。指定的文件应以.amr扩展名结尾。(这不是一个选择,而是一个事实)
AMR
文件不是html5
audio标签支持的受支持音频文件之一。有关支持的音频格式,请参见此列表:
文件转换请参阅:
如果您不知道什么是Cordova
,请参阅我的stackoverflow快速安装指南:
,其中包含指向教程的链接
.ft.upload()实际上在做什么?@TodorKostov,它正在使用AJAX处理上传。它将文件infos发送到upload.php脚本。显然,它正在这样做。问题是怎么做?这是您自己编写的(它意味着可能的bug和错误)还是第三方功能(也意味着可能的错误,但程度较低)?如果它来自一个由数百名开发人员使用的库或类似的东西,那么问题可能不在于您上传文件的方式。这将帮助我们解决问题。我使用内置的cordova文件传输插件。所以是第三方在处理请求。@TodorKostov,也可以在此处找到插件文档:。也许它会帮助你帮助我:)我不认为在我的情况下是这样的。可能值得检查。如果您打开“web检查器和网络”选项卡,您可以看到上载标题等,以确保。您好。谢谢你的回答。在android上,音频播放效果很好。在台式机/笔记本电脑上显示它已损坏。要创建mp3文件,我使用cordova来记录和保存文件。我将检查cordova有哪些配置选项,并交叉检查哪些桌面应用程序接受为有效。我在android上录制自己的音频,我会在桌面上检查我的文件。好的。谢谢你抽出时间来帮助我。我期待你的回答。此外,我忘了告诉你,我需要能够使用HTML 5音频播放音频,amr将不起作用,mp3现在不起作用。如果你将文件复制到你的电脑,然后直接复制回你的手机,它运行正常,那么我们知道这是关于文件格式,而不是下载/上传过程。
// Record audio
//
function recordAudio() {
var src = "myrecording.amr";
var mediaRec = new Media(src, onSuccess, onError);
// Record audio
mediaRec.startRecord();
// Stop recording after 10 sec
var recTime = 0;
var recInterval = setInterval(function() {
recTime = recTime + 1;
setAudioPosition(recTime + " sec");
if (recTime >= 10) {
clearInterval(recInterval);
mediaRec.stopRecord();
}
}, 1000);
}