微信開發上傳用戶語音 并轉碼 分享

      網友投稿 774 2022-05-30

      好久沒有寫博客了,這段時間遇到了很多問題都沒有記錄下來

      今天剛好上線了一個小活動,期間遇到一些比較折騰的問題,撐著有時間記錄一下

      需求

      臨近圣誕節,運營組想了一個活動來拉新,活動的大概內容是這樣的;

      用戶訪問活動首頁, 點擊 【我想說】 然后調用微信的 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等等

      詳細步驟:

      1、調用wx.startRecord();開始錄音

      2、調用wx.stopRecord();結束錄音,可以得到 localId(注意這個并不是錄音存放在手機的路徑)

      3、調用wx.uploadVoice()上傳錄音,需要傳入2拿到的localId; 微信會返回一個 serverId; (這個serverId 就是微信的素材文件的mediaId;通過這個mediaId 可以從微信服務器下載文件的)

      (前面3個步驟不變 )

      4、前端上傳完了之后,調用我的 【下載臨時素材到我們自己服務器并且轉碼成MP3并且上傳到阿里云OSS并且返回訪問鏈接】的接口

      需要3獲取到的serverId(就是這里的media_id)作為參數;

      5、前端拿到了4中的 語音鏈接 然后分享出去帶上這個鏈接(鏈接太長可以自己做個對應)

      6、被分享著點擊播放 直接使用 元素

      7、PS:千萬不要在 微信開發者工具中 調試[上傳語音]的接口;它不支持的!

      好 ! 流程這樣就沒有錯了, 但是正在做的時候猜的坑也不少

      最主要的就是 4 中 【下載臨時素材到我們自己服務器并且轉碼成MP3并且上傳到阿里云OSS并且返回訪問鏈接】

      這個接口踩得坑真的不少,最主要的就是轉碼;網上文章一艘沒有幾篇有價值的東西 ;

      主要就是 調用 jave 這個jar包去轉碼, 其實最終這個jave 調用了一個叫做 ffmpeg 轉碼程序來轉碼的;然后這個程序不同環境還不一樣的

      我的是Mac 然后服務器又需要Linux版本的;

      啰嗦我就不啰嗦了 , 推薦一個解決方案 ,我就是用的這種

      Amr轉Mp3

      public class changToMp3 { public static void main(String[] args) throws Exception { String path1 = "/Users/XXX/Desktop/voice/1111.amr"; String path2 = "/Users/XXX/Desktop/voice/1111.mp3"; System.setProperty("ffmpeg.home", "/Users/XXX/Desktop/voice/"); it.sauronsoftware.jave.AudioUtils.amrToMp3(path1, path2); } }

      再上傳一個Linux版本的提供下載:ffmpeg for linux

      如果還有windows版本的 或者上面我發的不支持的;可以去官網自己下載 地址:FFMPEG下載

      下載完解壓之后 找到對應程序 放到某個路徑 然后 代碼設置的路徑跟程序路徑一直即可!

      貼一下關鍵代碼:

      @Override public RpcResult amr2mp3Upload2OSS(String gzhAppid, String mediaId,String ossDirKey) { RpcResult result = new RpcResult(); PutResult p = new PutResult(); String filepath ;String name ; try { //下載臨時文件到 服務器本地 File file = WxMpConfiguration.getMpServices().get(gzhAppid).getMaterialService().mediaDownload(mediaId); if(file == null){ result.setFail("-1", "操作失敗,mediaId 不存在或已過期"); return result; } filepath = file.getPath(); name = file.getName(); name = name.replace(".amr",".mp3"); } catch (WxErrorException e) { result.setFail(e.getError().getErrorCode()+"", e.getError().getErrorMsg()); return result; } //設置 使用轉碼軟件的 程序地址 (要在對應的地址有這個執行腳本) System.setProperty("ffmpeg.home", ffmpeg); String targetPath = mp3_path+name; //轉碼之后存到本地服務器 it.sauronsoftware.jave.AudioUtils.amrToMp3(filepath, targetPath); PutResult putResult = mossClient.putObject(ossDirKey+ UUID.randomUUID(),new File(targetPath)); BeanUtils.copyProperties(putResult,p); result.setResult(p); result.setSuccess(); return result; }

      PS: 在調用 wx.uploadVoice() 的接口 千萬不要在 微信開發者工具中測試,它不支持,每次返回的都是一樣的數,這個要在手機端測試

      轉碼程序一定要接到放到目標服務器上,并且有可以執行的權限(X的權限)

      微信開發者配置記得配置JS安全域名不然不能夠調用接口

      給微信開發者推薦一個開源項目

      推薦:班納睿 / weixin-java-tools

      真的強,基于這個開發特別方便! 強推!

      Java 語音通話

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Python代碼覆蓋率分析工具----Coverage
      下一篇:Windows10 Hadoop3.3.0源碼編譯
      相關文章
      国产一区二区三区亚洲综合| 国产啪亚洲国产精品无码| 亚洲AV日韩AV永久无码色欲| 亚洲制服丝袜在线播放| 亚洲av无码不卡一区二区三区| 超清首页国产亚洲丝袜| 高清在线亚洲精品国产二区| 亚洲Av永久无码精品黑人| 亚洲中文无码永久免| 亚洲伊人久久大香线蕉结合| 亚洲专区中文字幕| 亚洲国产人成在线观看| 亚洲视频免费一区| 亚洲国产美女精品久久久久| 亚洲国产精品综合一区在线| 性xxxx黑人与亚洲| 在线观看亚洲AV日韩A∨| 国产精品高清视亚洲一区二区| 国产v亚洲v天堂a无| 亚洲精品中文字幕无乱码麻豆| 亚洲免费在线观看视频| 亚洲精品国产精品国自产网站| 亚洲天堂2017无码中文| 中文字幕在线日亚洲9| 亚洲精品欧美综合四区| 久久精品国产亚洲av品善| 理论亚洲区美一区二区三区| 亚洲AV无码成人精品区大在线| 亚洲AV无码一区二区三区国产| 亚洲国产精品专区在线观看| 久久亚洲国产成人精品无码区| 久久亚洲国产精品五月天婷| 亚洲国产精彩中文乱码AV| 久久久久亚洲Av片无码v| 亚洲视频在线观看网址| 亚洲中文无码av永久| 亚洲性无码AV中文字幕| 最新亚洲人成网站在线观看 | 亚洲电影一区二区三区| 亚洲视频国产视频| 亚洲激情视频图片|