起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25394|回复: 16

[结贴] 通过cordova media实现录音播放问题

  [复制链接]

2

主题

17

帖子

113

积分

初级会员

Rank: 2

积分
113
QQ
发表于 2015-10-12 20:59:45 | 显示全部楼层 |阅读模式
录音播放实现方案:终端上通过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);
      }
        };
       

2

主题

17

帖子

113

积分

初级会员

Rank: 2

积分
113
QQ
 楼主| 发表于 2015-10-13 09:43:24 | 显示全部楼层
是否有人遇到过
回复 支持 反对

使用道具 举报

发表于 2015-10-13 14:36:46 | 显示全部楼层
可以参考平台案例的实现:/UI2/demo/device/audio/mainActivity.w
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

2

主题

17

帖子

113

积分

初级会员

Rank: 2

积分
113
QQ
 楼主| 发表于 2015-10-13 19:08:39 | 显示全部楼层
这个例子看过了呀,播放语音的代码和我的测试代码没有什么区别,唯一的区别是URL不同,这个例子属于本地录音本地播放,我需要将录音文件传到服务器上,类似微信语音功能。
问题1:没有方案,尝试一下服务器解码先吧http://www.thinksaas.cn/group/topic/349549/%20}
问题2:看了很多国外的帖子,尝试了也还是为空不行。。。
http://ramkulkarni.com/blog/using-phonegap-media-apis/
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36064
发表于 2015-10-14 10:32:26 | 显示全部楼层
在成功回退函数中也获取不到吗?
media.png
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

2

主题

17

帖子

113

积分

初级会员

Rank: 2

积分
113
QQ
 楼主| 发表于 2015-10-14 18:46:27 | 显示全部楼层
这个回调函数里面调用拿不到录音数据吧,这里应该只是新建一个Media对象的回调,还没有启动录音,我需要类似微信语音一样效果,按住按钮启动录音,松开上传录音文件
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36064
发表于 2015-10-15 11:56:50 | 显示全部楼层
agent 发表于 2015-10-14 18:46
这个回调函数里面调用拿不到录音数据吧,这里应该只是新建一个Media对象的回调,还没有启动录音,我需要类 ...

这个就是插件的标准使用,需要到网上查找了
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

2

主题

17

帖子

113

积分

初级会员

Rank: 2

积分
113
QQ
 楼主| 发表于 2015-11-4 23:28:09 | 显示全部楼层
问题解决了一段时间了,忘记结帖了,还是要感谢党和政府将google及时解放,自己改了一个插件搞定了,接贴吧
回复 支持 反对

使用道具 举报

42

主题

154

帖子

310

积分

中级会员

Rank: 3Rank: 3

积分
310
QQ
发表于 2015-12-19 15:19:27 | 显示全部楼层
agent 发表于 2015-11-4 23:28
问题解决了一段时间了,忘记结帖了,还是要感谢党和政府将google及时解放,自己改了一个插件搞定了,接贴吧 ...

你的IOS录完音后的路径是怎么获得的
回复 支持 反对

使用道具 举报

13

主题

36

帖子

70

积分

初级会员

Rank: 2

积分
70
QQ
发表于 2016-1-18 15:24:00 | 显示全部楼层
agent 发表于 2015-11-4 23:28
问题解决了一段时间了,忘记结帖了,还是要感谢党和政府将google及时解放,自己改了一个插件搞定了,接贴吧 ...

方便共享一下吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-21 21:03 , Processed in 0.064988 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表