【原創】音頻轉碼-Mp3轉AMR

一、常見音頻轉碼方案

1.採用阿里雲OSS進行轉碼

採用阿里雲OSS僅支持amr -> mp3格式的轉碼,但是不支持mp3 -> amr 格式的轉碼,調用後會拋出 amr 格式不支持的異常。OSS轉碼爲異步轉碼,調用時是通知OSS的轉碼服務,將這個轉碼任務加入隊列,完成轉碼後,輸入的地址key纔是有效的地址key,在調用轉碼服務後不能直接進行下載,轉換爲base64編碼給客戶端。

2.採用 jave 轉碼

採用java 的第三方jar包 jave 進行轉碼,目前網上的常見博客均爲舊版的jave的轉碼jar包,新版的jar包已經更新到了2.x的版本,在2.x的版本中,已經由部分API與之前的。在查看源碼後發現,該轉碼包的原理大致爲將一個編碼文件複製到本地,然後使用該文件進行轉碼,並且該轉碼與操作系統有關,只支持windows 和 mac ,並且不支持mac os x,原因爲在使用mac os x進行執行轉碼時,會出現無法識別該操作系統導致的空指針異常問題。

3.採用 ffmpeg 進行轉碼

需要將文件由客戶端先發送到服務端,然後服務端存儲到本地,再在本地執行ffmepg腳本文件進行轉碼,轉碼後將文件讀取到服務端內存,發送給客戶端。

4.採用網易雲對象存儲轉碼

可以將文件傳輸到網易雲對象存儲,然後調用指定接口,進行轉碼並下載轉碼後的文件。

二、採用 ffmpeg 進行轉碼

    public static final String AMR_TO_MP3_COMMAND = "ffmpeg -i {0}.amr {1}.mp3";
    public static final String MP3_TO_AMR_COMMAND = "ffmpeg -i {0}.mp3 -ar 8000 {1}.amr -ar 8000";

    public static boolean executeLinuxCmd(String cmd) {
        System.out.println("got cmd job : " + cmd);
        Runtime run = Runtime.getRuntime();
        try {
            Process process = run.exec(cmd);
            InputStream in = process.getInputStream();
            BufferedReader bs = new BufferedReader(new InputStreamReader(in));
            // System.out.println("[check] now size \n"+bs.readLine());
            StringBuffer out = new StringBuffer();
            byte[] b = new byte[8192];
            for (int n; (n = in.read(b)) != -1;) {
                out.append(new String(b, 0, n));
            }
            System.out.println("job result [" + out.toString() + "]");
            in.close();
            // process.waitFor();
            process.destroy();
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章