¿Por qué el audio subido está dañado cuando la subida es claramente exitosa?

He hecho una subida usando JavaScript, PHP y Cordova. Todo funciona bien. Pero cuando intento abrir el mp3 cargado en el hojeador o un jugador de escritorio como el jugador de Windows Media, dice que el archivo está corrupto. ¿Alguna idea de por qué está pasando esto?

También tengo que decir que cuando inspecciono el archivo dañado en el navegador que tiene etiquetas de vídeo en lugar de etiquetas de audio.

Mi código:

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

Script de manejo del lado del servidor en PHP:

 <?php // Where the file is going to be placed $target_path = dirname(__FILE__) . "/uploaded_records/"; if (!file_exists($target_path)) { mkdir ($target_path, 0777); } /* Add the original filename to our target path. Result is "uploads/filename.extension" */ $target_path = $target_path . basename( $_FILES['file']['name']); $path = $_FILES['file']['name']; $ext = pathinfo($path, PATHINFO_EXTENSION); var_dump("ext is: " . $ext); if(move_uploaded_file($_FILES['file']['tmp_name'], $target_path)) { echo "The file ". basename( $_FILES['file']['name']). " has been uploaded"; } else{ echo "There was an error uploading the file, please try again!"; echo "filename: " . basename( $_FILES['file']['name']); echo "target_path: " .$target_path; } ?> 

ACTUALIZACIÓN :

Parece que el problema se encuentra dentro del archivo (que en el androide funciona jugando). Copié el archivo a través del dispositivo usb y probé a jugar y no es el mismo problema, el archivo no se reproduce. Tengo que decir que el archivo se graba utilizando el plugin multimedia de Córdoba. Tal vez este es el problema, ¿verdad?

SEGUNDA ACTUALIZACIÓN :

.amr y subido un archivo como un formato. .amr y lo convirtió a .mp3 línea aquí y el sonido funciona. ¿Alguna idea sobre cómo resolver este problema?

Podría ser mp3 está codificado de una manera que el reproductor de mp3 no entiende. Algunos reproductores de mp3 solo soportan codificación de audio de cierta manera y no soportarán ciertos métodos de codificación como velocidad de bits variable, altas velocidades de bits (320kbps +), o mp3 con DRM .
Como desarrollador de aplicaciones, puede utilizar cualquier codec multimedia disponible en cualquier dispositivo con Android, incluidos los proporcionados por la plataforma Android y los que sean específicos de cada dispositivo. Sin embargo, es una práctica recomendada usar perfiles de codificación de medios que sean agnósticos de dispositivos. Formatos de medios de comunicación Android .

¿Cómo estás haciendo el archivo mp3 en el primer lugar? Hago 3gp archivos de audio en Android y juegan bien en VLC media player.

Cordova en dispositivos Android graba audio en formato Adaptable Multi-Rate . El archivo especificado debe terminar con un archivo. Amr extensión. (Esto no es una opción, es un hecho).

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

El archivo AMR no es uno de los archivos de audio compatibles que soporta la etiqueta de audio html5. Consulte esta lista para ver los formatos de audio compatibles: html5 formatos de audio compatibles

Conversión de archivos ver: convertir

Si no sabe qué es Cordova, consulte mi guía de instalación rápida de stackoverflow:
Cordova instalación rápida con enlaces a un tutorial.

Si usted quiere la salida de .wav de android aquí es algo interesante (android no tiene un códec de .wav!) (Untested por mí, pero sé este tipo de código, parece bueno) .

Es probable que esté cargando sus archivos en ASCII en lugar de binario? No soy genial con PHP, pero para mí parece bastante probable que necesite decir algo que es un archivo binario en lugar de texto. Probablemente algo que puede especificar en sus opciones.

  • PHP HTTP POST en el dispositivo Android mediante HttpURLConnection
  • Android push notificación a muchos dispositivos a la vez usando google c2dm
  • Enviar solicitud de correo utilizando Volley y recibir en PHP
  • ¿Cómo se puede autenticar una aplicación nativa de Android con el backend web?
  • Android VMD MySQL insertar y mostrar el diálogo
  • Cómo romper el contenido de las notificaciones en Android
  • ¿Dónde ejecutar algoritmos complejos? Lado del servidor o lado del cliente?
  • PHP + Android XML Encryption / Decryption
  • Archivo de imagen de Android enviado a archivo de imagen de carga de php es el tipo de aplicación / octet-stream y no image / jpeg?
  • Recuperar la imagen de mysql-php (android)
  • Agregar una cookie a una solicitud HTTP
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.