WebUploader+Qiniu upload video add watermark, transcode, get cover image, download to local, delete Qiniu video

config.php

class Config 
{
    const AK = '你的AK',
          SK = '你的SK',
          BUCKET_NAME = '******',//空间名称
          DOMAIN = '你的七牛空间域名';
}
require_once APP_ROOT.'/vendor/autoload.php';
require_once APP_ROOT.'/vendor/config.php';

use Qiniu\Auth;
use Qiniu\Processing\PersistentFop;//查询转码状态
use Qiniu\Storage\BucketManager;//删除文件

//直接上传到七牛
            $bucket = Config::BUCKET_NAME;
            $auth = new Auth(Config::AK, Config::SK);

            //转码时使用的队列名称 
            $pipeline = Config::Peline;
            //添加水印
            $wmImg = Qiniu\base64_urlSafeEncode("http://".$_SERVER['SERVER_NAME']."/Public/qiniuw_logo.png");
            //要进行转码的转码操作 
            //转码策略https://developer.qiniu.com/dora/api/audio-and-video-transcoding-avthumb
            //添加水印规格https://developer.qiniu.com/dora/api/video-watermarking
            $fops = "avthumb/mp4/vcodec/libx264/s/640x360/wmImage/$wmImg/wmGravity/NorthEast/wmOffsetX/0/wmOffsetY/0";
            //转码为h264 长宽为640*360 添加水印 水印位置为右上角偏移量都为0

            //可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当间
            $savekey = Qiniu\base64_urlSafeEncode($bucket);//不指定名称让七牛随机生成

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

            //七牛异步通知地址 不方便ajax轮询的话可以添加  
                $NotifyUrl="http://".$_SERVER['SERVER_NAME'].U('member/Qiniunotify/video');
            $policy = array(
            'persistentOps' => $fops,
            'persistentPipeline' => $pipeline,
            'persistentNotifyUrl'=>$NotifyUrl
            );
            //生成token
            $uptoken = $auth->uploadToken($bucket, null, 3600, $policy);

//--------------------------------------html页面-----------------
var Uploader = WebUploader.create({
  auto: true,
  runtimeOrder: 'html5,flash',
  swf: '__PUBLIC__/member/js/Uploader.swf',
  server: 'http://up.qiniu.com/',//固定七牛的地址
  accept: {
    title: 'video',
    extensions: 'asf,avi,mov,3gp,flv,mp4,m4a,mpeg,mpg,vob',
    mimeTypes: '.asf,.avi,.mov,.3gp,.flv,.mp4,.m4a,.mpeg,.mpg,.vob'
  },
  fileSingleSizeLimit: 1024 * 1024 * 1024,
  fileNumLimit: 1,
  formData: {
            token : "" //上传七牛所需要的token
        }
});
Uploader.addButton({id:'#uploadFile',multiple:false});//绑定按钮
//如果需要每点击一次上传都要获取token的话添加下面的代码 放到绑定事件下面
Uploader.on( 'uploadBeforeSend', function( file,from ) {    
        //获取token
        $.ajax({
                url: "{:U('material/uptoken')}",
                type: "POST",
                async: false,
                dataType:'json',
                success:function(data){
                    from.token  =data.uptoken;//修改formData中的token
                    }
            });
    })
//上传成功的话 log输出返回信息
//hash:"Fo9QFn0w7S2UTkSWT9sNhefdF71_"
//key:"Fo9QFn0w7S2UTkSWT9sNhefdF71_"//上传后的文件名称
//persistentId:"z0.58b7d81845a2650c999f3ece"//查询转码进度要使用的id
//----------------------------轮询的话--------------------------------------
//七牛查询并不会返回进度 只会返回状态
$persistentId = $_POST['persistentId'];//查询文件的persistentId
$status = PersistentFop::status($persistentId);
//返回信息如下
{  
    'code': 0,  
    'id': '168739cd2fn1g76f13',  
    'inputKey':'asdasdasdsqweqweqdcasc' 
    'desc': 'The fop was completed successfully',  
    'items': [  
        {
            'code': 0, 
            'hash': 'FvvxM7gMI6WfiuXlBgKbkzU67Tpa', 
            'cmd': 'avthumb/mp3/ar/44100/ab/32k', 
            'key': 'sFhZ4dSjB1zvL3De1UBX2qZ_VR0=/lgxucMCQso_KOW_YDM-_KVIeX6o5', 
            'error': '', 
            'desc': 'The fop was completed successfully'
        }
    ]  
}
           $status=$status;
            if($status['code']==0){//转码成功
                    $new_myfode=$status['items'][0];
                    $v_url=Config::DOMAIN.$new_myfode['key'];//域名+转码后的视频名字
                    $vid_dir=APP_ROOT."/uploads/video";//视频和封面图保存路径

                    $qiniu_im=$v_url."?vframe/jpg/offset/0";//获取视频封面图

                    $img_name=rand(1,99999).time().".jpg";//封面图名字

                    $re=getFilepapers($qiniu_im,$vid_dir,$img_name);//下载封面图

                    $new_name=rand(1,99999).time().".mp4";//视频名称                                       

                             $data['video_thumb']="/uploads/video/".$re['file_name'];                 
                    $video=getFilepapers($v_url,$vid_dir,$new_name);//七牛获取视频到本地
                    $data['dir'] ="/uploads/video/".$video['file_name'];
                    $data['member_id']=$this->member_id;
                    $data['title'] = $video_name;

                    $data['id'] = M('pano_video')->add($data);

                        //删除七牛的文件
                        $bucket = Config::BUCKET_NAME;
                        $auth = new Auth(Config::AK, Config::SK);
                        $bucketMgr = new BucketManager($auth);
                        $err = $bucketMgr->delete($bucket,$new_myfode['key']);//转码后视频
                        $err = $bucketMgr->delete($bucket,$status['inputKey']);//转码前视频
                        $array=array('code'=>0,'msg'=>'请求成功','res'=>$data);
                }elseif($status['code']==1){//等待处理
                    $array=array('code'=>1,'msg'=>'等待处理');
                }elseif($status['code']==2){//处理失败
                    $array=array('code'=>1,'msg'=>'正在处理');
                }else{
                    $array=array('code'=>2,'msg'=>'处理失败'); 
                    }
            $this->ajaxreturn($array);die();
//-----------------------------轮询结束---------------------------
//----------------------------异步处理的话-------------------------
$callbackBody = file_get_contents('php://input');//接受参数处理方法同上 
$status=json_decode($callbackBody,true);
/*获取远程资源*/
function getFilepapers($url,$save_dir='',$filename='',$type=0){
    if(trim($url)==''){
        return false;
    }
    if(trim($save_dir)==''){
        $save_dir='./';
    }
    if(0!==strrpos($save_dir,'/')){
        $save_dir.='/';
    }
    //创建保存目录
    if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){
        return false;
    }
    //获取远程文件所采用的方法
    if($type){
        $ch=curl_init();
        $timeout=5;
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
        $content=curl_exec($ch);
        curl_close($ch);
    }else{
        ob_start();
        readfile($url);
        $content=ob_get_contents();
        ob_end_clean();
    }
    $size=strlen($content);
    //文件大小

    $fp2=@fopen($save_dir.$filename,'a');
    fwrite($fp2,$content);
    fclose($fp2);
    unset($content,$url);
    return array('file_name'=>$filename,'save_path'=>$save_dir.$filename);
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325771102&siteId=291194637