1、创建OSS存储空间
2、创建媒体处理MPS
3、安装阿里云oss的SDK和MPS的SDK
composer require aliyuncs/oss-sdk-php
composer require obacm/aliyun-openapi-mts
4、使用OSS上传+转码功能
//OSS上传
public function OssUploadFile(Request $request)
{
$accessKeyId = '';
$accessKeySecret = '';
// Endpoint以深圳为例,其它Region请按实际情况填写。
$endpoint = "http://oss-cn-shenzhen.aliyuncs.com";
// 存储空间名称
$bucket = "rongyun-jxtest";
//laravel 获取上传文件
$tmpFile_A = $request->file('file');
//生成上传OSS后的路径+文件名(注意:路径禁止以"/"开头)
$object_A = 'aa/' . date("Y_M_D_H_M_S") . '.' . $tmpFile_A->getClientOriginalExtension();
// 获取临时文件
$filePath_A = $tmpFile_A->getPath() . '/' . $tmpFile_A->getFilename();
//OssClient
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
$info_A = $ossClient->uploadFile($bucket, $object_A, $filePath_A);//为了获取上传后的文件信息
//判断是否上传成功
if ($info_A['oss-request-url']) {
#上传成功
//dd('上传成功');
//dd($object_A);
#调用转码方法
$this->OssMts($object_A);
} else {
#上传失败
dd('上传失败');
}
}
// 转码
/**
* 阿里云媒体处理—转码
* @param $oss_input_object_name :OSS中需要转码的文件名,如'Test/input_video001.mp4'
*/
public function OssMts()
{
//上传文件名称,拿oss上传的文件名
$oss_input_object_name = 'aa/2023_Aug_Thu_03_Aug_th.mp4';
#转码公共参数配置区域
$access_key_id = '';
$access_key_secret = '';
//您需要操作的OSS存储空间的所在地,例如'cn-shenzhen'表示‘深圳’
$mps_region_id = 'cn-shenzhen';
$pipeline_id = '';//管道ID(//您的案例媒体处理控制台->全局设置->管道->管道ID)
$template_id = '';//模板ID(官方文档Deom中默认,你自己在媒体处理->全局设置->转码模板中自己创建一个也可以,不会的创建就用官方Demo给的这个,或自行科普)
$oss_location = 'oss-cn-shenzhen';//您需要操作的OSS存储空间的所在地就是OSS存储空间概览->外网访问EndPoint(地域节点)的前缀,(我的是北京,所以写'oss-cn-beijing')
$oss_bucket = 'rongyun-jxtest';//你的Oss存储空间bucket名称
//待转码文件(前面上传方法成功后,调用转码方法传进来的参数)
$oss_input_object = $oss_input_object_name;
//转码完毕后输出的文件名(你也可以自己加路径,切记文件路径开头不能使用‘/’或者‘\’开头,这个oss手动创建文件夹时会有提示,如果想要覆盖原先的路径就跟前面写一样的路径命名即可)
$oss_output_object = 'test/test.mp4';
$clientProfile = DefaultProfile::getProfile(
$mps_region_id, # 您的 Region ID
$access_key_id, # 您的 AccessKey ID
$access_key_secret # 您的 AccessKey Secret
);
//开始执行转码步骤
$client = new DefaultAcsClient($clientProfile);
# 创建API请求并设置参数
$request = new SubmitJobsRequest();
$request->setAcceptFormat('JSON');
# Input 输入待转码的OSS文件
$input = [
'Location' => $oss_location,
'Bucket' => $oss_bucket,
'Object' => urlencode($oss_input_object)
];
$request->setInput(json_encode($input));
# Output 输出转码完毕的OSS文件
$output = [
'OutputObject' => urlencode($oss_output_object)
];
# Ouput->Container 转码完毕后的格式
$output['Container'] = array('Format' => 'mp4');
# Ouput->Video 输入视频配置
//本数组中的参数value 根据你的实际需求自己定义
$output['Video'] = [
'Codec' => 'H.264',//编码格式
'Bitrate' => 1500,//比特率/码率
'Width' => 1280,//视频宽度
'Fps' => 25//视频每秒帧数
];
# Ouput->Audio 输入音频配置
//本数组中的参数value 根据你的实际需求自己定义
$output['Audio'] = [
'Codec' => 'AAC',//解码器
'Bitrate' => 128,//比特率
'Channels' => 2,//频道
'Samplerate' => 44100//抽样率
];
# Ouput->TemplateId //输入模板化
$output['TemplateId'] = $template_id;
$outputs = array($output);
#设置输出
// dd(json_encode($outputs));
$request->setOUtputs(json_encode($outputs));
#设置输入OSS_Bucket名称
$request->setOutputBucket($oss_bucket);
#设置输入OSS_所在地
$request->setOutputLocation($oss_location);
# PipelineId 设置转码管道ID
$request->setPipelineId($pipeline_id);
# 发起请求并处理返回
$response = $client->getAcsResponse($request);
//判断转码是否成功
// [{"OutputObject":"exampleOutput.mp4","TemplateId":"6181666213ab41b9bc21da8ff5ff****","WaterMarks":[{"InputFile":{"Bucket":"exampleBucket","Location":"oss-cn-hangzhou","Object":"image_01.png"},"WaterMarkTemplateId":"9b772ce2740d4d55876d8b542d47****"}],"UserData":"testid-001"}]
if ($response->{'JobResultList'}->{'JobResult'}[0]->{'Success'}) {
#转码成功
dump($response);
//删除未转码的源文件
//拼接完成转码的文件路径并更新数据库
} else {
#转码失败
'SubmitJobs Failed code:' .
$response->{'JobResultList'}->{'JobResult'}[0]->{'Code'} .
' message:' .
$response->{'JobResultList'}->{'JobResult'}[0]->{'Message'} . "\n";
}
# 发起请求并处理返回,下面这点捕获异常根据你的需求要不要都行,这个就是让你看报错和返回值的。
try {
$response = $client->getAcsResponse($request);
print 'RequestId is:' . $response->{'RequestId'} . "\n";
//RequestId is:9EF6A44A-7568-407F-B48C-A6A840C83ECE JobId is:5328efd028dc458da5c5fdb9bee7a245 这个是返回值
if ($response->{'JobResultList'}->{'JobResult'}[0]->{'Success'}) {
print 'JobId is:' .
$response->{'JobResultList'}->{'JobResult'}[0]->{'Job'}->{'JobId'} . "\n";
} else {
print 'SubmitJobs Failed code:' .
$response->{'JobResultList'}->{'JobResult'}[0]->{'Code'} .
' message:' .
$response->{'JobResultList'}->{'JobResult'}[0]->{'Message'} . "\n";
}
} catch (\Exception $e) {
print 'Error: ' . $e->getErrorCode() . ' Message: ' . $e->getMessage() . "\n";
} catch (ClientException $e) {
print 'Error: ' . $e->getErrorCode() . ' Message: ' . $e->getMessage() . "\n";
}
}