如要控管 Transformer 的行為,您可以在 API 介面中設定選項,或編寫介面的自訂實作項目並傳入,完全取代部分功能。本頁面將說明幾個範例。
控制轉碼器設定
根據預設,如果裝置的硬體編碼器不接受要求的輸出解析度,Transformer 會改用支援的解析度。舉例來說,Transformer 可將輸出寬度和高度對齊為 2 或 16 的倍數,這通常是硬體編碼器所要求的。您可以關閉這項行為,這樣一來,如果 Transformer 無法產生所需的輸出解析度,就會改為擲回錯誤:
Kotlin
transformerBuilder.setEncoderFactory( DefaultEncoderFactory.Builder(context).setEnableFallback(false).build() )
Java
transformerBuilder.setEncoderFactory( new DefaultEncoderFactory.Builder(context).setEnableFallback(false).build());
同樣地,DefaultEncoderFactory 也支援使用 setRequestedVideoEncoderSettings 選項自訂編碼設定。
您也可以完全取代編碼器和解碼器的工廠,全面掌控轉碼器的設定方式。
自訂多工器
您可以呼叫 Transformer.setMuxerFactory,為寫入媒體容器設定自訂多工器。舉例來說,如果您在應用程式層級實作自己的多工器,可以編寫實作 Muxer 介面的包裝函式,然後使用 setMuxerFactory 將其插入 Transformer。
如果自訂多工器支援在 MP4 編輯清單中寫入負時間戳記,請確保 Muxer.Factory#supportsWritingNegativeTimestampsInEditList 會傳回 true。這樣一來,Transformer 就能執行最佳化作業,例如使用 MP4 編輯清單進行僅限修剪的編輯,不必重新編碼影片。預設 InAppMp4Muxer 已支援這項功能。