Aby kontrolować działanie Transformer, możesz skonfigurować opcje w interfejsie API lub całkowicie zastąpić fragmenty funkcjonalności, pisząc niestandardowe implementacje interfejsów i przekazując je. Na tej stronie znajdziesz kilka przykładów.
Konfigurowanie kodeka
Domyślnie Transformer przełączy się na obsługiwaną rozdzielczość, jeśli koder sprzętowy urządzenia nie akceptuje żądanej rozdzielczości wyjściowej. Transformer może na przykład wyrównać szerokość i wysokość wyjściową, aby były wielokrotnością 2 lub 16, co jest często wymagane przez kodery sprzętowe. Możesz wyłączyć to działanie, aby Transformer zgłaszał błąd, jeśli nie może wygenerować wymaganej rozdzielczości wyjściowej:
Kotlin
transformerBuilder.setEncoderFactory( DefaultEncoderFactory.Builder(context).setEnableFallback(false).build() )
Java
transformerBuilder.setEncoderFactory( new DefaultEncoderFactory.Builder(context).setEnableFallback(false).build());
Podobnie DefaultEncoderFactory obsługuje też używanie niestandardowych ustawień kodowania z opcją setRequestedVideoEncoderSettings.
Możesz też całkowicie zastąpić fabryki koderów i dekoderów, aby mieć pełną kontrolę nad sposobem konfigurowania kodeków.
Niestandardowe multipleksery
Możesz ustawić niestandardowy multiplekser do zapisywania kontenerów multimedialnych, wywołując Transformer.Builder.setMuxerFactory. Jeśli na przykład zaimplementujesz własny
multiplekser na poziomie aplikacji, możesz napisać otoczkę, która implementuje interfejs
Muxer, a następnie użyć setMuxerFactory, aby wstrzyknąć ją do
Transformer.Builder.
Jeśli Twój niestandardowy multiplekser obsługuje zapisywanie ujemnych sygnatur czasowych na listach edycji MP4, musisz się upewnić, że
Muxer.Factory#supportsWritingNegativeTimestampsInEditList zwraca wartość
true. Dzięki temu Transformer może przeprowadzać optymalizacje, takie jak edycje tylko przycinania, za pomocą list edycji MP4 bez konieczności ponownego kodowania filmu. W przypadku domyślnego InAppMp4Muxer jest to już obsługiwane.