All Products
Search
Document Center

ApsaraVideo Media Processing:Create a workflow for HLS encryption

Last Updated:Aug 28, 2023

This topic provides the sample code for using ApsaraVideo Media Processing (MPS) SDK for Python to create a workflow for HTTP-Live-Streaming (HLS) encryption.

Background information

In the sample code, an API operation is called through the SDK. For more information about the complete procedure from creating a workflow for HLS encryption to playing an encrypted video, see How do I perform HSL encryption and play an encrypted video? For more information about how to install MPS SDK for Python, see Install MPS SDK for Python.

Sample code

import Console from '@alicloud/tea-console';
import OpenApi, * as $OpenApi from '@alicloud/openapi-client';
import Env from '@alicloud/darabonba-env';
import Util from '@alicloud/tea-util';
import mts20140618, * as $mts20140618 from '@alicloud/mts20140618';
import * as $tea from '@alicloud/tea-typescript';

/**
  
 * Install Alibaba Cloud SDK for Python. npm install @alicloud/pop-core --save
 * Install the Alibaba Cloud SDK Credentials package.   npm install @alicloud/credentials
 * Install MPS SDK for Python. npm install --save @alicloud/mts20140618
 * 
 */
/** The ID of the MPS queue. You can log on to the MPS console to view the ID. */
var pipelineId = "d7cedd984be7dd63395c*****"; 
/** The ID of the transcoding template. The output file is in the M3U8 format. Select a template based on your business requirements. */
var templateId = "S00000001-100020"; 
var ossLocation = "oss-cn-shanghai";
var inputBucket = "<input bucket name>";
var inputPath = "<input path>";
var outputBucket = "<output bucket name>";
var encryptionType = "hls-aes-128";
/** Replace with the actual endpoint of the decryption. */
var hlsKeyUri = "http://example.aliyundoc.com/decryption";
var actStart = "Act-Start";
var actEncryption = "Act-HLS-Encryption";
var actReport = "Act-Report";

export default class Client {

/** Initialize the SDK client. */
static async createClient(accessKeyId: string, accessKeySecret: string, regionId: string): Promise<mts20140618> {
    let config = new $OpenApi.Config({ });
    config.accessKeyId = accessKeyId;
    config.accessKeySecret = accessKeySecret;
    /** The ID of the region in which your MPS service is deployed. */
    config.regionId = "cn-shanghai";
    return new mts20140618(config);
}

static async main(args: string[]): Promise<void> {
    let client = await Client.createClient(Env.getEnv("ALIBABA_CLOUD_ACCESS_KEY_ID"), Env.getEnv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), args[0]);

    let request = new $mts20140618.AddMediaWorkflowRequest({
        name: "HLSWorkFlow",
        topology: JSON.stringify(createWorkflow())
    });
    let response = await client.addMediaWorkflow(request);
    Console.log(Util.toJSONString($tea.toMap(response)));
}
}

Client.main(process.argv.slice(2));

function createWorkflow() {
    var workflow:any = {};
    var activities:any = {};
    activities[actStart] = createStartActivity();
    activities[actEncryption] = createTrancodeActivity();
    activities[actReport] = createReportActivity();
    workflow.Activities = activities;
    workflow.Dependencies = createDependencies();
    return workflow;
}

function createStartActivity() {
    var startActivity:any = {};
    startActivity.Name = actStart;
    startActivity.Type = "Start";
    startActivity.Parameters = buildStartParameters();
    return startActivity;
}

function buildStartParameters() {
    var parameters:any = {};
    parameters.PipelineId = pipelineId;
    parameters.InputFile = buildInputFile();
    return parameters;
}

function buildInputFile() {
    var inputFile:any = {};
    inputFile.Bucket = inputBucket;
    inputFile.Location = ossLocation;
    inputFile.ObjectPrefix = inputPath;
    return inputFile;
};

function createTrancodeActivity() {
    var transcodeActivity:any = {};
    transcodeActivity.Name = actEncryption;
    transcodeActivity.Type = "Transcode";
    transcodeActivity.Parameters = buildTranscodeParameters();
    return transcodeActivity;
}

function buildTranscodeParameters() {
    var transcodeParamters:any = {};
    transcodeParamters.OutputBucket = outputBucket;
    transcodeParamters.OutputLocation = ossLocation;
    transcodeParamters.Outputs = buildOutputsConfig();
    return transcodeParamters;
}

function buildOutputsConfig() {
    var output:any = {};
    output.ObjectRegex = actEncryption.concat('/{RunId}/{FileName}');
    output.TemplateId = templateId;
    output.Encryption = buildEncryption();
    var outputs = new Array();
    outputs.push(output);
    outputs = JSON.parse(JSON.stringify(outputs));
    return outputs;
}

function buildEncryption() {
    var encryption:any = {};
    encryption.Type = encryptionType;
    encryption.KeyUri = hlsKeyUri;
    // console.log("here is "+ JSON.stringify(encryption));
    return encryption;
}

function createReportActivity() {
    var reportActivity:any = {};
    reportActivity.Name = actReport;
    reportActivity.Parameters = {};
    reportActivity.Type = "Report";
    return reportActivity;
}

function createDependencies() {
    var dependencies = {};
    var subActivityOfStart = new Array();
    subActivityOfStart.push(actEncryption);
    subActivityOfStart = JSON.parse(JSON.stringify(subActivityOfStart));
    dependencies[actStart] = subActivityOfStart;
    var subActivityOfTranscode = new Array();
    subActivityOfTranscode.push(actReport);
    subActivityOfTranscode = JSON.parse(JSON.stringify(subActivityOfTranscode));
    dependencies[actEncryption] = subActivityOfTranscode;
    dependencies[actReport] = JSON.parse(JSON.stringify(new Array()));
    return dependencies;
}