亚马逊 AWS 视频转码功能、AWS Elemental MediaConvert 中创建和管理转码作业

本文主要是介绍亚马逊 AWS 视频转码功能、AWS Elemental MediaConvert 中创建和管理转码作业,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上传的视频需要转码成不同的编码, 可以直接在 AWS Elemental MediaConvert 中创建和管理转码作业

AWS Elemental MediaConvert 中创建和管理转码作业

/*** 视频转码* @return bool* @author wzb* @data 2024/5/30*/function videoTranscode(&$data){$fileId = $data['id'] ?? 0;$fileName = $data['fileName'] ?? '';$FileInput = $data['FileInput'] ?? '';  // s3://s3桶名/src/080dc06642cf814809b61f7f381fa576.mp4if (!$fileId || empty($fileName) || empty($FileInput)) {return true;}$configOss = config('aws_oss');$configOss = $configOss['video_transcode'] ?? [];$accessKeyId = $configOss['accessKeyId'] ?? '';  // 你的AccessKeyId$accessKeySecret = $configOss['accessKeySecret'] ?? '';  // 你的AccessKeySecret$region = $configOss['region'] ?? ''; // 你的Bucket所在地域的域名$bucket = $configOss['bucket'] ?? ''; // 你的Bucket名字$stsClient = new StsClient(['version' => 'latest',//版本'region' => $region,//区域'credentials' => new Credentials($accessKeyId,//Access key ID$accessKeySecret,//Secret access key),]);$result = $stsClient->getSessionToken(['DurationSeconds' => 900, ]);$credentials = $stsClient->createCredentials($result);$data['token_data'] = $result['Credentials']['Expiration'] ?? '';$tokenCredentials = $credentials->toArray();$data['token_expires_date'] = date('Y-m-d H:i:s', $tokenCredentials['expires'] ?? 0);$mediaConvertClient = new MediaConvertClient(['version' => 'latest',//版本'region' => $region,
//            'endpoint' => 'https://mediaconvert.ap-southeast-1.amazonaws.com','credentials' => $credentials
//            'credentials' => [
//                'key' => $result['Credentials']['AccessKeyId'],
//                'secret' => $result['Credentials']['SecretAccessKey'],
//                'token' => $result['Credentials']['SessionToken']
//            ]]);try {$outFileDir = ['oss_path_480' => "s3://{$bucket}/video_test/video480/",'oss_path_720' => "s3://{$bucket}/video_test/video720/",'oss_path_1080' => "s3://{$bucket}/video_test/video1080/",];$result = $mediaConvertClient->createJob(["Role" => "arn:aws:iam::51**284:role/service-role/MediaConvert_Default_Role","Settings" => ['FollowSource' => 1,'Inputs' => [['AudioSelectors' => ['Audio Selector 1' => ['DefaultSelection' => 'DEFAULT']],'VideoSelector' => [],'TimecodeSource' => 'ZEROBASED','FileInput' => $FileInput,]],'OutputGroups' => self::configOutputGroups($outFileDir),],"Queue" => "arn:aws:mediaconvert:ap-southeast-1:515287419284:queues/Default","UserMetadata" => ["Customer" => "Amazon1"],]);$jobId = ($result['Job']['Id'] ?? '');$data['jobId'] = $jobId;if (!empty($jobId)) {$res = FileModel::updateData(['id' => $fileId], ['job_id' => $jobId, 'oss_path_480' => $outFileDir['oss_path_480'] . $fileName,'oss_path_720' => $outFileDir['oss_path_720'] . $fileName, 'oss_path_1080' => $outFileDir['oss_path_1080'] . $fileName,]);send_socket_time_task(['id' => $fileId, 'job_id' => $jobId], 120, 'OssJob');} else {$res = FileModel::updateData(['id' => $fileId], ['is_transcode' => 2]); // 转码失败}SysComService::fileInfo($fileId, 2); // 清理缓存} catch (AwsException $e) {$data['exception'] = $e->getMessage();;send_dingtalk_develop("filed upload oss error:{$fileId}:;\n" . $e->getMessage());return false;}return true;}// 转码输出配置,// 可以直接在AWS Elemental MediaConvert 配置模版/作业,然后复制json对象static function configOutputGroups($outFileDir = []){$video480Path = $outFileDir['oss_path_480'] ?? '';$video720Path = $outFileDir['oss_path_720'] ?? '';$video1080Path = $outFileDir['oss_path_1080'] ?? '';$OutputGroups = '[{"CustomName": "video480", "Name": "File Group","Outputs": [{"ContainerSettings": {  "Container": "MP4", "Mp4Settings": {} },"VideoDescription": {"Width": 480, "Height": 854,"CodecSettings": {"Codec": "H_264","H264Settings": { "MaxBitrate": 1000000, "RateControlMode": "QVBR",   "SceneChangeDetect": "TRANSITION_DETECTION" }}},"AudioDescriptions": [{"CodecSettings": {"Codec": "AAC","AacSettings": { "Bitrate": 96000, "CodingMode": "CODING_MODE_2_0",  "SampleRate": 48000 }}}]}],"OutputGroupSettings": {"Type": "FILE_GROUP_SETTINGS","FileGroupSettings": {"Destination": "' . $video480Path . '","DestinationSettings": {"S3Settings": {  "StorageClass": "STANDARD" }}}}},{"CustomName": "video720", "Name": "File Group","Outputs": [{"ContainerSettings": {  "Container": "MP4",  "Mp4Settings": {}  },"VideoDescription": {"Width": 720,  "Height": 1280,"CodecSettings": {"Codec": "H_264","H264Settings": { "MaxBitrate": 2500000,  "RateControlMode": "QVBR", "SceneChangeDetect": "TRANSITION_DETECTION" }}},"AudioDescriptions": [{"CodecSettings": {"Codec": "AAC","AacSettings": { "Bitrate": 96000,  "CodingMode": "CODING_MODE_2_0",  "SampleRate": 48000 }}}]}],"OutputGroupSettings": {"Type": "FILE_GROUP_SETTINGS","FileGroupSettings": {"Destination": "' . $video720Path . '","DestinationSettings": {"S3Settings": {  "StorageClass": "STANDARD" }}}}},{"CustomName": "video1080", "Name": "File Group","Outputs": [{"ContainerSettings": { "Container": "MP4", "Mp4Settings": {} },"VideoDescription": {"Width": 1080,  "Height": 1920,"CodecSettings": {"Codec": "H_264","H264Settings": { "MaxBitrate": 5000000, "RateControlMode": "QVBR", "SceneChangeDetect": "TRANSITION_DETECTION" }}},"AudioDescriptions": [{"CodecSettings": {"Codec": "AAC","AacSettings": {  "Bitrate": 96000, "CodingMode": "CODING_MODE_2_0",  "SampleRate": 48000 }}}]}],"OutputGroupSettings": {"Type": "FILE_GROUP_SETTINGS","FileGroupSettings": {"Destination": "' . $video1080Path . '"}}}]';return json_decode($OutputGroups, true);}

检测视频转码任务是否完成

function checkVideoTranscode(&$data){$fileId = $data['id'] ?? 0;$jobId = $data['job_id'] ?? '';if (!$fileId || empty($jobId)) {return true;}$configOss = config('aws_oss');$configOss = $configOss['video_transcode'] ?? [];$accessKeyId = $configOss['accessKeyId'] ?? '';  // 你的AccessKeyId$accessKeySecret = $configOss['accessKeySecret'] ?? '';  // 你的AccessKeySecret$region = $configOss['region'] ?? ''; // 你的Bucket所在地域的域名$stsClient = new StsClient(['version' => 'latest',//版本'region' => $region,//区域'credentials' => new Credentials($accessKeyId,//Access key ID$accessKeySecret,//Secret access key),]);$result = $stsClient->getSessionToken(['DurationSeconds' => 900,]);$credentials = $stsClient->createCredentials($result);$data['token_data'] = $result['Credentials']['Expiration'] ?? '';$tokenCredentials = $credentials->toArray();$data['token_expires_date'] = date('Y-m-d H:i:s', $tokenCredentials['expires'] ?? 0);$mediaConvertClient = new MediaConvertClient(['version' => 'latest',//版本'region' => $region,'credentials' => $credentials
//            'credentials' => [
//                'key' => $result['Credentials']['AccessKeyId'],
//                'secret' => $result['Credentials']['SecretAccessKey'],
//                'token' => $result['Credentials']['SessionToken']
//            ]]);try {$result = $mediaConvertClient->getJob(['Id' => $jobId,]);$status = $result['Job']['Status'] ?? ''; // COMPLETE  	ERROR$statusArr = ['COMPLETE' => 1, 'ERROR' => 2,];if (isset($statusArr[$status])) {$res = FileModel::updateData(['id' => $fileId], ['is_transcode' => $statusArr[$status]]);SysComService::fileInfo($fileId, 2); // 清理缓存} else {send_socket_time_task(['id' => $fileId, 'job_id' => $jobId], 120, 'OssJob');}$data['token_data_status'] = $status;} catch (AwsException $e) {$data['token_data_exception'] = $e->getMessage();$data['exception'] = $e->getMessage();send_dingtalk_develop("filed upload oss error:{$fileId}:;\n" . $e->getMessage());return false;}return true;}

这篇关于亚马逊 AWS 视频转码功能、AWS Elemental MediaConvert 中创建和管理转码作业的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1033041

相关文章

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

基于SpringBoot实现文件秒传功能

《基于SpringBoot实现文件秒传功能》在开发Web应用时,文件上传是一个常见需求,然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余,此时可以使用文件秒传技术通过识别重复... 目录前言文件秒传原理代码实现1. 创建项目基础结构2. 创建上传存储代码3. 创建Result类4.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti