如需媒體格式的一般簡介,請參閱 ExoPlayer 支援的格式頁面。Transformer 也適用相同的串流載入、擷取和解碼限制,但 Transformer 不支援 ExoPlayer 隨附的軟體解碼器模組。
Transformer 也會依賴 MediaCodec 進行編碼,並需要多工處理或多工輸出媒體檔案,這會限制支援的輸出格式。如要進一步瞭解編碼限制,請參閱「MediaCodec 視訊轉碼器」;如要瞭解輸出媒體容器適用的限制,請參閱 MediaMuxer。轉換器只會輸出 MP4 檔案。
根據預設,Transformer 會使用 MediaMuxer,但您也可以選擇使用開發中的 InAppMuxer,避免 MediaMuxer 在參照影格結構和支援的樣本格式方面受到限制。日後推出的版本將會預設使用應用程式內建的 Muxer。
圖片支援
Transformer 會使用 BitmapFactory 載入及解碼所有圖片素材資源,因此 Transformer 支援 BitmapFactory 支援的所有格式。如要瞭解支援的圖片類型,請參閱「圖片支援」。如果是多張圖片格式 (例如 GIF),使用 DefaultAssetLoaderFactory 時會顯示容器中的單一圖片影格。
特殊格式
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。
從 Android 10 (API 級別 29) 開始,只要裝置支援必要的解碼和 OpenGL,就能將 HDR 轉換為 SDR (又稱色調對應)。如果其他應用程式或服務不支援擷取 HDR 內容,這項功能就非常實用。如要使用 OpenGL 啟用色調對應,請在建立 Composition 時呼叫 setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL)。自 Android 12 (API 級別 31) 起,MediaCodec 也支援部分裝置的色調對應功能,包括所有搭載 Android 13 以上版本且可拍攝 HDR 影片的裝置。如要使用 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);
這樣一來,您就能支援慢動作影片,而不必擔心如何處理這些特殊格式。您只需要儲存並播放影片的扁平化版本,而非原始版本。