¿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.
- Cliente-Servidor-Comunicación con php y android
- Cargar archivos de android (java) a un servidor mediante PHP
- Caracteres especiales entre la aplicación de Android y el script PHP
- SyncML con Android y servicio Web de PHP
- Android MediaPlayer Streaming desde un redireccionamiento PHP no funciona-out!
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?
- problema POST android JSONObject a PHP
- ¿Por qué la función no obtiene datos de php en android?
- ¿Cómo conectar el cliente de android a la localhost del servidor de Apache (php) dentro de mi computadora portátil?
- Evitar duplicar la entrada en la base de datos sqllite android
- Aplicación Web de Android RESTful con Zend Framework
- Envíe archivos grandes (de vídeo) desde Android a PHP Server
- El servidor GCM de Google devuelve Error no autorizado 401
- Tratando de obtener array de php y almacenar en java, android
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