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 zachowanie, aby Transformer zgłaszał błąd, jeśli nie może uzyskać 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
Aby ustawić niestandardowy multiplekser do zapisywania kontenerów multimedialnych, wywołaj Transformer.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.
Jeśli Twój niestandardowy multiplekser obsługuje zapisywanie ujemnych sygnatur czasowych na listach edycji MP4, upewnij się, ż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.