微信公衆番号録音ファイルは自分が開発したサーバに保存する(amrファイルはmp 3に転送する)

4607 ワード

主にマイクロ信号音声amrフォーマットをmp 3フォーマットに変換してhtml 5のaudioラベルで再生するオーディオトランスコードツール
1.              InputStream   
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();
        //        byte 
        is = http.getInputStream();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return is;
}
2.           amr  
public String downloadMediaId(HttpServletRequest request, String mediaId) {
    String relfilePath = null;
    InputStream inputStream = getInputStream(mediaId);
    FileOutputStream fileOutputStream = null;
    try {
        //         
        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) {
            //         
            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ファイルをmp 3ファイルに変換
public void amrToMp3(String sourcePath, String targetPath) {
    File source = new File(sourcePath);
    File target = new File(targetPath);
    AudioUtils.amrToMp3(source, target);
}

4.必要なjarパッケージ依存


    com.github.dadiyang
    jave
    1.0.3

オーディオトランスコードツール
Linux/Windows/Macプラットフォームをサポート
JAVEプロジェクトによる修正であり、JAVEはffmpegに依存するため、すべてのffmpegでサポートされているファイルフォーマットの変換に適用できます.具体的にはJAVE公式ドキュメントをご覧いただけます
げんり
  • 初期化時に現在の実行環境を判断し、binディレクトリの対応するffmpeg実行可能ファイルを一時ディレクトリの
  • にコピーする.
  • ファイルの種類と構成によってRuntimeを通過する.getRuntime().exec(cmd)はffmpeg対応のトランスコードコマンド
  • を実行する
    JAVEプロジェクトの問題
    ffmpegは実行環境に依存しており、JAVEプロジェクトはffmpegをカプセル化しており、javaがffmpegを呼び出し、プラットフォーム間でサポートすることができるようにしています.
  • プロジェクトは古くてメンテナンスされていません.公式サイトの最近のバージョンは2009年に発表されたもので、依存するffmpegはすでに時代遅れで、多くの場合使えない.
  • トランスコード異常報告EncoderException:Stream mapping
  • はmaven倉庫を公開しておらず、JAVE自体もmavenプロジェクトではありません
  • mac
  • はサポートされていません
    本プロジェクトの特徴
    本プロジェクトは上記の問題を解決するために生まれた.
  • これはmavenプロジェクトであり、中央倉庫に公開されています.
  • プロジェクト依存ffmpeg実行可能ファイルは検証済みで使用可能(ユニットテストでは簡単な検査方法が提供されている)
  • amr回転mp 3に現れるEncoderException:Stream mapping
  • を解決
  • Linux/Windows/Macプラットフォーム
  • をサポート
    拡張
    プログラムがリソースファイルをコピーすることでffmpegの実行可能ファイルを取得できない場合、または内蔵ffmpegが使用するオペレーティングシステムをサポートしていない場合
    環境変数またはjavaにSystem.setProperty("ffmpeg.home", "ffmpeg ")を設定することで、システムにインストールできるffmpegファイルのディレクトリを指定できます.
    例えばSystem.setProperty("ffmpeg.home", "/usr/local/bin/")