好久沒有寫博客了,這段時間遇到了很多問題都沒有記錄下來
今天剛好上線了一個小活動,期間遇到一些比較折騰的問題,撐著有時間記錄一下
需求
臨近圣誕節,運營組想了一個活動來拉新,活動的大概內容是這樣的;
用戶訪問活動首頁, 點擊 【我想說】 然后調用微信的 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等等