javascript - para - ¿Por qué el audio cargado está dañado cuando la carga es claramente exitosa?
llamar javascript desde html (2)
¿Es probable que esté cargando sus archivos en ASCII en lugar de en formato binario? No soy genial con PHP, pero a mí me parece bastante probable que necesites decir que es un archivo binario en lugar de texto. Probablemente algo que pueda especificar en sus opciones.
He hecho una carga usando JavaScript, PHP y Cordova. Todo funciona bien Pero cuando trato de abrir el archivo mp3 cargado en el navegador o en un reproductor de escritorio como Windows Media Player, dice que el archivo está dañado. ¿Alguna idea de por qué está pasando esto?
También debo decir que cuando inspecciono el archivo dañado en el navegador, tiene etiquetas de video 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;
}
?>
ACTUALIZAR :
Parece que el problema radica en el archivo (que en Android funciona). Copié el archivo a través de un dispositivo usb e intenté reproducirlo y existe el mismo problema, el archivo no se reproduce. Debo decir que el archivo se graba utilizando el complemento multimedia de cordova. Tal vez este es el problema, ¿verdad?
SEGUNDA ACTUALIZACIÓN :
.amr
y cargué un archivo como formato .amr
y lo convertí en .mp3
línea here y el sonido funciona. ¿Alguna idea sobre cómo resolver este problema?
Puede ser que el mp3
esté codificado de una manera que el reproductor de mp3
no entiende. Algunos mp3
solo admiten el audio codificado de cierta manera y no son compatibles con ciertos métodos de codificación como velocidad de bits variable, altas velocidades de bits (320 kbps +) o mp3
con DRM .
Como desarrollador de aplicaciones, puede usar cualquier códec de medios disponible en cualquier dispositivo con Android, incluidos los proporcionados por la plataforma Android y aquellos que sean específicos del dispositivo. Sin embargo, es una práctica recomendada utilizar perfiles de codificación de medios que son independientes del dispositivo, formatos de medios de Android .
¿Cómo estás haciendo el archivo mp3
en primer lugar? Hago archivos de audio de 3gp
en Android y juegan bien en VLC Media Player
.
Cordova en dispositivos Android graba audio en formato Adaptive Multi-Rate . El archivo especificado debe terminar con a. amr extension. (esto NO es una elecció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);
}
AMR
archivo AMR
no es uno de los archivos de audio admitidos que admite la etiqueta de audio html5
. Consulte esta lista de formatos de audio admitidos: formatos de audio compatibles con html5
Conversión de archivos ver: convert
Si no sabe qué es Cordova
, consulte mi guía de instalación rápida de :
Instalación rápida de Cordova con enlaces a un tutorial.