1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 七牛云 转码_微信开发之录制语音本地化上传至七牛云并将amr转码为mp3

七牛云 转码_微信开发之录制语音本地化上传至七牛云并将amr转码为mp3

时间:2022-10-09 18:58:29

相关推荐

七牛云 转码_微信开发之录制语音本地化上传至七牛云并将amr转码为mp3

很长一段时间没有更新博客了,是因为最近比较忙,

接了2个项目实在抽不开身,这2天终于将项目交接了,

终于可以更新2篇文章,还是往常的套路,我们还是以

实战为主,分享实际案例,希望能够帮助到你们!

当然了你们可以更好的建议我分享一些什么内容给你们!

说正题,相信大家有用过微信公众号的语音录制功能,

我们要做的是,如何将录制的语音上传至微信平台,然后

再将语音本地持久化。

1、首先使用微信语音录制接口,获取signPackage在PHP里以前在微信地理定位有讲到,还是老方法将获取到的值返回,必要的!

//语音

wx.config({

debug:false,

appId:'<?php echo$signPackage["appId"];?>',

timestamp:'<?php echo$signPackage["timestamp"];?>',

nonceStr:'<?php echo$signPackage["nonceStr"];?>',

signature:'<?php echo$signPackage["signature"];?>',

jsApiList:[

'startRecord',

'stopRecord',

'onVoiceRecordEnd',

'playVoice',

'stopVoice',

'uploadVoice',

]

});

2、开始录制语音wx.startRecord();

3、获取localIdwx.onVoiceRecordEnd({

//录音时间超过一分钟没有停止的时候会执行complete回调

complete:function(res){

varlocalId=res.localId;

}

});

4、上传语音wx.uploadVoice({

localId:'',//需要上传的音频的本地ID,由stopRecord接口获得

isShowProgressTips:1,//默认为1,显示进度提示

success:function(res){

varserverId=res.serverId;//返回音频的服务器端ID

}

});

上述这几点大家看下文档其实都会做,很简单,重点是语音上传之后,我们如何将文件本地化。

5、文件本地化接口地址//token和serverID不用多说,获取token的方法不必多介绍,serverid在上传之后会返回。

$url="http://file.api./cgi-bin/media/get?access_token={$token}&media_id={$post['serverId']}";

6、http get方法functionhttpGet($url){

$ch=curl_init($url);

curl_setopt($ch,CURLOPT_HEADER,0);

curl_setopt($ch,CURLOPT_NOBODY,0);

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

$package=curl_exec($ch);

$http_info=curl_getinfo($ch);

curl_close($ch);

$res=array_merge(array_merge(array('header'=>$http_info)),array('body'=>$package));

return$res;

}

7、保存下载的文件的方法functionsaveWeixinFile($file_name,$file_content){

$local_file=fopen($file_name,'w');

if(false!==$local_file){

if(false!==fwrite($local_file,$file_content)){

fclose($local_file);

}else{

returnfalse;

}

}else{

returnfalse;

}

}

8、调用下载和保存的方法$res=httpGet($url);

//文件保存路径

$file_name=ROOT_PATH.'public/uploads/audio/'.$post['serverId'].'.mp3';

$save=saveWeixinFile($file_name,$res['body']);

if(false===$save){

exit('音频文件本地化失败');

}

9、保存下来的音频文件为amr格式的,大家懂得audio是播放不了的,我们需要进行转码,而利用程序转码我们可以使用七牛云提供的转码存储,资源o s s化是必须的嘛。

七牛云这里就不做介绍了吧,直接帖代码,七牛云封装的上传转码类<?php

namespaceapp\extra;

useQiniu\Auth;

useQiniu\Storage\BucketManager;

useQiniu\Storage\UploadManager;

classQiniu{

private$accessKey='';

private$secretKey='';

private$bucket='';

publicfunctionuploads($media_id,$file_path){

$auth=newAuth($this->accessKey,$this->secretKey);

$bucket=trim($this->bucket);

$savekey=\Qiniu\base64_urlSafeEncode($bucket.':'.$media_id.'.mp3');

//设置转码参数

$fops="avthumb/mp3/ab/320k/ar/44100/acodec/libmp3lame";

$fops=$fops.'|saveas/'.$savekey;

$policy=array(

'persistentOps'=>$fops

);

$up_token=$auth->uploadToken($bucket,null,3600,$policy);

$key=$media_id.'.mp3';//七牛云中保存的amr文件名

$uploadMgr=newUploadManager();

list($ret,$err)=$uploadMgr->putFile($up_token,$key,$file_path);

if($err!==null){

returnfalse;

}else{

//此时七牛云中同一段音频文件有amr和MP3两个格式的两个文件同时存在

$bucketMgr=newBucketManager($auth);

//为节省空间,删除amr格式文件

$bucketMgr->delete($bucket,$key);

return$ret['key'];

}

}

}

10、调用$up_audio=$qiniu->uploads($post['serverId'],$file_name);

11、处理商户业务逻辑

整理下业务逻辑

1、首先调用微信语音录制接口录制语音,

2、然后上传录制好的语音文件

3、a ja x将serverId传入后台使用http get方式下载语音文件,使文件本地化

4、本地化文件不能使用,我们使用七牛云存储将文件上传至云空间并转码返回能够播放的mp3文件地址。

问题:为何要将文件上传至七牛,犹豫http get下载的语音文件格式在h5中不能播放我们需要转码,第二是为了节约服务器资源。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。