- 目前有项目需要使用七牛云的音频转码的功能,将微信的amr格式转换为MP3格式,自己写了一个测试demo,可是发现音频并没有转换成功,由于之前没有使用过七牛云的相关功能,所以我想问一下我的代码的错误的位置.
<?php
require_once 'qiniusdk/autoload.php';
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
use Qiniu\Storage\BucketManager;
$media_id = $_POST["media_id"];
$access_token = $_POST["access_token"];
//处理方法,
upload($media_id,$access_token);
//media_id为微信jssdk接口上传后返回的媒体id
function upload($media_id,$access_token){
$path = "./weixinrecord/"; //保存路径,相对当前文件的路径
$outPath = "/weixinrecord/"; //输出路径,给show.php 文件用,上一级
if(!is_dir($path)){
mkdir($path);
}
//微 信上传下载媒体文件
$url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={$access_token}&media_id={$media_id}";
$filename = "wxupload_".time().rand(1111,9999).".amr";
downAndSaveFile($url,$path."/".$filename);
$data["path"] = $outPath.$filename;
$data["msg"] = "download record audio success!";
// $data["url"] = $url;
upchange('./'.$data["path"],$media_id);
echo json_encode($data);
}
function upchange($filePath,$mediaid){
$accessKey = 'xxxx';
$secretKey = 'xxxxxx';
$auth = new Auth($accessKey, $secretKey);
$bucket = 'mca1';//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'];
}*/
}
//根据URL地址,下载文件
function downAndSaveFile($url,$savePath){
ob_start();
readfile($url);
$img = ob_get_contents();
ob_end_clean();
$size = strlen($img);
$fp = fopen($savePath, 'a');
fwrite($fp, $img);
fclose($fp);
}
?>
希望能得到大神的指点
谢谢
可以用这个demo试一下
转码完成后会返回一个persistent id 这个可以提供下
可以给七牛提工单帮你看下
https://support.qiniu.com/tic...