本文介绍了Node.js SDK,HLS数据加密的使用场景和使用限制,并提供了完整的代码示例。

使用场景

  • HLS标准数据加密适用于对视频进行保护的场景,可以防止非法下载和非法传播。
  • 如果对安全有强烈需求,请开启工作流中的数据加密。详情请参见阿里云私有加密

使用限制

  • HLS标准数据加密需要使用提交转码作业接口。
  • 工作流中不可使用HLS标准数据加密。

示例代码

const base64url = require('base64-url');
var RPCClient = require('@alicloud/pop-core').RPCClient;

var REGION = "cn-shanghai"; //按需配置
var ID = "<your ID>"; //AccessKey控制台获取,按需配置
var KEY = "<your key>"; //AccessKey控制台获取,按需配置
var LOCATION = "<oss-cn-shanghai>"; //按需配置,使用的MPS服务、OSS服务和PipelineId需要是同一个地域
var INPUT_BUCKET = "<your input_bucket>"; //按需配置
var OUTPUT_BUCKET = "<your output_bucket>"; //按需配置
var PIPELINE_ID = "<your pipelineid>"; //MPS控制台获取,按需配置

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

function DataEncryptionDemo() {
    return initMtsClient(ID, KEY, REGION);
}

function getInputFile() {
    var inputFile = {};
    inputFile.Location = LOCATION;
    inputFile.Bucket = INPUT_BUCKET;
    inputFile.Object = 'result.mp4';
    return inputFile;
}

function getOutputs() {
    var left = '[';
    var right = ']';
    var output = getOutput();
    var outputs = left.concat(JSON.stringify(output), right);
    return outputs;
}

function getOutput() {
    var output = {};
    output.OutputObject = "BaseTest/hls-encryption****.m3u8";
    output.TemplateId = "S00000001-100020";
    output.Encryption = JSON.stringify(getEncryptionConfigs());
    return output;
}

function getEncryptionConfigs() {
    var encryption = {};
    encryption.Type = "hls-aes-128";
    encryption.Key = base64url.encode("encryptionkey123");
    encryption.KeyUri = base64url.encode("http://example.aliyundoc.com/document/hls128****.key");
    encryption.KeyType = "Base64";
    return encryption;
}

function submitJobs() {
    inputFile = getInputFile();
    outputs = getOutputs();
    client = DataEncryptionDemo();
    client.request('SubmitJobs', {
        Input: JSON.stringify(inputFile),
        OutputLocation: LOCATION,
        OutputBucket: OUTPUT_BUCKET,
        Outputs: outputs,
        PipelineId: PIPELINE_ID,
        OutputLocation: LOCATION
    }).then(function (response) {
        console.log(JSON.stringify(response.JobResultList));
        console.log(response.JobResultList.JobResult[0].Job.JobId);
    }).catch(function (response) {
        console.log(JSON.stringify(response));
    })
}

submitJobs();