做爲一名技術宅男,沒事就上掘金來淘寶,在這學習了不少東西,也一直想開個博客,寫寫本身的東西,一方面就當是筆記,另外一方面也能夠做爲他人學習的前進的一種參考,本着這樣的想法今天來開啓個人第一篇博客之路,俗話說前人栽樹後人乘涼,咱們受益於前人,亦讓後人得益於咱們,廢話很少說了讓咱們開啓轉碼吧,在此鄭重說明:所寫內容均來自與實戰,可借鑑,有問題可與本人聯繫,共同探討,一塊兒進步.php
在一個特定的場景之下,pc端管理後臺能夠爲場景上傳一個默認的語音講解,而後在app端,用戶能夠爲聽場景的講解也能夠單獨爲場景配音,上傳經過以後,會在用戶端展現供他人播放。 **java
錄音上傳很簡單,可是在上傳後會發現Android的錄音默認是amr格式的,audio標籤不能播放,爲了兼容性決定將音頻的格式統一成MP3。將pc端上傳的音頻一併處理,並計算音頻的時長。linux
鑑於此想法,開啓填坑之路。 度娘了一些博客,基本都是指向了JAVe.jar,官網:www.sauronsoftware.it/projects/ja… ,想着有但願了,但點擊下載才發現最後的一個版本是2009,已經快十年都沒更新升級了,而後又看了一下文檔介紹:Installation and requirements In order to use JAVE in your Java application, you have to add the file jave-1.0.jar in your application CLASSPATH. JAVE runs on a Java Runtime Environment J2SE v.1.4 or later.JAVE includes and uses a ffmpeg executable built for Windows and Linux operating systems on i386/32 bit hardware platforms. In order to run JAVE on other platforms you have to replace the built-in ffmpeg executable with another one suitable for your needs. This is very simple, once you have built your own ffmpeg binaries. The operation is described in the "Using an alternative ffmpeg executable" section., 大意就是說安裝JAVE的Java 1.4以上版本,僅僅支持32位的Windows and Linux。這一點很是的坑,不可能爲了轉碼將linux以及windows都換成32位的,可是繼續又說到根據須要用二進制文件ffmpeg 替換一下,就能夠在不一樣環境下使用了,這個好像能夠解決;注意這一句‘Using an alternative ffmpeg executable’,點進去後能夠看到, windows
這一段說的就很清楚了,jave並非純java寫的,真正幹活的是ffmpeg這個c語言寫的,這下清楚了,原來是官方是隻提供了32位的ffmpeg可執行文件,咱們須要乾的就是弄一個64位的可執行文件就能夠搞定了,而後繼承FFMPEGLocator 類,實現裏邊的方法在建立新的編碼器就能夠,點開上邊的網址http://ffmpeg.mplayerhq.hu/,,來到ffmpeg的官網點擊下載看到 看到linux 好開心,再看最後一行,32位64位靜態編譯是什麼鬼,點進去看一看 臥槽,安裝說明,堅決果斷進去看看 個人乖乖,靜態編譯安裝,二進制的,美太太,而後按照說明一路執行命令就能夠了,執行完成後就能夠獲得一個64位二進制文件ffmpeg,而後將ffmpeg拷貝出來放在Java項目中就能夠了。最主要的事情完成了。偷笑一下。 再次回到JAVE的官網繼續看,拉到文檔底部,能夠看到 Examples,而後剔除不要的(只需轉碼),基本就剩下:File source = new File("source.amr");
File target = new File("target.mp3");
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("mp3");
attrs.setAudioAttributes(audio);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);
複製代碼
如今一目瞭然,根據官方文檔只需替換用Encoder encoder = new Encoder(new MyFFMPEGExecutableLocator())就能夠在linux64上使用了。同時windows也可使用原來的編碼器。也就是說只須要在不一樣的環境下切換編碼器就能夠了。這樣就能夠完美的解決windows以及linux下的音頻轉碼問題了。bash
提示:若是在linux上依然不能成功,請給ffmpeg的相關執行權限app
聲明:本人第一次寫博客,有不當的地方還請海涵,有不明白的問題能夠留言,不喜勿噴,請學會尊重別人。學習