而公众号中用户的录音文件格式是amr格式,该格式在h5中是播放不了的。
所以,我们必须将amr格式转换为wav或者mp3格式。
步骤一、通过语音的media_id下载得到音频文件xxx.amr
步骤二、使用ffmpeg库将amr文件转化为wav格式,为什么不转化为mp3格式呢,因为ffmpeg库只支持mp3解码而不支持mp3编码(mp3编码方法是受版权保护的),即可用ffmpeg将mp3转化为其它格式,而其它格式不能通过它转化为mp3。
步骤三、将转换好的的wav文件链接应用到audio标签中即可实现播放了。
$mediaId = trim($mediaId); $format = trim($format);//mediaId和format是微信服务器传递过来的 define('MEDIA_DIR', 'media/'); if(!is_dir(MEDIA_DIR)){@mkdir(MEDIA_DIR);@chmod(MEDIA_DIR,775);} $accessToken = getAccessToken($_C['appId'],$_C['appSecret']); $downloadApi = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={$accessToken}&media_id={$mediaId}"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $downloadApi); curl_setopt($ch, CURLOPT_HEADER, 0);//不需要header数据 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); $fileName = MEDIA_DIR.$mediaId.'.'.$format;//将语音文件下载到本地目录 @chmod($fileName,777); $handle = fopen($fileName,'wb'); fwrite($handle, $output); fclose($handle); //调用命令进行格式转换 ffmpeg -i infile outfile $audioFile = MEDIA_DIR.$mediaId.'.wav';//目标文件名 exec('ffmpeg -i '.escapeshellcmd($fileName).' '.escapeshellcmd($audioFile));//注意过滤非法字符。 @unlink($fileName); //删除amr文件 $ffmpeg = new ffmpeg_movie($audioFile);//这是一个php扩展,可以用来获得音频文件的一些详细信息,此处是要得到音频文件的播放时长。 $seconds = $ffmpeg->getDuration(); return array('code'=>1, 'message'=>'ok', 'data'=>array('media'=>$audioFile, 'duration'=>$seconds));