使用Elastic Transcoder和Lambda(AWS)创建播放列表

时间:2018-04-18 10:04:25

标签: node.js amazon-web-services aws-lambda amazon-elastic-transcoder

我已经在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

1 个答案:

答案 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' ],
 },
],