¿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.

  • Envío de datos JSON de Android a PHP y escritura a archivo de texto
  • Implementación C2DM código PHP
  • Enviar mensajes FCM del lado del servidor al dispositivo Android
  • tools / android devuelto no puede encontrar sdkmanager.jar
  • No se puede ver la respuesta JSON de php en android
  • ¿Qué es un buen enfoque de diseño de base de datos para mi aplicación Android Quiz?
  • ¿Cómo administrar tokens de sesión entre varias aplicaciones de cliente (android / iphone) desde el lado del servidor php y mysql?
  • FCM push notification issue: - "error": "NotRegistered"
  • Convertir PHP / MYSQL / sitio web existente en IOS Nativo / Aplicaciones de Android
  • Cómo hacer que Android y Arduino se comuniquen sin un módulo inalámbrico
  • Ejecutar script php a través de la aplicación para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.