Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 上传明显成功时,为什么上传的音频会损坏?_Javascript_Php_Android_Cordova_Html5 Audio - Fatal编程技术网

Javascript 上传明显成功时,为什么上传的音频会损坏?

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

我已经使用JavaScript、PHP和Cordova上传了一篇文章。一切正常。但当我试图在浏览器或Windows Media player等桌面播放器中打开上传的mp3时,它会说文件已损坏。知道为什么会这样吗

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

我的代码:

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