メディア形式の概要については、ExoPlayer でサポートされている形式 のページをご覧ください。Transformer では、ExoPlayer にバンドルされているソフトウェア デコーダ モジュールはサポートされていませんが、ストリームの読み込み、抽出、デコードに関する制限は同じです。
Transformer はエンコードに MediaCodec を使用するため、サポートされる出力形式が制限されます。エンコードの制限について詳しくは、MediaCodec 動画コーデック
をご覧ください。
デフォルトでは、Transformer は標準の MP4 ファイルを InAppMp4Muxer を使用して出力します。
アプリでフラグメント化された MP4 が必要な場合は、
InAppFragmentedMp4Muxer.Factory
を初期化時に渡すことができます。TransformerMedia3 では、WebmMuxer
、AacMuxer、OggMuxer などの専用のマルチプレクサを使用して、WebM、AAC、Ogg などの他の
形式もサポートしています。これらを挿入するには、
カスタムの Muxer.Factory でラップする必要がありますが、今後のリリース
では、このプロセスを簡素化するために、すぐに使用できるファクトリ実装が追加される予定です。
画像のサポート
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);
これにより、特別な形式の処理を気にすることなく、スローモーション動画をサポートできます。元の動画の代わりに、フラット化されたバージョンの動画を保存して再生するだけで済みます。