このページでは、Transcoder API の機能、用語、有用なコンセプトなど、技術面の概要について説明します。Transcoder API には REST と RPC API が実装されているため、ユーザーは Google Cloud でコード変換ジョブを送信、モニタリング、管理できます。Transcoder API を使用してジョブを送信するには、まずメディア アセットを Cloud Storage にアップロードします。Transcoder API は、ジョブを処理すると、生成されたメディアを Cloud Storage に戻して保存します。
機能
Transcoder API は、次の機能をサポートしています。
- さまざまなコンテナ形式の出力: MPEG-4(MP4)、Dynamic Adaptive Streaming over HTTP(DASH、MPEG-DASH とも呼ばれます)、HTTP Live Streaming(HLS)
- 音声のみの出力など、さまざまなビットレートと解像度での出力
- ハイ ダイナミック レンジ(HDR)形式への変換
- プログラムによる動画出力の補正。
- 低レベル エンコード パラメータ(ビットレートなど)の構成
- 包括的な編集リストを使用した既存のメディア コンテンツのリミックス
- ジョブモードを低レイテンシのインタラクティブモードまたはバッチモードに設定する
- オーディオの音量の正常化を指定
- 出力動画の暗号化を設定して、デジタル著作権管理とコンテンツ保護をサポートします。
- 広告キーフレームを挿入して、動画プレーヤー クライアントで広告を挿入できるようにする
- 生成された動画フレームのスプライトシートからのサムネイル作成
- コード変換ジョブのカスタム構成や複合構成を保存、再利用するジョブ テンプレートの作成
MP4 と MPEG-DASH 標準についての詳細は、Moving Picture Experts Group のウェブサイトをご覧ください。HLS 標準の詳細については、HTTP Live Streamingをご覧ください。
コンテンツ暗号化でサポートされているコンテナ
次の表に、コンテンツの暗号化でサポートされているコンテナを示します。
ストリーミング プロトコル | コンテナ | DRM システム | 暗号化スキーム |
---|---|---|---|
HLS | TS | ClearKey | AES-128 |
HLS | TS | FairPlay | SAMPLE-AES |
HLS | fMP4 | FairPlay | mpegCenc cbcs のみ |
MPEG-DASH | fMP4 | Widevine | mpegCenc cenc または cbcs |
MPEG-DASH | fMP4 | PlayReady | mpegCenc cenc または cbcs |
アクセス制御
Transcoder API のアクセス制御モデルは、Google の Identity and Access Management に基づいています。IAM のきめ細かい権限により、メディアデータを使って誰が何を行えるかを制御できます。
上限
次の表に、コード変換ジョブあたりの上限を示します。
ジョブの上限 | |
---|---|
入力の最大幅 | 4096 px |
入力の最大高 | 4096 px |
出力の最大幅 | 4096 px |
出力の最大高 | 2160 px |
出力の合計サイズ | 400 GB |
最大 EditList 期間 | 24 時間 |
動画ストリームの最大数 | 70 |
音声ストリームの最大数 | 50 |
テキスト ストリームの最大数 | 50 |
mux ストリームの最大数 | 100 |
マニフェストの最大数 | 100 |
スプライトシートの最大数 | 10 |
コンセプト
このセクションでは、動画ファイルに関する重要なコンセプトと、Transcoder API でそれらを使用する方法について説明します。
動画ファイルのコンポーネント
各動画ファイルにはコンテナがあります。これは、ファイル全体のラッパーです。 Transcoder API は MuxStreams を使用してコンテナを定義します。各コンテナには、ElementaryStreams のセットがあり、ファイルの動画、音声、字幕のテキスト トラックのエンコードが定義されます。動画と音声はコーデックを使用して圧縮されます。
次の例では、H.264 で動画が圧縮され、AAC で音声が圧縮されます。どちらも MP4 コンテナに配置されます。
図1 動画ファイル(左)と MP4 ファイルの例(右)のコンポーネント。
ストリーミング プロトコルの構造
ストリーミング メディアの場合、コンテンツ プロバイダは複数のコンテンツを同じビットレート(1 秒あたりのキロビット数で測定)でエンコードします。プロバイダは、ビットレートが異なるファイルを指すマニフェスト ファイルを生成します。ストリーミング メディア プレーヤーはマニフェスト ファイルを使用して適切なファイルを選択し、一度に数秒ごとに動画を pull します。プレーヤーでサポートされている内容に応じて、各ビットレートが 1 つのファイル、または複数の短いファイルになります。
通常、メディアの異なる解像度は、さまざまなビットレートをターゲットとするようにエンコードされます。たとえば、低いビットレートは高解像度(HD)ではなく標準解像度(SD)でエンコードされます。ビットレート、解像度、コーデックのセットは、適応ビットレート(ABR)のラダーと呼ばれます。ストリーミング コンテンツ プロバイダは、CDN の費用、ユーザー デバイスの種類、リージョン内の帯域幅などの要因に基づいて独自のラダーを調整できます。
図 2 ストリーミング プロトコル構造のコンポーネント(上)と HTTP Live Streaming(HLS)実装の例(下)。
用語
このセクションでは、Transcoder API の操作で使用される用語について説明します。
アドブレーク
アドブレークとは、メディアの再生の前または途中に表示される短い広告のことです。Transcoder API では、ジョブ構成でアドブレーク キーフレームをサポートしています。Transcoder API は広告の挿入や再生を行わず、メディア再生を停止します。キーフレームの処理は、動画プレーヤー クライアントが行います。
Atom
atom とは、動画のメタデータと場所を定義する基本的なデータ構造のことです。動画は、音声 atom、編集 atom、テキスト atom など、さまざまなタイプの atom が複合的に多重化された階層構造をもっています。
オーディオ atom
オーディオ atom は、音声をエレメンタリ ストリームから編集リストにマッピングします。
コーデック タイプとプロファイル
動画ストリームのコーデックを選択する際は、H.264 などのコーデック タイプと、デフォルトの high
プロファイルなどのプロファイルを指定します。
コンテナ
コンテナとは、メディア ファイルやメタデータなど、多重化ストリーム内の各種コンポーネント間の関係を記述するラッパーのことです。Transcoder API では、MP4、MPEG-DASH、HLS コンテナ形式をサポートしています。
編集 atom
編集 atom は、編集リストで結合するストリームの個々のセグメントの開始と終了のオフセットを定めます。
リストを編集
編集リストは、コード変換ジョブから作成されたファイルやマニフェストのタイムラインとして、一連の編集を規定します。
エレメンタリ ストリーム
エレメンタリ ストリームは、入力ファイル(音声、動画、字幕テキスト トラックなど)のエンコードです。ストリームを異なる出力形式にマッピングして共有する前に、エレメンタリ ストリームをパッケージ化する必要があります。
エントロピー エンコード
エントロピー エンコードとは、Transcoder API がサポートするロスレス圧縮の一形式です。ジョブを構成する際は、コンテキスト適応型可変長符号(CAVLC)か、コンテキスト適応型バイナリ算術符号(CABAC)のエントロピー コーデックを指定できます。
ジョブ
ジョブは、Transcoder API による作業を管理するための基本単位です。ジョブを Transcoder API に送信すると、ジョブはリージョンと呼ばれる地理的なロケーションで非同期的に処理されます。リージョン内のすべてのジョブを一覧表示して管理できます。
ジョブのライフサイクルには、準備、コード変換、パッケージ化の 3 つのステップがあります。
- 準備
- Cloud Storage から入力をダウンロードする
- 入力を分析する
- 入力を検証する
- コード変換
- 入力でコード変換オペレーションを実行する
- パッケージ化
- 入力を合成する
- 入力を多重化する
- 出力を Cloud Storage にアップロードする
ジョブの状態は更新されます。サービスは error
フィールドを使用してエラーを報告します。
ジョブ構成
ジョブ構成は、ジョブを作成して Transcoder API に送信するときにカスタマイズできるさまざまな設定を示します。編集リストや、出力マニフェストの広告ブレークタグを挿入する場所などの構成設定を指定できます。Google Cloud リージョンで使用するジョブ テンプレートとして、再利用可能なジョブ構成を作成できます。
ジョブモード
Transcoder API は、インタラクティブとバッチの 2 つのジョブモードをサポートしています。
インタラクティブ モードがデフォルトのジョブモードです。このモードは、ジョブの処理をできるだけ早く開始する場合や、最初に実行するジョブをより詳細に制御するために使用します。このモードでは、同時実行ジョブ数の割り当てによって、同時に実行されるジョブの数が制御されます。この割り当てに達すると、開始しようとしたジョブはすべて拒否されます。
バッチモードは、デフォルトのインタラクティブ モードで送信されるジョブほど処理のレイテンシが重要ではないジョブを多数送信する場合に使用します。このモードでは、ジョブのジョブ処理の優先値を指定できます。同じ優先値を持つバッチモードで送信されたジョブは、先入れ先出しのキューに配置され、実行待ちの間のジョブ状態が PENDING
になります。このモードでは、
バッチ保留中のジョブ数の割り当て
によって、キューに格納されるジョブの数が制御されます。この割り当てに達すると、開始しようとしたジョブはすべて拒否されます。ジョブが実行されると、RUNNING
状態に移行します。バッチの同時実行ジョブ数の割り当ては、同時に実行されるジョブの数を制御します。
両方のモードを同時に使用できます。一方のモードが他方よりも優先されることはありません。ジョブモードの設定の詳細については、バッチモードでのジョブの作成をご覧ください。
ジョブ テンプレート
デフォルトで、Transcoder API は、ジョブ構成を作成するために preset/web-hd
というプリセット テンプレートを適用します。このジョブ構成では、次の出力ファイルが生成されます。
manifest.m3u8
: HLS メディア ストリームのメインの再生リスト。このファイルには、出力の高解像度(HD)バリアントと出力の標準解像度(SD)バリアントの再生リストへの参照が含まれています。media-hd.m3u8
: 高解像度バリアントの再生リストmedia-hd0000000000.ts
: 高解像度の動画セグメント ファイル
media-sd.m3u8
: 標準解像度のバリアントのプレイリストmedia-sd0000000000.ts
: 標準解像度の動画セグメント ファイル
manifest.mpd
: MPEG-DASH メディア ストリームの再生リスト。このファイルには、動画のみと音声のみのセグメント ファイルへの参照が含まれています。audio-only0000000000.m4s
: 音声のみのセグメント ファイルvideo-only-hd0000000000.m4s
: 高解像度の動画のみのセグメント ファイルvideo-only-sd0000000000.m4s
: 標準解像度の動画のみのセグメント ファイル
sd.mp4
: スタンドアロンの標準解像度の動画ファイルhd.mp4
: スタンドアロンの高解像度の動画ファイル
独自のカスタム ジョブ テンプレートを作成して管理し、ジョブの作成時に指定できます。
前処理
前処理は、メインのコード変換の前に実行されるジョブのステージです。
前処理の構成
前処理の構成は、ジョブのコード変換ステージの前に動画に適用できる設定を表します。クロッピングやパディングは、この構成の一部として適用できます。
レート コントロール モード
レート コントロール モードは、CRF(Constant Rate Factor)モードまたは可変ビットレート(VBR)モードのどちらを使用してジョブを処理するかを示します。CRF は、処理されるメディア アセット全体にわたって一定の品質を確保します。VBR は、エンコード プロセスを最適化して、処理されるメディア アセットのファイルサイズを削減します。ストリーミング用途の場合は、VBR レート コントロール モードを選択します。アーカイブ用には、CRF レート コントロール モードを選択します。
マニフェスト
マニフェストとは、クライアントへのアダプティブ メディア ストリームで利用可能なコンテンツとメタデータを記述したものです。Transcoder API では、ファイル名、多重化されたストリームの一覧、マニフェストのタイプ(HLS または MPEG-DASH のいずれか)でマニフェストを出力するようにジョブを構成できます。
テキスト atom
テキスト atom は、エレメンタリ ストリームのテキストを編集リストにマッピングします。
テキスト ストリーム
テキスト ストリームは、クローズド キャプションや字幕など、動画に関連付けられたテキストデータをエンコードします。
次のステップ
- クイックスタートを試す。
- 特定の Transcoder API タスクを実施する方法を学習する。