すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo Media Processing:HLS 暗号化ワークフローの作成

最終更新日:Jan 12, 2025

このトピックでは、ApsaraVideo Media Processing(MPS)SDK for Python を使用して HTTP-Live-Streaming(HLS)暗号化ワークフローを作成するためのサンプルコードを提供します。

背景情報

サンプルコードでは、SDK を介して API 操作が呼び出されます。 HLS 暗号化ワークフローの作成から暗号化ビデオの再生までの手順全体については、HSL 暗号化を実行して暗号化ビデオを再生するにはどうすればよいですか?をご参照ください。 MPS SDK for Python のインストール方法については、MPS SDK for Python のインストールをご参照ください。

サンプルコード

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';

/**
  
 * Python 用 Alibaba Cloud SDK をインストールします。 npm install @alicloud/pop-core --save
 * Alibaba Cloud SDK Credentials パッケージをインストールします。 npm install @alicloud/credentials
 * Python 用 MPS SDK をインストールします。 npm install --save @alicloud/mts20140618
 * 
 */
/** MPS キューの ID。 MPS コンソールにログインして ID を表示できます。 */
var pipelineId = "d7cedd984be7dd63395c*****"; 
/** トランスコーディングテンプレートの ID。 出力ファイルは M3U8 形式です。 ビジネス要件に基づいてテンプレートを選択します。 */
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";
/** 復号化の実際のエンドポイントに置き換えます。 */
var hlsKeyUri = "http://example.aliyundoc.com/decryption";
var actStart = "Act-Start";
var actEncryption = "Act-HLS-Encryption";
var actReport = "Act-Report";

export default class Client {

/** SDK クライアントを初期化します。 */
static async createClient(accessKeyId: string, accessKeySecret: string, regionId: string): Promise<mts20140618> {
    let config = new $OpenApi.Config({ });
    config.accessKeyId = accessKeyId;
    config.accessKeySecret = accessKeySecret;
    /** MPS サービスがデプロイされているリージョンの ID。 */
    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;
}