Ion*_*ula 21 javascript php android html5-audio cordova
我使用JavaScript,PHP和Cordova进行了上传.一切正常.但是当我尝试在浏览器或Windows Media Player等桌面播放器中打开上传的mp3时,它说该文件已损坏.知道为什么会这样吗?
我还必须说,当我在浏览器中检查损坏的文件时,它有视频标签而不是音频标签.
我的代码:
//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);
});
Run Code Online (Sandbox Code Playgroud)
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;
}
?>
Run Code Online (Sandbox Code Playgroud)
更新:
似乎问题出在文件中(在android上播放).我通过USB设备复制文件并尝试播放它并且存在同样的问题,文件将无法播放.我不得不说使用cordova的媒体插件记录文件.也许这就是问题,对吧?
第二次更新:
我录制并上传了一个文件作为.amr格式并在此转换为.mp3在线并且声音有效.有关如何解决此问题的任何想法?
它可能mp3是以mp3玩家不理解的方式编码的.一些mp3播放器仅支持以某种方式编码的音频,并且不支持某些编码方法,如可变比特率,高比特率(320kbps +)或mp3带有DRM的编码.
作为应用程序开发人员,您可以自由使用任何Android设备上提供的任何媒体编解码器,包括Android平台提供的设备和特定于设备的设备.但是,最佳做法是使用与设备无关的Android媒体格式的媒体编码配置文件
.
你是如何制作mp3文件的?我3gp在Android上制作音频文件并且它们可以正常播放VLC Media Player.
Android设备上的Cordova以自适应多速率格式录制音频.指定的文件应以a结尾.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);
}
Run Code Online (Sandbox Code Playgroud)
AMRfile不是html5audio tag支持的音频文件之一.有关支持的音频格式,请参阅此列表:
html5支持的音频格式
文件转换请参阅: 转换
如果您不知道是什么Cordova,请参阅我的stackoverflow快速安装指南:
Cordova快速安装以及指向教程的链接.
如果你想要android .wav输出这里是有趣的东西(android没有.wav编解码器!)(我未经测试,但我知道这种代码,看起来不错).
| 归档时间: |
|
| 查看次数: |
1001 次 |
| 最近记录: |