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でエンコードジョブを作成
- PHPでエンコードジョブを作成するためには「AWS SDK for PHP」を使用するために「Composer」でSDKをインストールします。
composer require aws/aws-sdk-php
- 準備で取得したエンコードのJSONファイルを配置しておきます。
- 次に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
]);
// ジョブを作成する
$result = $mediaConvert->create($jobRequests);
このコードを実行することで、エンコードジョブを作成することができます。
設定の詳細を変更する場合は、エクスポートしたJSONの設定から細かく設定する必要があります。
キーが多いため設定が難しいですが、そのあたりは設定しやすくしておくと今後のプロジェクトで設定しやすいです。
また作成したジョブのステータスを取得するためにIDを知る必要があるかと思います。
その場合には「create()」関数で返却された結果に対して「offsetGet(“Job”)」をすることで取得出来ます。
// 作成されたJob情報を取得
$jobs = $result->offsetGet("Job");
$jobId = $jobs["Id"]; // ジョブIdを取得する
3. ステータスを取得する
上記でジョブを作成後にジョブが完了しているかどうか、ステータスを確認したい場合は上記のジョブIdから以下のように確認することが出来ます。
// 指定したジョブIdのジョブ情報を取得する
$result = $mediaConvert->getJob([
"Id" => $jobId,
]);
// ジョブの情報を取得する
$jobs = $result->offsetGet("Job");
// ステータスを取得
$jobStatus = $jobs["Status"];
ステータスは文字列で返却され例えば完了した場合には「COMPLETE」となります。
ステータスを下に判定する場合には各ステータスの文字列を確認するとよいでしょう。