我已经在Amazon网络服务上使用Lambda创建了一个脚本,以便在视频上传到S3存储桶时自动转码视频。
但是,这个脚本效果很好,当我将下面的播放列表代码添加到脚本中时,整个脚本停止工作并且不输出任何视频文件。
知道为什么吗?
'use strict';
var AWS = require('aws-sdk');
var s3 = new AWS.S3({
apiVersion: '2012-09-25'
});
var eltr = new AWS.ElasticTranscoder({
apiVersion: '2012-09-25',
region: 'us-west-2'
});
exports.handler = function(event, context) {
console.log('Executing Elastic Transcoder Orchestrator');
var bucket = event.Records[0].s3.bucket.name;
var key = event.Records[0].s3.object.key;
var pipelineId = '1521208528859-wd01uu';
console.log(key);
console.log(event.Records[0]);
if (bucket !== 'b-video-upload') {
context.fail('Incorrect Video Input Bucket');
return;
}
var srcKey = decodeURIComponent(event.Records[0].s3.object.key.replace(/\-/g, " ")); //the object may have spaces
var newKey = key.split('.')[0];
var params = {
PipelineId: pipelineId,
OutputKeyPrefix: newKey + '/',
Input: {
Key: srcKey,
FrameRate: 'auto',
Resolution: 'auto',
AspectRatio: 'auto',
Interlaced: 'auto',
Container: 'auto'
},
Outputs: [{
Key: newKey + '.mp4',
ThumbnailPattern: newKey + '-thumbnail-{resolution}' + '-{count}',
PresetId: '1521314602259-6jnl6v', //Generic 1080p
Watermarks: [{
InputKey: 'watermarks/b-video-watermark.png',
PresetWatermarkId: 'BottomLeft'
}],
},
{
Key: newKey + '.ts',
ThumbnailPattern: '',
PresetId: '1521267450305-5yd8hd', //HLS v3 2mb/s
Watermarks: [{
InputKey: 'watermarks/b-video-watermark.png',
PresetWatermarkId: 'BottomLeft'
}],
}],
Playlist: [{
Format: 'HLSv3',
Name: newKey + '.m3u8',
OutputKeys: [
newKey + '.ts'
]
}]
};
console.log('Starting Job');
eltr.createJob(params, function(err, data){
if (err){
console.log(err);
} else {
console.log(data);
}
context.succeed('Job well done');
});
};
在这里,您可以在脚本中看到上面的代码
import boto3
client = boto3.client('s3')
try:
response = client.get_bucket_tagging(Bucket='bucket_name')
print(response['TagSet'])
except Exception, e:
# Handle exception
# Do something
print e
答案 0 :(得分:0)
我有同样的问题。 然后我通过更改播放列表名称解决了它。
似乎是这样。
注意1:我在输出存储区中有一个名为“ hls-input”的文件夹,用于转码后的视频
newkey ='input / {videoName}'
OutputKeys:['hls-input / {videoName} .ts']
在这种情况下,该功能将输出与输入名称相同的hls加密视频,并且效果很好!
注2:我使用了hlsv3,因为hlsv4需要视频(无声音)和音频,我不想将mp4与视频和音频分开,所以对我来说效果很好!
Playlists: [
{
Format: 'HLSv3',
Name: newKey.split('/')[1] ,
OutputKeys: [ 'hls-' + newKey + '.ts' ],
},
],