文档

新增媒体工作流

更新时间:

如果需要制作多码率、多音轨、多字幕或多格式等类型视频,或希望预先编排好一系列任务流程,然后按照编排好的环节和条件依次执行任务,您可以创建工作流并在工作流中设置转码、分析、截图、打包(封装)、审核、提取视频DNA、设置智能封面等任务节点。本文介绍媒体处理PHP SDK新增媒体工作流的示例代码。

示例代码

<?php
require_once './aliyun-php-sdk-core/Config.php'; 
use Mts\Request\V20140618 as Mts;

$pipelineId = 'd7cedd984be7dd63395c****';   #管道ID  可在控制台查看
$templateId = "S00000001-100020"; #转码模板ID,m3u8模板,按需配置
$ossLocation = 'oss-cn-shanghai';
$inputBucket = '<input bucket name>';
$inputPath  = "<input path>"; 
$outputBucket = "<output bucket name>";
$actStart = "Act-Start";
$actTransCode = "Act-TransCode";
$actReport = "Act-Report";

function initMtsClient($accessKeyId, $accessKeySecret) {
    $regionId = 'cn-shanghai';  // 服务接入区域
    $profile = DefaultProfile::getProfile($regionId, $accessKeyId, $accessKeySecret);
    return new DefaultAcsClient($profile);
}

function createTransCodeWorkflow($client) {
    $request = new Mts\AddMediaWorkflowRequest();
    $request->setName("转码工作流");
    $request->setTopology(buildWorkflowTopology());
    return $client->getAcsResponse($request);
}

try {
    $client = initMtsClient(getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'));
    $response = createTransCodeWorkflow($client);
    print_r($response);
} catch (Exception $e) {
    print $e->getMessage()."\n";
}

function buildWorkflowTopology() {
    $activities = buildActivities();
    $dependencies = buildDependencies();
    $workflow = array(
                      "Activities" => $activities,
                      "Dependencies" => $dependencies
                     );
    echo json_encode($workflow)."\n";
    return json_encode($workflow);
}

function buildActivities() {
    global $actStart;
    global $actTransCode;
    global $actReport;
    $activities = [
        $actStart => buildStartActivity(),
        $actTransCode => buildTranscodeActivity(),
        $actReport => buildReportActivity()
    ];
    return $activities;
}

function buildStartActivity() {
    global $actStart;
    $startActivity = array(
        "Name" => $actStart,
        "Type" => "Start",
        "Parameters" => buildStartParameters()
    );
    return $startActivity;
}

function buildStartParameters() {
    global $pipelineId;
    $startParameters = array(
        "PipelineId" => $pipelineId,
        "InputFile" => buildInputFile()
    );
    return $startParameters;
}

function buildInputFile() {
    global $inputBucket;
    global $ossLocation;
    global $inputPath;
    $inputFile = array(
        "Bucket" => $inputBucket,
        "Location" => $ossLocation,
        "ObjectPrefix" => $inputPath
    );
    return $inputFile;
}

function buildTranscodeActivity() {
    global $actTransCode;
    $transcodeParameters = array(
        "Name" => $actTransCode,
        "Type" => "Transcode",
        "Parameters" => buildTranscodeParameters()
    );
    return $transcodeParameters;
}

function buildTranscodeParameters() {
    global $inputBucket;
    global $ossLocation;
    $transcodeParameters = array(
        "OutputBucket" => $outputBucket,
        "OutputLocation" => $ossLocation,
        "Outputs" => buildOutputsConfig()
    );
    return $transcodeParameters;
}

function buildOutputsConfig() {
    global $actTransCode;
    global $templateId;
    $output = array(
        "ObjectRegex" => $actTransCode."/{RunId}/{FileName}",
        "TemplateId" => $templateId
    );
    $outputs = array($output);
    return $outputs;
}

function buildReportActivity() {
    global $actReport;
    $reportActivity = array(
        "Name" => $actReport,
        "Parameters" => (object)[],
        "Type" => "Report"
    );
    return $reportActivity;
}

function buildDependencies() {
    global $actTransCode;
    global $actReport;
    global $actStart;
    $subActivityOfStart = array(
        $actTransCode
    );
    $subActivityOfTranscode = array(
        $actReport
    );
    $dependencies = array(
        $actStart => $subActivityOfStart,
        $actTransCode => $subActivityOfTranscode,
        $actReport => []
    );
    return $dependencies;
}

相关文档

  • 本页导读 (1)
文档反馈