好久没有写博客了,这段时间遇到了很多问题都没有记录下来
今天刚好上线了一个小活动,期间遇到一些比较折腾的问题,撑着有时间记录一下
需求
临近圣诞节,运营组想了一个活动来拉新,活动的大概内容是这样的;
用户访问活动首页, 点击 【我想说】 然后调用微信的 JSDK 来录音,录完音之后上传到微信的服务器,然后 前端根据声音生成一张圣诞树形状的声波图,用户点击分享生成一张海报,其他用户扫描二维码可以收听你分享的语音;然后别人参与活动的时候需要先关注公众号;
这个需求很简单吧,逻辑清晰的不行…好 开搞
微信开发者JSDK文档
看完这些文档, 很棒!简单! 微信该提供的都提供了
1、调用wx.startRecord();开始录音
2、调用wx.stopRecord();结束录音,可以得到 localId(注意这个并不是录音存放在手机的路径)
3、调用wx.uploadVoice()上传录音,需要传入2拿到的localId; 微信会返回一个 serverId; (这个serverId 就是微信的素材文件的mediaId;通过这个mediaId 可以从微信服务器下载文件的)
4、ok! 上传成功了 分享的时候把这个serverId分享出去!
5、被分享人拿到这个serverId之后调用wx.downloadVoice();这个接口需要4的serverId,然后这个语音素材就下载到了用户手机,并且返回了一个 localId(注意这个并不是录音存放在手机的路径)
6、用户点击[播放语音] 则调用wx.playVoice()来播放语音,需要5返回的localId;
完美! 一个流程下来虽然步骤多了一点,但是并不是不可行啊,既然可行那就撸起袖子干吧!
但是仔细一看 就发现有很多问题了
1、
通过这种方式上传的语音 属于 【临时素材】,只有3天的有效期!
那么就直接将上面想到的方案给否定掉了,因为你分享出去之后过了3天别人就听不到了!
2、上面的方案有个弊端就是 ,用户收听别人的语音都需要下载,每次都要下载是一件让用户很烦的一件事情;
3、通过微信 【下载临时素材】接口下载语音素材的格式是 amr ; 如果通过微信 的wx.playVoice()播放可能没什么问题,但是这个方案,但是这个方案已经不行了,因为你不能通过wx.downloadVoice()下载语音了(3天有效期一过就不行);
既然上面的方案不行,不足也很清楚, 那么我们换种实现
主要思路:将文件下载到我们自己的服务器上,将amr格式转码成mp3等等