Почему загруженный звук поврежден, когда загрузка явно успешна?
Я сделал загрузку с использованием JavaScript, PHP и Cordova. Все работает нормально. Но когда я пытаюсь открыть загруженный mp3 в браузере или настольном проигрывателе, таком как Windows Media Player, он говорит, что файл поврежден. Любая идея, почему это происходит?
Я также должен сказать, что, когда я проверяю поврежденный файл в браузере, у него есть видео теги вместо звуковых тегов.
Мой код:
//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 в 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;
}
?>
ОБНОВЛЕНИЕ:
Кажется, что проблема заключается в файле (который работает в Android). Я скопировал файл через USB-устройство и попытался воспроизвести его, и есть та же проблема, файл не будет воспроизводиться.
Я должен сказать, что файл записывается с использованием медиа-плагина из кордовы. Может быть, это проблема, верно?
ВТОРОЕ ОБНОВЛЕНИЕ:
Я записал и загрузил файл в формате .amr
и преобразовал его в .mp3
онлайн здесь, и звук работает. Любая идея о том, как решить эту проблему?
Ответы
Ответ 1
Он может быть mp3
закодирован таким образом, что игрок mp3
не понимает. Некоторые проигрыватели mp3
поддерживают только аудиокодирование определенным образом и не будут поддерживать определенные методы кодирования, такие как переменная скорость передачи, высокие скорости передачи (320 кбит/с) или mp3
с помощью DRM.
Как разработчик приложений, вы можете использовать любой медиакодек, который доступен на любом устройстве на базе Android, в том числе и на платформе Android, и на устройствах, специфичных для устройства. Тем не менее, лучше всего использовать профили кодирования медиа, которые являются агностическими,
Android-форматы для Android.
Как вы делаете файл mp3
в первую очередь?
Я делаю 3gp
аудиофайлы на android, и они отлично играют в VLC Media Player
.
Кордова на Android устройства записать аудио в Adaptive Multi-Rate формате. Указанный файл должен заканчиваться расширением. amr. (это НЕ выбор, это факт).
// 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
Файл не является одним из поддерживаемых аудиофайлов, поддерживаемых html5
звуковым тегом. Пожалуйста, смотрите этот список для поддерживаемых аудиоформатов:
поддерживаемые html5 аудиоформаты
Преобразование файлов см. в:
конвертировать
Если вы не знаете, что такое Cordova
, см. руководство по быстрой установке в stackoverflow: Кордова быстро установить со ссылками на учебник.
Если вы хотите, чтобы вывод android .wav
здесь был чем-то интересным (у андроида нет .wav-кодека!) (непроверенный мной, но я знаю такой код, кажется хорошим).
Ответ 2
Вероятно, вы загружаете свои файлы в ASCII вместо двоичного? Я не очень хорош с PHP, но для меня, похоже, довольно вероятно, что вам нужно что-то сказать, это двоичный файл, а не текст. Вероятно, вы можете указать в своих вариантах.