¿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.
- Enviar mensajes FCM del lado del servidor al dispositivo Android
- Android GCM un dispositivo tiene múltiples registro
- SHA1 en Java y PHP con resultados diferentes
- Subiendo la imagen de android a un servidor PHP
- Cómo hacer json api
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?
- Cifrado AES Java -> PHP -> Java
- Seguridad para la aplicación android para comunicarse con webservice
- Envío de datos de Sever a Android Device
- Firebase cómo enviar notificación de tema
- Evitar duplicar la entrada en la base de datos sqllite android
- Android no procesar objeto JSON
- ¿Hay una manera de comprobar si la página se cargó desde el caché del navegador?
- ¿Cuál es mejor para redirigir, resolución de pantalla o agente de usuario?
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.
- Cómo jugar video de youtube en ExoPlayer en Android?
- Establecer el texto del botón en el signo de interrogación