直到現在,仍然不存在一項旨在網頁上播放音頻的標準。HTML5 規定了一種通過 audio 元素來包含音頻的標準方法。audio 元素能夠播放聲音文件或者音頻流。當前,audio 元素支持三種音頻格式:MP3 ,Wav ,Ogg Vorbis。
微信錄音的音頻為amr格式,不支持網頁播放,且上傳語音有效期3天,可用微信多媒體接口下載語音到自己的服務器,然后轉碼轉成MP3格式,途徑有兩種:
一.在服務器上搭建ffmpeg
很多項目不一定放在自己服務器上,而且很多碼農并不熟悉服務器方面的配置,所以沒辦法去搭建ffmpeg,但是對于網絡接口的調用并不陌生,所以我著重講一下使用七牛php框架將微信 amr音頻轉mp3。
二.使用七牛云存儲框架轉碼存儲
(1)下載七牛SDK,下載地址:https://developer.qiniu.com/sdk
(2)將下載的整個SDK包解壓之后放入項目中
(3)引入入口文件,并寫好相應要使用的模塊命名空間
require_once 'qiniusdk/autoload.php'; use Qiniu/Auth; use Qiniu/Storage/UploadManager; use Qiniu/Storage/BucketManager; (4)將微信錄音amr文件下載到本地(自己的服務器)PRivate function savemedia($serverid){ $token = $this->_token; //微信請求素材的Token $mediaid = $serverid; //語音素材的mediaid $url = 'http://file.api.weixin.QQ.com/cgi-bin/media/get?access_token='.$token.'&media_id='.$mediaid; $content = ihttp_get($url); //get請求 if (!is_error($content)){ $prefix = explode("/", $content['headers']["Content-Type"]); $filename = $mediaid.".".$prefix[1]; $dateStr = date('Y-m-d',time()); $currdir = "/upload/".$dateStr.'/'; $dir = getcwd().$currdir; if (!is_dir($dir)){ //創建保存文件的目錄 mkdir(iconv("UTF-8", "GBK", $dir),0777,true); } $currfile = $currdir.$filename; $path = getcwd().$currfile; if(file_exists($path)){ unlink($path); //如果文件已經存在則刪除已有的 } $fp = fopen($path, 'w'); $state=fwrite($fp, $content['content']); //寫入數據 fclose($fp); } }(5)將本地amr音頻文件上傳至七牛云并轉碼生成MP3文件private function upchange($filePath,$mediaid){ $accessKey = trim($reply['accessKey']); //七牛公鑰 $secretKey = trim($reply['secretKey']); //七牛私鑰 $auth = new Auth($accessKey, $secretKey); $bucket = trim($reply['bucket']); //數據處理隊列名稱,不設置代表不使用私有隊列,使用公有隊列。 $pipeline = trim($reply['pipeline']); //通過添加'|saveas'參數,指定處理后的文件保存的bucket和key //不指定默認保存在當前空間,bucket為目標空間,后一個參數為轉碼之后文件名 $savekey = Qiniu/base64_urlSafeEncode($bucket.':'.$mediaid.'.mp3'); //設置轉碼參數 $fops = "avthumb/mp3/ab/320k/ar/44100/acodec/libmp3lame"; $fops = $fops.'|saveas/'.$savekey; if(!empty($pipeline)){ //使用私有隊列 $policy = array( 'persistentOps' => $fops, 'persistentPipeline' => $pipeline ); }else{ //使用公有隊列 $policy = array( 'persistentOps' => $fops ); } //指定上傳轉碼命令 $uptoken = $auth->uploadToken($bucket, null, 3600, $policy); $key = $mediaid.'.amr'; //七牛云中保存的amr文件名 $uploadMgr = new UploadManager(); //上傳文件并轉碼$filePath為本地文件路徑 list($ret, $err) = $uploadMgr->putFile($uptoken, $key, $filePath); if ($err !== null) { return false; }else { //此時七牛云中同一段音頻文件有amr和MP3兩個格式的兩個文件同時存在 $bucketMgr = new BucketManager($auth); //為節省空間,刪除amr格式文件 $bucketMgr->delete($bucket, $key); return $ret['key']; } }此時七牛云空間就已經有了保存的MP3文件了。
新聞熱點
疑難解答