本文提供了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); });