最近做开发的时候碰到了这个问题,甲方希望用户在微信端的录音能够一直有效。就是随时打开好友的分享就能听到好友的录音。可在微信官方开发手册上查到微信录音文件上传后只能在微信端保留3天时间,3天后就失效了。怎么办呢?
1、通过调用微信媒体资源下载接口将微信录音下载到本地
2、从微信方下载到本地的录音文件格式是amr,而微信网页浏览器并不支持amr文件的音频文件播放。所以我们需要将amr 转换成 网页能够识别的mp3格式。
怎么转换呢?我找到了一个平台可以支持这种转换,七牛云存储平台.通过七牛云存储我们可以将amr转换成mp3
- @param
- String $filepa 本地amr文件路径
- @return
- String 解析后存储在七牛存储空间中的mp3远程地址
*/
function upchange($filepa){
$accessKey="七牛accessKey 在七牛后台获取";
$secretKey="七牛secretKey 在七牛后台获取";
$httpUrl ="七牛分配的访问地址 在七牛后台获取";
$bucket = "存储空间对象bucket 在七牛后台创建";
//转码时使用的队列名称
$pipeline = '转码队列名称 在七牛后台创建';
$auth = new \Qiniu\Auth($accessKey,$secretKey);
$rand_name = getRandChar__(6).time().'.mp3';
//要进行转码的转码操作
$fops = "avthumb/mp3/ab/64k/ar/22050";
//$fops = "mp3";
//可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当间
$savekey = Qiniu\base64_urlSafeEncode('kepei:'.$rand_name);
$fops = $fops.'|saveas/'.$savekey;
$policy = array(
'persistentOps' => $fops,'persistentNotifyUrl' => 'http://',);
$uptoken = $auth->uploadToken($bucket,null,3600,$policy);
//上传文件的本地路径
$filePath = $filepa;
$key = $rand_name;
//$key = '';
$uploadMgr = new \Qiniu\Storage\UploadManager();
list($ret,$err) = $uploadMgr->putFile($uptoken,$key,$filePath);
if ($err !== null) {
return false;
} else {
return $httpUrl.$rand_name;
}
}
function getRandChar__($length){
$str = null;
$strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
$max = strlen($strPol)-1;
for($i=0;$i<$length;$i++){
$str.=$strPol[rand(0,$max)];//rand($min,$max)生成介于min和max两个数之间的一个随机整数
}
return $str;
}
$amrToMp3 = upchange('本地amr文件路径');
//mp3 在七牛上的访问地址
var_dump($amrToMp3);
/**
PHP curlHttp