欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

微信公眾號錄音文件的播放與保存(amr文件轉(zhuǎn)mp3)

 更新時間:2021年08月12日 10:44:21   作者:llsydn  
本文主要介紹了微信公眾號錄音文件的播放與保存(amr文件轉(zhuǎn)mp3),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

音頻轉(zhuǎn)碼工具,主要用于將微信語音 amr 格式轉(zhuǎn)換為 mp3 格式以便在 html5 的 audio 標(biāo)簽中進(jìn)行播放

1.調(diào)用微信提供的接口獲取錄音的InputStream字節(jié)流

public InputStream getInputStream(String mediaId) {
    InputStream is = null;
    try {
        String URL_DOWNLOAD_TEMP_MEDIA = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID";
        String url = URL_DOWNLOAD_TEMP_MEDIA.replace("ACCESS_TOKEN", "自己寫代碼獲取accessToken").replace("MEDIA_ID", mediaId);
        URL urlGet = new URL(url);
        HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
        http.setRequestMethod("GET"); // 必須是get方式請求
        http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        http.setDoOutput(true);
        http.setDoInput(true);
        System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 連接超時30秒
        System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 讀取超時30秒
        http.connect();
        // 獲取文件轉(zhuǎn)化為byte流
        is = http.getInputStream();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return is;
}

2.將獲取到的字節(jié)流保存為amr文件

public String downloadMediaId(HttpServletRequest request, String mediaId) {
    String relfilePath = null;
    InputStream inputStream = getInputStream(mediaId);
    FileOutputStream fileOutputStream = null;
    try {
        //服務(wù)器資源保存路徑
        String savePath = request.getSession().getServletContext().getRealPath("/") + "upload/" + DateUtil.getYear() + "/wxmedia/audio/";
        savePath = savePath + "audio/"; 
        String filename = String.valueOf(System.currentTimeMillis()) + ".amr";
        relfilePath = "upload/" + DateUtil.getYear() + "/wxmedia/audio/" + filename;
        File file = new File(savePath);
        if (!file.exists()) {
            file.mkdirs();
        }
        byte[] data = new byte[1024];
        int len = 0;
        fileOutputStream = new FileOutputStream(savePath + filename);
        while ((len = inputStream.read(data)) != -1) {
            // 判斷結(jié)果是否有錯
            if (new String(data).indexOf("errmsg") > -1) {
                return null;
            }
            fileOutputStream.write(data, 0, len);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (fileOutputStream != null) {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return relfilePath;
}

3.將保存的amr文件轉(zhuǎn)成mp3文件

public void amrToMp3(String sourcePath, String targetPath) {
    File source = new File(sourcePath);
    File target = new File(targetPath);
    AudioUtils.amrToMp3(source, target);
}

4.所需的jar包依賴

<!--amr文件轉(zhuǎn)音頻map文件-->
<dependency>
    <groupId>com.github.dadiyang</groupId>
    <artifactId>jave</artifactId>
    <version>1.0.3</version>
</dependency>

音頻轉(zhuǎn)碼工具

支持 Linux/Windows/Mac 平臺
因為是基于 JAVE 項目的修改,而 JAVE 是依賴 ffmpeg 所以可以適用于所有 ffmpeg 所支持的文件格式的轉(zhuǎn)換。具體可以查看 JAVE 官方文檔

原理

初始化時判斷當(dāng)前運行環(huán)境,將bin目錄中對應(yīng)的 ffmpeg 可執(zhí)行文件拷貝到臨時目錄中
根據(jù)文件類型及配置通過 Runtime.getRuntime().exec(cmd) 執(zhí)行 ffmpeg 對應(yīng)的轉(zhuǎn)碼命令

JAVE 項目的問題

ffmpeg 是依賴運行環(huán)境的,JAVE 項目封裝了ffmpeg,它通過上述的原理使 java 可以調(diào)用ffmpeg而且支持跨平臺。

  • 項目老舊沒再維護(hù)。官網(wǎng)最近版本是2009年發(fā)布的,其依賴的ffmpeg早已過時,很多情況下用不了。
  • 轉(zhuǎn)碼一直報異常 EncoderException: Stream mapping
  • 沒有發(fā)布maven倉庫,而且 JAVE 本身也不是一個maven項目
  • 不支持mac

本項目特點

本項目為解決上述問題而生。

  • 這是一個maven項目,而且已發(fā)布到中央倉庫
  • 項目依賴的 ffmpeg 可執(zhí)行文件經(jīng)過驗證可以使用(單元測試中提供了一個簡單的檢驗方法)
  • 解決了amr轉(zhuǎn)mp3出現(xiàn)的 EncoderException: Stream mapping
  • 支持 Linux/Windows/Mac 平臺

擴(kuò)展

如果程序無法通過拷貝資源文件的方式獲取到 ffmpeg 的可執(zhí)行文件或者內(nèi)置的 ffmpeg 不支持你所使用的操作系統(tǒng)
你可以通過環(huán)境變量或者在 java 中設(shè)置 System.setProperty("ffmpeg.home", "ffmpeg可執(zhí)行文件所在的目錄") 的方式指定你的系統(tǒng)中安裝的可用的 ffmpeg 文件的目錄

如 System.setProperty("ffmpeg.home", "/usr/local/bin/")

到此這篇關(guān)于微信公眾號錄音文件的播放與保存(amr文件轉(zhuǎn)mp3)的文章就介紹到這了,更多相關(guān)微信公眾號錄音內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS創(chuàng)建Tag標(biāo)簽的方法詳解

    JS創(chuàng)建Tag標(biāo)簽的方法詳解

    這篇文章主要介紹了JS創(chuàng)建Tag標(biāo)簽的方法,結(jié)合具體實例形式分析了javascript動態(tài)操作頁面HTML元素實現(xiàn)tag標(biāo)簽功能的步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • js字符串類型String常用操作實例總結(jié)

    js字符串類型String常用操作實例總結(jié)

    這篇文章主要介紹了js字符串類型String常用操作,結(jié)合實例形式總結(jié)分析了javascript字符串類型String常用方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2019-07-07
  • javascript實現(xiàn)簡單的省市區(qū)三級聯(lián)動

    javascript實現(xiàn)簡單的省市區(qū)三級聯(lián)動

    本文給大家反映的是javascript實現(xiàn)的簡單的省市區(qū)三級聯(lián)動特效,不需要訪問后臺服務(wù)器端,不使用Ajax,無刷新,純JS實現(xiàn)的省市區(qū)三級聯(lián)動。當(dāng)省市區(qū)數(shù)據(jù)變動是只需調(diào)正js即可。
    2015-05-05
  • 在layer彈層layer.prompt中,修改placeholder的實現(xiàn)方法

    在layer彈層layer.prompt中,修改placeholder的實現(xiàn)方法

    今天小編大家分享一篇在layer彈層layer.prompt中,修改placeholder的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • js有趣的非空判斷函數(shù) + ?? 實現(xiàn)

    js有趣的非空判斷函數(shù) + ?? 實現(xiàn)

    本文介紹了JS中空值合并操作符??的用法,包括如何使用它來判斷數(shù)據(jù)是否為“合法數(shù)據(jù)”,即非空字符串、非undefined和非null,下面就一起來了解一下,感興趣的可以了解一下
    2024-09-09
  • 解析js如何獲取css樣式

    解析js如何獲取css樣式

    本文主要對javascript如何如何獲取css樣式進(jìn)行簡要分析,需要的朋友可以看下,希望對大家有所幫助
    2016-12-12
  • 驗證用戶是否修改過頁面的數(shù)據(jù)的實現(xiàn)方法

    驗證用戶是否修改過頁面的數(shù)據(jù)的實現(xiàn)方法

    在實現(xiàn)程序的修改模塊時,要在頁面端檢查用戶是否修改過數(shù)據(jù),以便提醒用戶及時保存修改后的數(shù)據(jù)。
    2008-09-09
  • js判斷鼠標(biāo)同時離開兩個div的思路及代碼

    js判斷鼠標(biāo)同時離開兩個div的思路及代碼

    js判斷鼠標(biāo)同時離開兩個div想了好長時間終于出爐了,下面與大家分享下具體的實現(xiàn)代碼,感興趣的朋友可以參考下啊
    2013-05-05
  • js前端登錄加密解決方案

    js前端登錄加密解決方案

    項目中需要前端書寫登錄頁面,用戶輸入賬號密碼,本文主要介紹了js前端登錄加密解決方案,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • 簡單實現(xiàn)js輪播圖效果

    簡單實現(xiàn)js輪播圖效果

    這篇文章主要教大家如何簡單實現(xiàn)js輪播圖效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論