メディア形式の概要については、ExoPlayer のサポート対象形式のページをご覧ください。Transformer では、ストリームの読み込み、抽出、デコードに関する同じ制限が適用されますが、Transformer は ExoPlayer のバンドルされたソフトウェア デコーダ モジュールをサポートしていません。
Transformer はエンコードにも MediaCodec を使用しており、出力メディア ファイルを多重化(mux)する必要があるため、サポートされる出力形式が制限されます。エンコードの制限について詳しくは MediaCodec 動画コーデックを、出力メディア コンテナに適用される制限について詳しくは MediaMuxer をご覧ください。Transformer は MP4 ファイルのみを出力します。
デフォルトでは、Transformer は MediaMuxer を使用しますが、進行中の InAppMuxer をオプションで使用して、参照フレーム構造とサポートされているサンプル形式に関する MediaMuxer の制限の一部を回避できます。今後のリリースでは、デフォルトの muxer がアプリ内 muxer になります。
画像のサポート
Transformer は BitmapFactory を使用してすべての画像アセットを読み込んでデコードするため、Transformer は BitmapFactory がサポートするすべての形式をサポートします。サポートされているイメージ タイプについては、イメージのサポートをご覧ください。マルチ画像形式(GIF など)の場合、DefaultAssetLoaderFactory が使用されていると、コンテナから 1 つの画像フレームが表示されます。
特殊な形式
Transformer は、従来の形式と比較して特別な機能を提供する新しいメディア形式での入力を処理することをサポートしています。
HDR 動画の処理
HDR 動画のキャプチャをサポートするデバイスが増えており、より鮮やかで正確な色と、より広い輝度範囲を実現しています。
Transformer は、必要なエンコード サポートを備えたデバイスで、Android 13(API レベル 33)以降の HDR 動画の編集をサポートしています。HDR 動画を編集する場合、GL 動画エフェクトは 16 ビット浮動小数点の色成分と BT.2020 色空間を処理する必要があります。Composition をビルドする場合、HDR_MODE_KEEP_HDR がデフォルトのモードです。HDR 編集がサポートされていない場合、Transformer はフォールバックして HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL を使用します。
HDR から SDR への変換(トーンマッピングとも呼ばれます)は、必要なデコードと OpenGL のサポートを備えたデバイスで、Android 10(API レベル 29)以降でサポートされています。これは、HDR コンテンツの取り込みをサポートしていない他のアプリやサービスに HDR メディアを共有する場合に便利です。OpenGL を使用してトーンマッピングを有効にするには、Composition の作成時に setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) を呼び出します。Android 12(API レベル 31)以降では、MediaCodec は、HDR 動画をキャプチャできる Android 13 以降を搭載したすべてのデバイスを含む、一部のデバイスでのトーンマッピングもサポートしています。MediaCodec を使用してトーンマッピングを有効にするには、setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC) を呼び出します。
スローモーション メディアの処理
スローモーション動画には、ストリームの各セクションを再生する速度を示すメタデータが含まれています。フラット化とは、スローモーション動画に基づいて新しい動画ストリームを生成するプロセスです。このプロセスでは、メタデータに基づいてセクションの速度が調整され、スローモーション メタデータが適用されないプレーヤーでも正しく再生されるようになります。
スローモーション ストリームをフラット化するには、EditedMediaItem で setFlattenForSlowMotion ビルダー メソッドを使用します。
Kotlin
val editedMediaItem = EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build() val transformer = Transformer.Builder(context).addListener(transformerListener).build() transformer.start(editedMediaItem, outputPath)
Java
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build(); Transformer transformer = new Transformer.Builder(context).addListener(transformerListener).build(); transformer.start(editedMediaItem, outputPath);
これにより、特別なフォーマットの処理を気にすることなく、スローモーション動画をサポートできます。必要なのは、元の動画ではなく、フラット化されたバージョンの動画を保存して再生することだけです。