首页 微信开发 正文
781

公众号中的用户录音在H5页面播放的方法

  • yiqingpeng
  • 2015-11-20
  • 0
  •  
首先要了解一点是H5的audio标签支持的音频文件为wav,mp3等格式。

而公众号中用户的录音文件格式是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));

正在加载评论...