.amr 用於移動設備的音頻,壓縮比比較大,多用於人聲、通話,效果還行!因此,移動設備多采用amr格式來進行錄存!比較常見的例子:通話錄音,微信語音以及錄音等!html
這個鬼,用兩個字來形容,就是「蛋疼」;由於HTML5壓根就不支持它(amr:我是個《孤兒》 ,導演:佐米·希爾拉);因此,試聽效果也就很難實現了!雖然微信是提供試聽的,但一旦離開了頁面,那就意味着,你再也沒法播放你的錄音了!web
因此你不得不將文件轉換下格式!七牛雲存儲
目前,小編掌握的轉換格式的方法有兩種:一是上傳到七牛雲服務進行轉換下載;二是經過ffmpeg 應用進行轉換!服務器
七牛轉換法:微信
1.首先,註冊七牛雲存儲!工具
2.七牛會返給你「兩張」通行證,通行證是通訊七牛必不可少的工具!上圖一張:url
AK 和 SK 是程序執行的前提!spa
3.建立空間,添加隊列!空間名稱,和隊列名稱都用的到!3d
空間是存儲你上傳文件的倉庫,隊列是加工文件的工廠!能夠建立多個!code
空間須要配置域名!
4.下載七牛提供的源代碼:我是連接
文件裏面有個名爲「Qiniu.4.0.dll」的文件,把它引用到你的項目中!
/// <summary> /// 設置你的AK、SK 和 域名 /// </summary> private static void SetKey() { //設置帳號的AK和SK Config.ACCESS_KEY = "########################################"; Config.SECRET_KEY = "****************************************"; Config.API_HOST = "http://###.***.com"; }
5.上傳文件,並通知七牛要給文件轉換格式,如下例子是:.AMR格式 轉 .MP3格式。
/// <summary> /// 上傳文件並預轉格式 /// </summary> /// <param name="key">要轉換格式的文件名</param> /// <param name="filePath">文件路徑</param> /// <returns></returns> private string upload(string key, string filePath) { IOClient target = new IOClient(); PutExtra extra = new PutExtra(); //設置文件上傳後所存儲的空間名稱 String bucket = "amrtest"; //普通上傳,只須要設置上傳的空間名就能夠了,第二個參數能夠設定token過時時間 PutPolicy put = new PutPolicy(bucket, 3600); //對轉碼後的文件進行使用saveas參數自定義命名,也能夠不指定,文件會默認命名並保存在當前空間。 string mp3tpname = key.Split('.')[0].ToString() + ".mp3"; String urlbase64 = Qiniu.Util.Base64URLSafe.Encode(bucket + ":" + mp3tpname); //通常指文件要上傳到的目標存儲空間(Bucket)。若爲「Bucket」, //表示限定只能傳到該Bucket(僅限於新增文件);若爲」Bucket:Key」,表示限定特定的文件,可修改該文件。 put.Scope = bucket + ":" + key; // 可選。 若非0, 即便Scope爲 Bucket:Key 的形式也是insert only. put.InsertOnly = 0; // "|"豎線前是你要轉換格式的命令;豎線後是轉換完成後,文件的命名和存儲的空間的名稱! put.PersistentOps = "avthumb/mp3/ab/128k/ar/44100/acodec/libmp3lame|saveas/" + urlbase64; //規定文件要在那個「工廠」進行改裝,也就是隊列名稱! put.PersistentPipeline = "LittleBai"; //音視頻轉碼持久化完成後,七牛的服務器會向用戶發送處理結果通知。這裏指定的url就是用於接收通知的接口。 //設置了`persistentOps`,則須要同時設置此字段 put.PersistentNotifyUrl = "http://***.###.com/***/default.aspx"; //生成上傳Token string upToken = put.Token(); //上傳文件 PutRet ret = target.PutFile(upToken, key, filePath, extra); //返回數據格式:{"hash":"FvipQyyMwI0gvGc7_NUd8OVBuJ85","key":"55456.amr","persistentId":"z0.57eb86a945a2652644d64308"} return ret.Response.ToString(); }
6.最後,將轉換好的文件從七牛空間下載到當前服務器上。
/// <summary> /// 下載 /// </summary> /// <param name="key">轉好格式的文件名稱</param> /// <param name="savepath">下載後的保存路徑</param> /// <returns></returns> private string download(string key, string savepath) { //構造私有空間的須要生成的下載的連接 你幫定在空間的域名 加 要下載的文件名 string baseUrl = "http://***.###.com/" + key; //調用MakeRequest方法生成私有下載連接 string private_url = GetPolicy.MakeRequest(baseUrl); //下載文件 HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(private_url); req.Method = "GET"; using (WebResponse wr = req.GetResponse()) { HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse(); string strpath = myResponse.ResponseUri.ToString(); WebClient mywebclient = new WebClient(); try { mywebclient.DownloadFile(strpath, savepath); } catch (Exception ex) { savepath = ex.ToString(); } } return savepath; }
OK,轉換完成!附效果圖一張:
轉載請註明本博地址:http://www.cnblogs.com/LittleBai/p/5924416.html
絕對原創,轉載請註明!
好了,到此結束!拙文一篇,望海涵!
若有疑問,歡迎騷擾,Q羣:225443677 TKS!