上传显然成功后为什么上传的音频已损坏?

我使用JavaScriptPHP和Cordova进行了上传。 一切正常。 但是当我尝试在浏览器或Windows Media Player等桌面播放器中打开上传的mp3时,它说该文件已损坏。 知道为什么会这样吗?

我还必须说,当我在浏览器中检查损坏的文件时,它有video标签而不是音频标签。

我的代码:

//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中的服务器端处理脚本:

  

更新

似乎问题出在文件中(在android上播放)。 我通过USB设备复制文件并尝试播放它并且存在同样的问题,文件将无法播放。 我不得不说使用cordova的媒体插件记录文件。 也许这就是问题,对吧?

第二次更新

我以.amr格式录制并上传了一个文件,并将其转换为.mp3在线,声音有效。 有关如何解决此问题的任何想法?

Solutions Collecting From Web of "上传显然成功后为什么上传的音频已损坏?"

可能是mp3mp3播放器不理解的方式编码。 一些mp3播放器仅支持以某种方式编码的音频,并且不支持某些编码方法,如可变比特率,高比特率(320kbps +)或带有DRM的 mp3
作为应用程序开发人员,您可以自由使用任何Android设备上提供的任何媒体编解码器,包括Android平台提供的设备和特定于设备的设备。 但是,最佳做法是使用与设备无关的Android媒体格式的媒体编码配置文件。

你是如何制作mp3文件的? 我在android上制作3gp音频文件,它们在VLC Media Player播放得很好。

Android设备上的Cordova自适应多速率格式 录制音频 。 指定的文件应以a结尾。 扩展名。 (这不是一个选择,这是一个事实)。

 // 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); } 

AMR文件不是html5 audio tag支持的音频文件之一。 有关支持的音频格式,请参阅此列表: html5支持的音频格式

文件转换请参阅: 转换

如果您不知道Cordova是什么,请参阅我的stackoverflow快速安装指南:
Cordova快速安装,带有教程链接。

如果你想要android .wav输出这里是有趣的东西(android没有.wav编解码器!)(我未经测试,但我知道这种代码,似乎很好) 。

你可能用ASCII而不是二进制文件上传你的文件? 我对PHP不太好,但对我而言,你似乎很可能需要告诉它是二进制文件而不是文本。 您可以在选项中指定一些内容。