当前位置: 首页 > news >正文

亚马逊 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 中创建和管理转码作业

上传的视频需要转码成不同的编码, 可以直接在 AWS Elemental MediaConvert 中创建和管理转码作业 AWS Elemental MediaConvert 中创建和管理转码作业 /*** 视频转码* return bool* author wzb* data 2024/5/30*/function videoTranscode(&$data){$fileId $data[id] ?? …...

RocketMQ可视化界面安装

RocketMQ可视化界面安装 **起因:**访问rocketmq-externals项目的git地址,下载了源码,在目录中并没有找到rocketmq-console文件夹。 git下面文档提示rocketMQ的仪表板转移到了新的项目中,点击仪表板到新项目地址; 下载…...

【ffmpeg】本地格式转换 mp4转wav||裁剪mp4

个人感受:太爽了!!!(可能用惯了转换网站和无良的转换软件) ———— 使用FFmpeg把mp4文件转换为WAV文件 - 简书 (jianshu.com) FFMPEG 视频分割和合并 - 简书 (jianshu.com) ———— 示例 ffmpeg -i …...

基于Django+MySQL的智慧校园系统

此项目基于Django MySQL HTML CSS JS jQuery bootstrap实现的功能有 学生管理部门管理代办清单管理校园论坛校园医疗服务校园看点校园生活助手常用功能入口 1. 一些注意点 1. 页面body会自动有一些边界距&#xff0c;处理方法&#xff1a; <head><style>b…...

Linux基础指令(一)

前言 Linux基础指令主要学习&#xff1a;对目录、文件、压缩包、匹配查找&#xff0c;权限等操作 第一次接触ubuntu需要知道的基本知识 sudo passwd root 先给root用户设置密码 su root 切换到root用户 su zhangsan …...

三极管十大品牌

三极管十大品牌-三极管品牌-晶体三极管哪个品牌好-Maigoo品牌榜...

需求记录(共享元素)

MainActivity1 列表展示&#xff0c;使用共享元素完成页面间的切换 package com.example.animactivity;import android.annotation.SuppressLint; import android.app.ActivityOptions; import android.content.Intent; import android.os.Build; import android.os.Bundle; i…...

.Net 使用 MongoDB

安装nuget包 MongoDB.Driver 简单代码 using MongoDB.Bson; using MongoDB.Driver; using System.Buffers; using System.Collections.Concurrent; using System.Diagnostics;namespace ConsoleApp4 {internal class Program{static void Main(string[] args){var client = ne…...

【TensorFlow深度学习】值函数估计:蒙特卡洛方法与TD学习

值函数估计&#xff1a;蒙特卡洛方法与TD学习 值函数估计&#xff1a;蒙特卡洛方法与TD学习的深度探索蒙特卡洛方法时序差分学习(TD)Python代码示例结论 值函数估计&#xff1a;蒙特卡洛方法与TD学习的深度探索 在强化学习的奇妙世界里&#xff0c;值函数估计扮演着至关重要的…...

成功解决ModuleNotFoundError: No module named ‘cv2’

成功解决ModuleNotFoundError: No module named ‘cv2’ &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&#xff01;&#x1f387; &#x1f393;…...

中国蚁剑 安装教程 2024年5月

2024/5/11 中国蚁剑 安装教程 一、下载中国蚁剑的加载器和核心源码&#xff08;两个都要用到&#xff09; github官方下载地址&#xff1a;https://github.com/AntSwordProject/ 参考文档&#xff1a;antSword/README_CN.md at master AntSwordProject/antSword GitHub 核…...

Golang-分离式加载器(传参)AES加密

目录 enc.go 生成: dec.go --执行dec.go...--上线 cs生成个c语言的shellcode. enc.go go run .\enc.go shellcode 生成: --key为公钥. --code为AES加密后的数据, ----此脚本每次运行key和code都会变化. package mainimport ("bytes""crypto/aes"&…...

速览三版HTTP的改进策略

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是互联网通信的基础协议&#xff0c;自从其第一个版本推出以来&#xff0c;经历了多个版本的改进&#xff0c;每个版本都针对之前的不足进行了优化和增强。以下是HTTP/1.1、HTTP/2和HTTP/3的主要改进总结&#xff1a; …...

window.open(“.html“,“_blank“) 执行是下载,并没有打开新窗口显示html

window.open() 方法在浏览器中打开一个新窗口或者新标签页。如果你的 .html 文件被下载而不是在新窗口中打开&#xff0c;那可能是因为服务器的响应头设置了 Content-Disposition: attachment&#xff0c;这会导致浏览器把响应的内容作为一个文件下载。 如果你有权限修改服务器…...

【QT5.14.2】编译MQTT库example的时候报No such file or directory

【QT5.14.2】编译MQTT库example的时候报No such file or directory 前几天导师让跑一下MQTT库&#xff0c;用的5.14.2版本的QT&#xff0c;于是就上网搜了一个教程&#xff1a;https://www.bilibili.com/video/BV1dH4y1e7hG/?spm_id_from333.337.search-card.all.click&v…...

【数据结构】前缀树(字典树)汇总

基础 {“a”,“abc”,“bac”,“bbc”,“ca” }的字典树如下图&#xff1a; 最主用的应用&#xff1a;一&#xff0c;字符串编码。二&#xff0c;位运算。 字符串编码 相比利用哈希映射编码&#xff0c;优点如下&#xff1a; 依次查询长度为n的字符串s的前缀时间复杂度是O(…...

Linux:基础开发工具

文章目录 Linux 软件包管理器 yum什么是软件包关于rzsz查看软件包安装软件卸载软件安装扩展源 Linux 编辑器 vimvim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)底行模式(last line mode) vim的基本操作[命令模式]切换至[插入模式][插入模式]切换至[命令模…...

HarmonyOS NEXT Push接入

接入HarmonyOS NEXT Push 推送功能&#xff0c;相比于 Android 真的是简单太多。不再需要适配接入各个厂家的推送 SDK&#xff0c;真是舒服。 1.开通推送服务与配置Client ID 1.1 创建应用获取Client ID 按照官方文档来就可以了&#xff1a;https://developer.huawei.com/co…...

如何快速入门Element-UI:打造高效美观的前端界面

Element-UI 是一款基于 Vue.js 的开源组件库,提供了丰富的 UI 组件,可以帮助开发者快速构建美观、响应式的前端界面。本文将详细介绍如何快速入门 Element-UI,包括环境搭建、组件使用、样式定制及常见问题解决方法,帮助你高效地使用 Element-UI 进行前端开发。 一、环境搭…...

Langchain的向量存储 - Document示例代码里的疑问

文章目录 前言一、语句分析二、 举例解释三、 完整代码总结 前言 之前的代码里有下面这句话&#xff0c;可能有看不明白的读者。 vectors [embeddings.embed(doc.page_content) for doc in docs]今天一起来看下这句话。 一、语句分析 这句话实际上是一个列表推导式&#x…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...