欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

thinkphp七牛上传音视频并添加预处理转码操作代码汇总

七牛的音视频转码一共有两种方式可以操作:

1. 是上传后立即触发音视频转码转码,可以再上传策略中设置persistentOps、persistentPipeline和persistentNotifyUrl,参考上传预转的详解【developer.qiniu.com/docs/v6/api/reference/security/put-policy.html#put-policy-persistent-ops-explanation】。

2. 直接触发持久化操作,接口规格是http://developer.qiniu.com/docs/v6/api/reference/fop/pfop/pfop.html ,是POST请求。

下面将介绍在ThinkPHP框架(3.2.3)中如何实现上传音视频,并在上传策略中添加转码命令的操作:



一、修改ThinkPHP中七牛上传驱动文件

\Library\Think\Upload\Driver\Qiniu\QiniuStorage.class.php

1、public function UploadToken($sk ,$ak ,$param)函数中添加如下选项

// 新增视频预处理操作[www.scutephp.com]
if (!empty($param['persistentOps'])) {
$data['persistentOps'] = $param['persistentOps'];
}
if (!empty($param['persistentPipeline'])) {
$data['persistentPipeline'] = $param['persistentPipeline'];
}
if (!empty($param['persistentNotifyUrl'])) {
$data['persistentNotifyUrl'] = $param['persistentNotifyUrl'];
}
2、新增如下两个函数备用

/**
* 对提供的数据进行urlsafe的base64编码。
*
* @param string $data 待编码的数据,一般为字符串
*
* @return string 编码后的字符串
* @link http://developer.qiniu.com/docs/v6/api/overview/appendix.html#urlsafe-base64
*/
public function base64_urlSafeEncode($data)
{
$find = array('+', '/');
$replace = array('-', '_');
return str_replace($find, $replace, base64_encode($data));
}

/**
* 对提供的urlsafe的base64编码的数据进行解码
*
* @param string $str 待解码的数据,一般为字符串
*
* @return string 解码后的字符串
*/
public function base64_urlSafeDecode($str)
{
$find = array('-', '_');
$replace = array('+', '/');
return base64_decode(str_replace($find, $replace, $str));
}
3、public function upload($config, $file)函数添加如下代码

if(!$config) $config = $this->config;
// 新增视频预处理操作
if($config['persistentOps']){
$config['persistentOps'] = str_replace('###', $this->base64_urlSafeEncode($this->bucket.':'.$file['fileName']), $config['persistentOps']);
}
二、PHP上传音视频并预处理转码控制器代码

// 文件上传[www.scutephp.com]

public function upload_video() {
$setting=C('UPLOAD_SITEIMG_QINIU');

//转码是使用的队列名称。 
$pipeline = 'guronge';

//要进行转码的转码操作。 
$fops = "avthumb/flv/vb/1.25m";

//可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当间。
$savekey = '###';
$fops = $fops.'|saveas/'.$savekey;

$policy = array(
'persistentOps' => $fops,
'persistentPipeline' => $pipeline,
// 'persistentNotifyUrl' => U('Uploadqn/notifyurl')
);

$setting['driverConfig'] = array_merge($setting['driverConfig'], $policy);

$upload = new \Think\Upload($setting);// 实例化上传类
$upload->maxSize = 0;// 设置附件上传大小
$upload->exts = array('mp4', 'flv', 'avi');// 设置附件上传类型
$upload->savePath = 'video/';// 设置附件上传目录
$info = $upload->upload();
ob_end_clean();
if(!$info) {// 上传错误提示错误信息
//echo $upload->getError();
echo 'error';
}else{// 上传成功
// var_dump($info);die;
echo $tmp = 'http://www.scutephp.com/'.$info["Filedata"]['savepath'].$info["Filedata"]['savename'];
}
}
三、javascript(JS)(表单)实现上传音视频并预处理转码

1、PHP生成签名代码

// 七牛上传凭证
$config = C('UPLOAD_SITEIMG_QINIU.driverConfig');
$qiniu = new \Think\Upload\Driver\Qiniu\QiniuStorage($config);


//转码是使用的队列名称。 
$pipeline = 'guronge';
//要进行转码的转码操作。 
$waterimg = $qiniu->base64_urlSafeEncode('http://www.scutephp.com/define/logo.png');
$fops = "avthumb/flv/s/800x600/autoscale/1/vb/1.25m/wmImage/".$waterimg."/wmOffsetX/-15/wmOffsetY/15";
//可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当间。
// $savekey = '###';


$randname = 'scutephp.com/video/'.date('Ymd').'/'.date('His').join('', unique_rand(0, 100, 8)).'.flv';
$this->randname = $randname;
$key = $qiniu->base64_urlSafeEncode($config['bucket'].':'.$randname);

$fops = $fops.'|saveas/'.$key;
$policy = array(
'persistentOps' => $fops,
'persistentPipeline' => $pipeline,
// 'persistentNotifyUrl' => U('Uploadqn/notifyurl')
);
$config = array_merge($config, $policy);
$this->qn_token = $qiniu->UploadToken($config['secretKey'], $config['accessKey'], $config);
2、前端JS或者表单

(1)使用uploadify文件上传插件构造表单(推荐)

var token = '{$qn_token}';
var randname = '{$randname}';
$("#file").uploadify({
width:200,
height:35,
auto:true,
// 七牛表单
fileObjName:'file',
formData: {token: token, key:randname, accept:'application/json'},
(2)HTML表单上传

<form method="post" action="http://upload.qiniu.com/"
enctype="multipart/form-data">
<input name="key" type="hidden" value="<resource_key>">
<input name="x:<custom_name>" type="hidden" value="<custom_value>">
<input name="token" type="hidden" value="<upload_token>">
<input name="file" type="file" />
<input name="crc32" type="hidden" />
<input name="accept" type="hidden" />
</form>
各参数注意细节:http://developer.qiniu.com/article/kodo/kodo-developer/up/upload-types.html#form-upload

demo及原代码下载:http://www.kubiji.cn/topic-id2251.html
来自 http://www.thinkphp.cn/extend/773.html



普通分类: