|
录音播放实现方案:终端上通过cordova实现录音,将录音Base64 文件传到服务器端进行解码保存,然后再在终端通过cordova进行播放
Android平台没有问题
IOS平台问题:
问题1、由于cordova插件在IOS上只能使用.WAV格式进行录音,但是通过cordova插件直接播放.WAV文件失败(.MP3没有问题),看是否有遇到此问题的,如何解决?
我目前想到的是做MAV到MP3的转码,最好是在终端侧进行转码,因为MP3格式的文件会小很多,而且能减少服务器解码压力,但终端解码ios和Android都需要实现,实现上更复杂,如果上面没有解决方案,这里求比较好的解码规避方案
例如:
var url = "http://120.25.245.47:8080/x5/news/voice/1444550513130.wav";//.mp3文件OK,Android两者都没有问题
mediaRec = new Media(url,
function() {
},
function(err) {
alert("erro");
},
function(status) {
if(status === 4){
//me.releaseMedia();
}
});
mediaRec.play();
问题2,在IOS平台下录音完毕后,无法读取到录音文件,或者说是录音文件大小为0,Android下一切正常
Model.prototype.getRecordFile = function(path){
var me = this;
var filePath = path;
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
function gotFS(fileSystem) {
fileSystem.root.getFile(filePath, {
create : true,
exclusive : false
}, gotFileEntry, fail);
}
function gotFileEntry(fileEntry) {
fileEntry.file(gotFile, fail);
}
function gotFile(file) {
file.type='audio/wav';
readDataUrl(file);
}
function readDataUrl(file) {
var reader = new FileReader();
reader.onloadend = function(evt) {
var userinfo = common.getUserInfo();
alert(evt.target.result);
var voicefile = encodeURIComponent(evt.target.result);
var success = function(resultData) {
me.removeRecordFile(fileName);
if(resultData.result === 1){
news.newsCommentCount = news.newsCommentCount + 1;
var obj = $(me.getElementByXid("label_news_detail_commentcount"));
var Num = parseInt(obj.text());
Num++;
obj.text(Num);
common.setUserTime(resultData.time);
me.queryComment();
}
else{
common.autoLogin(me.loginOK);
}
};
var error = function(resultData) {
alert("上传失败");
};
Baas.sendRequest({
"url" : "/register",
"action" : "submitNewsVoice",
"async" : true,
"params" : params,
"success" : success,
"error" : error,
});
};
reader.readAsDataURL(file);
}
function fail(evt) {
console.log("code=======" + evt.target.error.code);
alert(evt.target.error.code);
}
};
|
|