ウォッチフォルダ(「ドロップフォルダ」または「ホットフォルダ」とも呼ばれる)は、ファイルベースのワークフローを一括自動化するための迅速かつ簡単なツールです。メディアを定期的に同じフォーマットにトランスコードしている場合、RAWファイルをフォルダにドロップするだけで、トランスコードされたファイルがもう一方から出てくるのを見ることができます。これは、クライアントの承認用にメディアを準備したり、配信用に複数の配信フォーマットを生成したりする、ビデオのポストプロダクションワークフローでは一般的なステップです。
S3バケットにファイルをドロップすると、Zencoder APIを使ってトランスコード作業が開始され、その結果ファイルがS3に送り返される。この方法は、ワークフローの他のステップを自動化するためにさらに適応させることができる。例えば、トランスコードされたファイルに対して追加のアクションを実行する(プッシュ通知の生成やCDNへのファイルの移動など)。
もしあなたが開発者で、すでにAWSに慣れているのであれば、ステップ3のLambda関数に直接ジャンプするか、GitHubからサンプルコードを取得して、自分で立ち上げて実行するのがいいだろう。
なぜクラウドでトランスコードするのか?
Watch フォルダは、Adobe Media Encoder、Telestream、Sorenson Squeeze などの一般的なエンコーダでサポートされている。小規模なエンコーディングの場合、Sorenson や Adobe 製品のライセンスは費用対効果が低い可能性があります。また、大量のコンテンツを扱う場合、エンコーディングサーバーの設定やメンテナンスに費用と時間がかかる可能性があります。
私たちが使用するツール(Zencoder、S3、Lambda)は安価で、初期費用や最低利用期間もなく、使用ごとに課金されるため、私たちのウォッチフォルダーは小規模な負荷でも大規模な負荷でも費用対効果が高くなります。S3ストレージは$0.03/GB、Zencoderからのトランスコード出力は$0.05/分(大容量では$0.02と低い)なので、使用量を簡単に見積もることができます。出力ファイルはS3に書き込まれるので、すぐにウェブ配信が可能です。
どのように機能するのか?
watchフォルダはAmazon S3バケット内に置く。バケットにファイルをアップロードすると、Lambda関数がトリガーされ、エンコーディングジョブを作成するためにZencoder APIにリクエストを作成して送信する。ZencoderはS3からファイルを取得し、我々が定義する出力フォーマットにトランスコードし、トランスコードされたファイルをS3に戻す。そこからクライアントに配布したり、CloudFrontや他のCDN経由でエンドユーザーに直接配信することもできる。
前提条件
このチュートリアルでは、Amazon Web Services(AWS)のアカウントと Zencoderのアカウントが必要です。どちらのサービスも無料版で十分ですが、S3ストレージは5GBしかなく、Zencoderは出力を5秒に切り詰めます。
ステップ1: S3バケットをセットアップする
まず、S3にウォッチフォルダをセットアップする必要がある。まだS3バケットを設定していない場合は、AWSコンソールにログインし、S3サービスに移動する。Create Bucket "をクリックし、名前を付ける。バケット名はサービス全体で一意なので、あなたの名前や会社名のようなユニークな接頭辞を使うと便利だ。
これはZencoderのデフォルトリージョンと同じです。これにより、Zencoderがファイルを取得する際にS3の転送料が発生するのを防ぐことができます。異なるリージョンのバケットを使用する必要がある場合は、Zencoderのジョブに "region "パラメータを追加して、トランスコードが同じリージョンで実行されるようにすることができます。
S3バケットに2つのフォルダを作成し、1つはアップロードするファイル用、もう1つはZencoderがトランスコードされたファイルをアップロードするフォルダです。私は単純に inputs/
& outputs/
.
ステップ 2: ZencoderにS3バケットへのアクセス権を与える
ZencoderにS3バケットへのファイルの読み書きのアクセス権を与えるには、2つの方法があります。最も簡単な方法は、ZencoderのIAMユーザにバケットへのアクセスを許可するポリシーをS3バケットに追加することです。
S3バケットのプロパティペインで、パーミッションをクリックし、バケットポリシーを追加する。Zencoderのバケットポリシーを貼り付ける。 Githubリポジトリの両方のインスタンスを置き換える。 YOUR-BUCKET
を、ステップ1で指定した実際のバケツ名に置き換えてください。
Zencoder にバケットへのアクセスを許可するもうひとつの方法は IAMユーザー を持つ。 AmazonS3FullAccess
ポリシーを設定し(あるいはこのバケツに限定し)、そのユーザのアクセスキーIDとシークレットアクセスキーを 資格証明書セクション Zencoderアカウントの
ステップ 3: ラムダ関数の作成
AWSコンソールから、Lambdaサービスをクリックします。Create a Lambda Function(初めてLambdaを使う場合はGet Started)をクリックします。ブループリントのステップをスキップすると、Configure Function画面が表示されます。関数に名前を付け(例:"transcode Video")、ランタイムとしてPython 2.7を選択します。
を貼り付ける。 コード例 をラムダ関数のコードセクションに追加します。一番上のグローバルバーを編集する必要があります。 API\_KEY
あなたの ZencoderフルアクセスAPIキーを変更する。 INPUT\_FOLDER\_NAME
をS3で作成したwatchフォルダの名前と一致するように変更する。 S3\_OUTPUT\_BASE\_URL
を、出力ファイルを保存するバケツとフォルダ名に設定します。 NOTIFICATION\_EMAIL
を、Zencoderからの通知を受け取りたいメールアドレスに設定してください(通知を受け取りたくない場合は、Lambda関数の39行目を省略してください)。
のコードについて lambda\_function.py
-基本的には、S3にアップロードされたファイル名を取得し、それを出力ファイル名のベースとして使用している。出力ファイル名は api\_data
オブジェクトはZencoderに送られるジョブで、すべての出力とエンコーディングパラメータが定義されています。Zencoderはいくつかのテンプレートを提供しています。 リクエストビルダー.次に、Zencoder APIエンドポイントにジョブを送信し、レスポンスをログに記録します。
次に、Create New Roleの見出しでS3 Execution Roleを選択します。ブラウザのポップアップを有効にしておくと、新しいロールの名前を入力する画面が表示されるので、「Allow」をクリックする。このロールは、Lambda関数が実行される権限スキームを定義する。Lambdaの画面に戻ると、作成した新しいロールがRoleフィールドで選択されているはずだ。
タイムアウトを10秒にする。実際には、関数の実行に1500ms秒以上かかることはほとんどありませんが、APIのレスポンスが遅い場合に数秒余分に待つことができれば、関数はより弾力的になります。Lambdaは関数の実行時間100msごとに課金されるので、あまり高くは設定しない。Nextをクリックし、Create Functionをクリックする。Event Sourcesタブで、イベントソースを追加する。タイプとしてS3を選択し、ステップ1のS3バケットを選択し、Event typeをObject Created (All)に設定する。
Prefix]フィールドに、S3バケットに作成したウォッチフォルダの名前を入力する(例えば inputs/
).これにより、Lambda関数はバケツ内の他の場所ではなく、そのフォルダにファイルが追加されたときにのみトリガーされるようになり、最も重要なことは、出力ファイルが無限ループでエンコードジョブをさらにトリガーするのを防ぐことです。Enable event source にチェックを入れて送信します。
以上
ウォッチフォルダを持つS3バケットを用意し、ウォッチフォルダからファイル作成イベントを受け取るLambda関数を用意した。いくつかのメディアをウォッチフォルダにアップロードして、その動きを見てみましょう。
トラブルシューティングが必要な場合は、AWS CloudWatchのログをチェックして、Lambda関数への各呼び出しの詳細を確認します。Zencoder の Jobs ビューにも、各ジョブの詳細と、スローされた可能性のあるエラーの詳細が表示されます。