Skip to content

leedoing/awsLambdaElasticTranscoder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 

Repository files navigation

Using AWS Lambda, Elastic transcoder

Workflow

alt tag

IAM Role

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:Put*",
                "s3:Get*",
                "s3:*MultipartUpload*",
                "s3:Delete*"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        },
        {
            "Sid": "Stmt1441234334958",
            "Action": [
                "elastictranscoder:CreateJob"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
##Lambda(using a javscript sdk)
var aws = require('aws-sdk');
var elastictranscoder = new aws.ElasticTranscoder();
var s3 = new aws.S3();
var filename = function(path){ //upload object filename
    var pathSplit = path.split('.')[0];
    var arraySize = pathSplit.split('/').length-1;
    var filename = pathSplit.split('/')[arraySize];
    return filename;
}
var prefix = function(path){ //upload object prefix
    var pathSplit = path.split('.')[0];
    var arraySize = pathSplit.split('/').length-1;
    var prefix = '';
    for(var i=0; i<arraySize; i++){
        var text = pathSplit.split('/')[i];
        prefix=prefix.concat(text)+'/';
    }
    return prefix;
}
var listObject = function(params, callback){
    s3.listObjects(params, function(err, data){
        params.Delete = {Objects:[]};
        if(err) console.log(err, err.stack);
        else{
            console.log('listing Object...');
            data.Contents.forEach(function(result){
                params.Delete.Objects.push({Key: result.Key});
            })
            delete params.Prefix;
            callback(params);
            return
        }
    });
}
var deleteObject = function(params){
    listObject(params, function(deleteParams){
        console.log(deleteParams);
        s3.deleteObjects(deleteParams, function(err, data){
            if (err) console.log(err, err.stack); // an error occurreddeleteObjcects 
            else console.log(data);           // successful response
            console.log('delete Object...');
        });
    });
}
exports.handler = function(event, context) {
    console.log('Received event:', JSON.stringify(event, null, 2));
    // Get the object from the event and show its content type
    var key = event.Records[0].s3.object.key;
    var s3Params_5m = {
        Bucket: '5m_media-transcoding', //output bucket name
        Prefix: prefix(key) + filename(key) + '_5M.' + key.split('.')[1] + '/' //S3 In/Output Object Prefix
    };
    var s3Params_2m = {
        Bucket: '2m_media-transcoding', //output bucket name
        Prefix: prefix(key) + filename(key) + '_2M.' + key.split('.')[1] + '/'
    };
 
    deleteObject(s3Params_5m);
    deleteObject(s3Params_2m);
 
    var etsParams_5m = {
        Input: {
        Key: key
        },
        PipelineId: 'xxx-4o47oe', // pipeline ID
        OutputKeyPrefix: prefix(key) + filename(key) + '_5m.' + key.split('.')[1] + '/',
        Outputs: [
            {
                Key: filename(key),
                PresetId: 'xxxxxx-97mimb',
                SegmentDuration: '10'
            }
        ],
        Playlists: [
            {
                Format: 'HLSv3',
                Name: 'playlist',
                OutputKeys: [
                filename(key)
                ]
            }
        ]
    };
    var etsParams_2m = {
        Input: {
        Key: key
        },
        PipelineId: 'xxx-4o47oe', // pipeline ID
        OutputKeyPrefix: prefix(key) + filename(key) + '_2m.' + key.split('.')[1] + '/',
        Outputs: [
            {
                Key: filename(key),
                PresetId:'xxxxxx-5nj36s', //default copy
                SegmentDuration: '10'
            }
        ],
        Playlists: [
            {
                Format: 'HLSv3',
                Name: 'playlist',
                OutputKeys: [
                filename(key)
                ]
            }
        ]
    };
 
 
    elastictranscoder.createJob(etsParams_5m, function(err, data) {
        if(err){
            console.log('transcoding_5m failed');
            console.log(err, err.stack); // an error occurred
            context.fail();
        }else{
            console.log('transcoding_5m succeed')
            context.succeed('transcoding_5m succeed');
        }
    });
    elastictranscoder.createJob(etsParams_2m, function(err, data) {
        if(err){
            console.log('transcoding_2m failed');
            console.log(err, err.stack); // an error occurred
            context.fail();
        }else{
            console.log('transcoding_2m succeed')
            context.succeed('transcoding_2m succeed');
        }
    });
};

##AWS Document Configuring the SDK

##Blog I described it on my blog(korean)
leedoing

About

Using AWS Lambda Service, Elastic Transcoder

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors