视频转码描述了一种数字格式转换为另一种数字格式的过程。这用于节省空间或满足目标格式要求。例如,您可能有一个对于浏览来说太大的主文件,因此需要将其转换为更小、更轻量级的代理文件,同时维护必要的元数据,以便以后进行统一。云视频转码是指使用基于云的转码软件对视频进行转码。
源码演示:c.yunzes.top/zm
安装程序
1、安装node.js,最好是通过nvm。Lambda使用node的旧版本(目前是v0.10.33),所以最好使用相同的版本——特别是通过npm安装依赖时;
2、克隆这个回购;
3、运行npm安装;
4、创建一个配置。Json文件(见下文),或者根据自己的需要修改index.js文件;
5、创建您的bucket;
6、运行Gulp(见下文);
7、创建并上传Lambda函数;
8、通过将视频上传到源存储bucket或在网络服务控制台中手动运行该视频来调用lambda函数。
还有一些Gulp任务需要从John Van Sickle的FFmpeg构建站点下载、提取和复制FFmpeg的64位linux构建。
默认的gulp任务将运行所有的任务(除了上传…到目前为止)。这将导致以下操作:
1、清理构建目录、dist目录和dist.zip
2、下载、提取并复制FFmpeg和FFprobe到dist目录
3、复制index.js和config. js文件。Json文件到dist目录
4、在dist目录下运行npm install(不包括dev依赖项)
5、将所有内容压缩到dist.zip中。此文件是您将上传到网络服务 Lambda执行的文件。
网络服务配置
只需要设置S3bucket并上传Lambda函数。
匿名函数
下载上传到源bucket的文件,通过FFmpeg流式传输,输出一个缩放的mp4文件和一个png图像,然后将这两个文件上传到目标bucket。
IAM执行角色策略
{
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:*"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::source-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::destination-bucket/*"
]
}
]
}
config.json
{
"videoMaxWidth": 320,
"videoMaxDuration": 15,
"destinationBucket": "destination-bucket",
"linkPrefix": "http://xxxx/",
"gzip": true
}
S3 bucket
您需要创建2个bucket,一个源bucket和一个destination bucket。你也许可以用一个bucket和一个花哨的前缀策略逃脱惩罚,但这可能是一个麻烦比它的价值。
应将源bucket配置为触发Lambda事件:源Bucket事件配置
测试
如果要在本地运行测试,请使用示例文件。修改bucket名称和object key。
var lambda = require('./index').handler;
lambda({
Records: [{
eventVersion: '2.0',
eventSource: 'aws:s3',
awsRegion: 'us-east-1',
eventTime: '2015-04-09T00:00:00.000Z',
eventName: 'ObjectCreated:Post',
userIdentity: {principalId: 'XXXXXXXXXXXXXX'},
requestParameters: {sourceIPAddress: '10.0.0.1'},
responseElements: {
'x-amz-request-id': 'AAAAAAAAAAAAAAAA',
'x-amz-id-2': 'example+uvBeYL11YHRGvzOb5qQz7cwxh7AzPlE+zuM2zRN6vTvd/1Qe0TJpKPCvZBoO4dB0gqM='
},
s3: {
s3SchemaVersion: '1.0',
configurationId: 'ProcessUploads',
bucket: {
name: 'source-bucket',
ownerIdentity: {principalId: 'XXXXXXXXXXXXXX'},
arn: 'arn:aws:s3:::source-bucket'
},
object: {
key: 'us-east-1%3A8ca8d677-aaaa-aaaa-aaaa-b75e887648ee/public/0524d7ce-aaaa-aaaa-aaaa-1f8cf05b3862.mp4',
size: 1000000,
eTag: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
}
}
}]
}, {
fail: function (error) {
console.log('Failed:', error);
process.exit(1);
},
succeed: function(result) {
console.log('Succeeded:', result);
process.exit();
}
});
因素
事件的对象键是URL编码的。文件名中的空格可以替换为+因此,请注意这一点并适当地处理错误。如果您尝试像本例中那样使用网络服务sdkforjavascript下载文件,而不进行处理,它将抛出一个错误。
不处理错误context.fail将导致函数运行,直到达到超时。
选择最大内存分配。这主要是CPU限制的,但是Lambda将内存和CPU分配捆绑在一起。用不同的视频和大小进行测试,如果符合要求,应该会给你一个好主意。总执行时间有限!
云视频转码的好处
媒体和视频转码在云和本地硬件上都是可能的,但它们有不同的先决条件、优势和好处。虽然它们都是可行的选择,但事实仍然是云媒体转码越来越受欢迎,而且有很好的理由。一个例子是4K的兴起,公司逐渐需要能够管理和提供4K质量的视频。为了能够处理大量的4K高质量视频,企业将需要花费大量的时间和金钱升级本地存储,将服务器切换到更高的标准,添加新的许可证等。这是一项不是每个人都能负担得起的投资。但有了云视频转码,高质量、快速、廉价和有效的视频转码将对每个人都有用。
云转码源码最重要的特性之一是它所拥有的灵活性。如果您在百度云中存储视频文件,但想将其转换为其他兼容的格式,您知道必须经过的过程吗?首先,您必须支付将文件的每个字节从百度云传输到其他端口的费用,然后支付代码转换服务的费用,然后再支付将文件传输回百度云的费用。这不是一个非常实际的解决方案,不是吗?
通过云转码源码为网络服务进行云视频转换
不,你想要和需要的是一种方法,在同一个云中,在离你越近的服务器上,对文件进行代码转换。通过满足这两个条件,您将能够更快、更便宜、更高质量地进行代码转码。云转码源码的云视频转码服务允许您对存储在网络服务云中的文件进行转码,在网络服务云中,转码将在离您尽可能近的服务器上进行。在不久的将来,您可以期待更多这样的特性以及云转码源码与其他云之间的集成。
在这个数字内容为王的世界里,媒体代码转换正成为一项越来越重要的服务。使用代码转换的不同行业和公司的数量范围很大,而且只会增加。例如,电影后期制作团队需要将编辑格式转换为发行格式(如H.264)。或者是电影的声音编辑器,需要将包含大量元数据的制作音频编解码器转换为MP4等发行格式。云转码源码提供功能强大的云视频转码,具有极高的可伸缩性,可以直接对云存储进行读写。它与我们基于api的媒体资产管理平台本机集成。我们的视频转码服务可在云转码源码中获得,云转码源码基于云的媒体服务商店,在那里您将找到可伸缩的和云原生的转码和打包服务。