什么是云转码?
云转码是完全在云中将视频文件转换为其他格式的过程。更具体地说,转码意味着从单个编码视频文件创建不同大小、分辨率和比特率的新文件。这种方法使广播公司和流媒体能够确保从众多设备和不同网络条件下观看视频内容的观众的兼容性。云转码(CT)是您自己的分布式转码堆栈。有了它,你可以以分布式的方式大规模地转换媒体文件。
演示:y.jcedus.top
云转码源码目标
云转码源码的目标是创建一个开源的、可扩展的、廉价的分布式代码转换平台,用户可以完全控制性能和成本。我们从视频转码开始,因为它是最昂贵的,但目标是转码任何类型的媒体文件(音频、文档和图像)。我们使用m3u8切片程序进行视频转码。CT还使用ImageMagic进行图像转码。
现在的商业视频转码解决方案对于一般人来说非常昂贵。使用自己开发的云转码源码亦可解决您的问题,您可以以您想要的速度转换大量文件,从而控制成本。使用云转码,您可以控制:规模、速度和成本。如果确实有需要,您也可以在本地运行所有内容。或者您可以部署在AWS EC2、Beanstalk或Docker容器上。
云转码源码作用
允许您快速、大规模地执行操作列表。
自定义m3u8切片程序命令:运行并分发自己的m3u8切片程序命令
图像到图像转码:运行并设置自己的ImageMagic转换命令
验证/探测资产:运行ffprobe为公司得到mime类型
从HTTP转换代码:从HTTP/S中提取文件并按比例转换它们。
视频到视频转码:JSON输入:一个视频输入,多个视频输出。m3u8切片程序支持的任何格式和编解码器。
视频到缩略图转码:JSON输入:在视频中的特定时间进行快照,或每隔N秒快照一次。保持图像比率。
视频中的水印集成:JSON输入:拍摄图像并在视频顶部放置水印。自定义位置和透明度。保持图像比率。
云转码源码如何工作?
云代码转换是一组“活动”,它们是实现CPE活性位于云处理引擎中的类。
任务和工作流(又名状态机)在AWS SFN控制台中定义,并由其AWS ARN(AWS资源标识符)标识。然后你就可以开始了N将开始监听传入作业并执行它们的活动工人。
您可以根据您的容量、容量、成本、资源等在AWS中扩展您的基础设施。您可以在Docker上运行这些SFN活动,这是推荐的。为您提供Dockerfile。但你可以在任何地方跑。
您的客户机应用程序可以使用您选择的awsdk启动新的SFN工作流。客户端应用程序将向AWS SFN传递JSON输入日期。
然后,SFN将把这个输入传递给活动,然后活动将返回一个JSON输出。这个输出可以传递给下一个活动。
多亏了云处理引擎您可以构建自己的工作流并调用所需的任何活动。你也可以执行你自己的活动。
如果您有兴趣参与,云转码可以在以下活动中使用帮助:
文档转码:例如从DOC到PDF
音频处理:也许m3u8切片程序已经可以做到了。从未测试过m3u8切片程序是否支持它,或者是否有更好的音频工具。
云转码源码其他
入门
AWS帐户
你需要一个。您将使用以下AWS服务:S3、SFN、IAM、ECS、EC2等。
AWS ECS上的理想设置,提供EC2实例管理和Docker容器管理。您可以使用我们的Dockerfile将您自己的配置文件添加到最终的Docker映像中。创建一个ECS活动,并告诉它运行您的映像。然后可以缩放簇并自动调整。
状态机
您必须在AWS Step函数控制台中创建状态机工作流才能正常工作。
在文件夹中状态机在这个项目中,您将找到一个基本的SFN代码转换工作流。它验证输入,然后在一个活动中处理所需的所有输出。
此工作流依次调用:
1->验证设置活动
N->代码转换策略
一个云转码工作线程按顺序处理所有需要的输出,而不是并行的。
注:我无法动态地对给定给活动的输入数据进行SFN转换。“需要的输出文件”数组可以被拆分,并且可以为数组中的每个输出启动一个活动,从而允许并行代码转换。为了实现并行代码转换,您需要一个中间活动来分割输入并启动新的工作流,每个工作流只需要一个输出。
运行云转码源码
活动是用PHP编写的独立脚本(由于传统原因,但它是干净的!)可以在命令行中启动。
bash $> ./src/activities/ValidateAssetActivity.php -A arn:aws:states:eu-west-1:XXXXXXXXXXXX:activity:ValidateAsset
bash $> ./src/activities/TranscodeAssetActivity.php -A arn:aws:states:eu-west-1:XXXXXXXXXXXX:activity:TranscodeAsset
或使用Docker
$> sudo docker run 501431420968.dkr.ecr.eu-west-1.amazonaws.com/sportarc/cloudtranscode:4.2 ValidateAssetActivity -A arn:aws:states:eu-west-1:XXXXXXXXXXXX:activity:ValidateAsset
$> sudo docker run 501431420968.dkr.ecr.eu-west-1.amazonaws.com/sportarc/cloudtranscode:4.2 TranscodeAssetActivity -A arn:aws:states:eu-west-1:XXXXXXXXXXXX:activity:TranscodeAsset
使用这些命令,您可以启动处理一种活动类型的活动工作线程。在这些情况下验证设置活动和代码转换敏感性
与客户端应用程序集成
您的云代码转换工作人员(或自定义工作人员)将按需要执行工作,但启动工作流的客户端应用程序将不知道正在发生什么。
为了用云转码连接客户机应用程序,必须实现一个PHP接口。
你必须实现CpeClientInterface.php接口位于CloudProcessingEngine SDK项目名称:
为了将这个类传递给活动工作线程,必须在命令行中使用[-C]选项提供它的位置。
如果你要在你的自定义Docker中创建一个你自己的Docker。
这样的Dockerfile例如:
FROM 501431420968.dkr.ecr.eu-west-1.amazonaws.com/sportarc/cloudtranscode:4.2
MAINTAINER bFAN Sports
COPY clientInterfaces /usr/src/clientInterfaces
只需创建一个新文件夹,将上面的Dockerfile放入其中,并在其中克隆CloudTranscode存储库。然后建立自己的形象,如下所示:sudo docker build-t 501431420968.dkr.ecr.eu-west-1.amazonaws。com/sportarc/cloudtranscode产品。
然后你可以像这样开始你的工作:
$> sudo docker run 501431420968.dkr.ecr.eu-west-1.amazonaws.com/sportarc/cloudtranscode-prod:4.2 ValidateAssetActivity -A arn:aws:states:eu-west-1:XXXXXXXXXXXX:activity:ValidateAsset -C /usr/src/clientInterfaces/ValidateAssetClientInterfaces.php
$> sudo docker run 501431420968.dkr.ecr.eu-west-1.amazonaws.com/sportarc/cloudtranscode-prod:4.2 TranscodeAssetActivity -A arn:aws:states:eu-west-1:XXXXXXXXXXXX:activity:TranscodeAllOutputAssets -C /usr/src/clientInterfaces/TranscodeAllOutputAssetsClientInterfaces.php
$> sudo docker run 501431420968.dkr.ecr.eu-west-1.amazonaws.com/sportarc/cloudtranscode-prod:4.2 TranscodeAssetActivity -A arn:aws:states:eu-west-1:XXXXXXXXXXXX:activity:TranscodeImageAsset -C /usr/src/clientInterfaces/TranscodeImagesAssetsClientInterfaces.php
$> sudo docker run 501431420968.dkr.ecr.eu-west-1.amazonaws.com/sportarc/cloudtranscode-prod:4.2 TranscodeAssetActivity -A arn:aws:states:eu-west-1:XXXXXXXXXXXX:activity:OnDemandTranscodeAsset -C /usr/src/clientInterfaces/OnDemandTranscodeAssetClientInterfaces.php
如您所见,您可以创建许多SFN任务。每个任务将执行相同的活动代码,但它们使用不同的接口类连接到不同的客户端应用程序。通过这种方式,您可以为所有工作流和客户端应用程序提供多组工作线程。每个工作人员将只处理某些任务。它们使用自定义接口类与不同的客户机应用程序挂钩。
输入格式
在输入_样本文件夹中,我们提供输入示例,您可以编辑这些示例以匹配您的设置。
主要思想是:
一输入描述必须处理的内容的部分
一输出包含所需输出列表的部分。每个输出都由一个JSON描述,并指定要完成的工作以及结果文件的位置。
一个简单的示例,以.mp4作为输入,并使用m3u8切片程序生成两个缩略图和一个代理视频:
{
"input_asset": {
"type": "VIDEO",
"bucket": "cloudtranscode-eu-dev",
"file": "/input/video1.mp4"
},
"output_assets": [
{
"type": "THUMB",
"mode": "snapshot",
"bucket": "cloudtranscode-eu-dev",
"path": "/output/",
"file": "thumbnail_sd.jpg",
"s3_rrs": true,
"s3_encrypt": true,
"size": "-1:159",
"snapshot_sec": 5
},
{
"type": "THUMB",
"mode": "snapshot",
"bucket": "cloudtranscode-eu-dev",
"path": "/output/",
"file": "thumbnail_hd.jpg",
"s3_rrs": true,
"s3_encrypt": true,
"size": "-1:720",
"snapshot_sec": 5
},
{
"type": "VIDEO",
"bucket": "cloudtranscode-eu-dev",
"path": "/output/",
"file": "video1.mp4",
"s3_rrs": true,
"s3_encrypt": true,
"keep_ratio": false,
"no_enlarge": false,
"preset": "360p-4.3-generic",
"watermark": {
"bucket": "cloudtranscode-eu-dev",
"file": "/no-text-96px.png",
"size": "96:96",
"opacity": 0.2,
"x": -20,
"y": -20
}
}
]
}
您也可以提交自定义的m3u8切片程序命令,或者在这里指定任意数量的输出。
小结
随着越来越多的观众通过笔记本电脑、智能手机、平板电脑、智能电视等各种设备进行直播,兼容性对许多广播公司而言已成为挑战。当视频首次由摄像机录制时,它会使用可能适合也可能不适合播放的编解码器进行编码,具体取决于设备。云转码几乎可以获取任何视频文件,并使用许多新旧编解码器对其进行转换,以确保兼容性。
标签:视频,转码,west,m3u8,AWS,cloudtranscode,源码,eu From: https://blog.51cto.com/u_15751528/5746426