本文提供了Node.js SDK,新增媒体工作流的示例代码及说明。

示例代码

您可以对媒体处理服务提供的活动(例如:转码、截图等活动)进行组装,拓扑结构如下。

  • Topology类(拓扑结构)
    class Topology {
        constructor(activities, dependencies) {
            this.Activities=activities;
            this.Dependencies=dependencies;
        }
    }
  • ActivityType枚举类(活动类型)
    const ActivityType = {
         Start ='Start', 
         Transcode='Transcode', 
         Snapshot='Snapshot',
         MediaInfo='MediaInfo', 
         Analysis='Analysis', 
         Cover='Cover', 
         Summary='Summary',
         Censor='Censor', 
         Report='Report', 
         UploadVerify='UploadVerify',
         GenerateMasterPlayList='GenerateMasterPlayList',
         AudioGroup='AudioGroup', 
         SubtitleGroup='SubtitleGroup', 
         PackageConfig='PackageConfig'
    }
    Object.freeze(ActivityType);
  • Activity类(活动)
    class Activity{
        constructor(type, parameters)
        {
            this.type=type;
        this.parameters=parameters;
        }
    }
  • AddMediaWorkflow类(添加媒体工作流)
    var RPCClient = require('@alicloud/pop-core').RPCClient;
    
    function initMtsClient(accessKeyId, accessKeySecret, regionId) {
        var client = new RPCClient({
            accessKeyId: accessKeyId,
            accessKeySecret: accessKeySecret,
            endpoint: 'http://mts.' + regionId + '.aliyuncs.com',
            apiVersion: '2014-06-18'
        });
        return client;
    }
    
    class Topology {
        constructor(activities, dependencies) {
            this.Activities = activities;
            this.Dependencies = dependencies;
        }
    }
    
    const ActivityType = {
        Start: 'Start',
        Transcode: 'Transcode',
        Snapshot: 'Snapshot',
        MediaInfo: 'MediaInfo',
        Analysis: 'Analysis',
        Cover: 'Cover',
        Summary: 'Summary',
        Censor: 'Censor',
        Report: 'Report',
        UploadVerify: 'UploadVerify',
        GenerateMasterPlayList: 'GenerateMasterPlayList',
        AudioGroup: 'AudioGroup',
        SubtitleGroup: 'SubtitleGroup',
        PackageConfig: 'PackageConfig'
    }
    Object.freeze(ActivityType);
    
    class Activity {
        constructor(type, parameters) {
            this.type = type;
            this.parameters = parameters;
        }
    }
    
    var REGION = "xxx";
    var OSS_REGION = "xxx";
    var mtsEndpoint = "mts." + REGION + ".aliyuncs.com";
    //Step 2.set accesskey & keySecret
    var accessKeyId = "xxx";
    var accessKeySecret = "xxx";
    //Step 3.set mps transcoding queue id
    var PIPELINE_ID = "xxx";
    
    
    var client = initMtsClient(accessKeyId, accessKeySecret, REGION);
    var topology = new Topology();
    
    let activities = {};
    var startNode = new Activity();
    startNode.Type = ActivityType.Start;
    let startNodeParameters = {};
    var inputFile = {};
    inputFile.Bucket = "ice-auto-test-bj";
    inputFile.Location = OSS_REGION;
    inputFile.ObjectPrefix = "media/";
    startNodeParameters.InputFile = JSON.stringify(inputFile);
    startNodeParameters.PipelineId = PIPELINE_ID;
    startNode.Parameters = startNodeParameters;
    activities.startNode = startNode;
    var transcode = new Activity();
    transcode.Type = ActivityType.Transcode;
    let transcodingParameters = {};
    var outputs = new Array();
    var output = {};
    output.OutputObject = encodeURIComponent('transcode/dir/resultOfWorkFlow.mp4');
    output.TemplateId = "S00000001-000070";
    outputs.push(output);
    transcodingParameters.Outputs = JSON.stringify(outputs);
    transcodingParameters.OutputBucket = "ice-auto-test-bj";
    transcodingParameters.OutputLocation = OSS_REGION;
    transcode.Parameters = transcodingParameters;
    activities.transcodingNode = transcode;
    var report = new Activity();
    report.Type = ActivityType.Report;
    let reportParameters = {};
    report.Parameters = reportParameters;
    activities.reportNode = report;
    topology.Activities = activities;
    let dependencies = {};
    dependencies.startNode = ["transcodingNode"];
    dependencies.transcodingNode = ["reportNode"];
    dependencies.reportNode = [];
    topology.Dependencies = dependencies;
    
    
    client.request('AddMediaWorkflow', {
        Name: "Sequential-workflow1",
        Topology: JSON.stringify(topology),
    }, {}).then(function (response) {
        console.log('success');
        console.log(JSON.stringify(response));
    }).catch(function (response) {
        console.log(response.name);
        console.log(response.data.Code);
        console.log(response.data.Message);
    });