PHP

[PHP]「AWS Elemental MediaConvert」のエンコードジョブを作成する

PHPの案件で「AWS Elemental MediaConvert」を使用してエンコードジョブを作成することになりました。
流れとしては以前ご紹介した「Amazon S3」にファイルをアップロードして、そのファイルを「AWS Elemental MediaConvert」でエンコードするようになります。
またS3のバケットはアップロード専用とエンコードしたファイルを保存するための2つのバケットを作成します。
構成図としては以下のようになります。

1. 準備

まずは「Amazon S3」にアップロードで保存する用のバケットを作成と、エンコードしたファイルを保存して公開するためのバケットを作成します。

次に「AWS Elemental MediaConvert」のジョブを作成するための設定を行います。
AWSのコンソール画面の「MediaConvert」を選択して画面を表示して「今すぐ始める」をクリックします。

左メニューの「AWS の統合」を選択して「サービスロールの制御」で「新しいサービスロールを作成し、アクセス許可を設定」をクリックします。
S3 の入力場所」に保存するS3のバケットを選択します。
S3 の出力場所」にエンコードしたファイルを保存するS3のバケットを選択します。
他の設定はデフォルトのままにしておきます。(必要に応じて設定を変更してください)

まずは1回ジョブを作成して、エンコードが正常に行われるか確認します。

保存するS3に任意の動画ファイルをアップロードしておきます。

次に「Elemental MediaConvert」の画面を開き、ジョブの「入力」に保存した動画ファイルを選択します。
細かい設定は要件に合わせた設定をしておきます。

出力グループ」の「追加」を押下して要件に合わせた設定をします。

設定をそれぞれ入力したら「作成」を押下してジョブの作成を行います。

エンコードに成功したら「ジョブ」の一覧にエンコードしたジョブが表示されますので、エンコードしたジョブを選択します。

ジョブの画面から「詳細」ボタンを押下します。

詳細画面で「JSONのエクスポート」ボタンを押下してエクスポートしたJSONを取得します。
このエクスポートしたJSONの設定をもとにPHPでエンコードジョブを作成します。

またIAMにおいて「AWSElementalMediaConvertFullAccess」の許可したユーザーを作成し、
アクセスキーとシークレットキーを取得しておきます。

2. PHPでエンコードジョブを作成

  1. PHPでエンコードジョブを作成するためには「AWS SDK for PHP」を使用するために「Composer」でSDKをインストールします。
composer require aws/aws-sdk-php
  1. 準備で取得したエンコードのJSONファイルを配置しておきます。
  2. 次にPHPでエンコードジョブを作成するためのコードを記述します。
<?php
require 'vendor/autoload.php';

use Aws\MediaConvert\MediaConvertClient;
use Aws\Credentials\Credentials;

// 
$fileName = "S3にアップロードしているファイル名";


// エンコードジョブの設定
$jobSettings = json_decode(file_get_contents("ジョブJSONのパス"), true);

// インプットとアウトプットの設定を変更
$jobRequests["Settings"]["Inputs"][0]["FileInput"] = "s3://保存先のS3バケット名/" . $fileName;
$jobRequests["Settings"]["OutputGroups"][0]["OutputGroupSettings"]["HlsGroupSettings"]["Destination"] = "s3://公開先のS3バケット名/" . $dateTime . "/";


// AWS Elemental MediaConvertの設定
$credentials = new Credentials('アクセスキーID', 'シークレットアクセスキー');
$mediaConvert = new MediaConvertClient([
    'version' => '2017-08-29',
    'region' => 'ap-northeast-1',
    'credentials' => $credentials
]);


// ジョブを作成する
$mediaConvert->create($jobRequests);

このコードを実行することで、エンコードジョブを作成することができます。
設定の詳細を変更する場合は、エクスポートしたJSONの設定から細かく設定する必要があります。
キーが多いため設定が難しいですが、そのあたりは設定しやすくしておくと今後のプロジェクトで設定しやすいです。