请教PHP sdk 进行音频amr转MP3的问题

新手上路,请多包涵
  • 目前有项目需要使用七牛云的音频转码的功能,将微信的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);
}
?>

希望能得到大神的指点

谢谢
阅读 4.2k
1 个回答

可以用这个demo试一下


use Qiniu\Auth;
use Qiniu\Processing\PersistentFop;

//对已经上传到七牛的视频发起异步转码操作

$accessKey = getenv('QINIU_ACCESS_KEY');
$secretKey = getenv('QINIU_SECRET_KEY');
$bucket = getenv('QINIU_TEST_BUCKET');

$auth = new Auth($accessKey, $secretKey);

//要转码的文件所在的空间和文件名。
$key = 'qiniu.mp4';

//转码是使用的队列名称。 https://portal.qiniu.com/mps/pipeline
$pipeline = 'sdktest';
$force = false;

//转码完成后通知到你的业务服务器。
$notifyUrl = 'http://375dec79.ngrok.com/notify.php';
$config = new \Qiniu\Config();
//$config->useHTTPS=true;

$pfop = new PersistentFop($auth, $config);

//要进行转码的转码操作。 http://developer.qiniu.com/docs/v6/api/reference/fop/av/avthumb.html
$fops = "avthumb/mp4/s/640x360/vb/1.4m|saveas/" . \Qiniu\base64_urlSafeEncode($bucket . ":qiniu_640x360.mp4");

list($id, $err) = $pfop->execute($bucket, $key, $fops, $pipeline, $notifyUrl, $force);
echo "\n====> pfop avthumb result: \n";
if ($err != null) {
    var_dump($err);
} else {
    echo "PersistentFop Id: $id\n";
}

//查询转码的进度和状态
list($ret, $err) = $pfop->status($id);
echo "\n====> pfop avthumb status: \n";
if ($err != null) {
    var_dump($err);
} else {
    var_dump($ret);
}

转码完成后会返回一个persistent id 这个可以提供下
可以给七牛提工单帮你看下
https://support.qiniu.com/tic...

推荐问题
logo
七牛云问答
子站问答
访问
宣传栏