Pour une présentation générale des formats multimédias, consultez la page Formats acceptés par ExoPlayer. Les mêmes limites concernant le chargement, l'extraction et le décodage des flux s'appliquent à Transformer, bien que celui-ci ne soit pas compatible avec les modules de décodeur logiciel groupés d'ExoPlayer.
Transformer s'appuie également sur MediaCodec pour l'encodage, ce qui limite les formats de sortie acceptés. Pour en savoir plus sur les limites d'encodage, consultez la section Codecs vidéo MediaCodec.
Par défaut, Transformer génère des fichiers MP4 standards à l'aide de
InAppMp4Muxer. Si votre application nécessite un MP4 fragmenté, vous
pouvez transmettre un
InAppFragmentedMp4Muxer.Factory lors de l'initialisation de votre Transformer instance. Media3 est également compatible avec d'autres formats
tels que WebM, AAC, Ogg et WAV à l'aide de multiplexeurs dédiés tels que
WebmMuxer, AacMuxer, OggMuxer, et
WavMuxer. Ces derniers doivent être encapsulés dans un
Muxer.Factory personnalisé pour être injectés, mais les futures versions
incluront des implémentations de fabrique prêtes à l'emploi pour simplifier ce processus.
Accepter les images
Transformer utilise BitmapFactory pour charger et décoder tous les éléments d'image. Il est donc compatible avec tous les formats pris en charge par BitmapFactory. Pour obtenir la liste des types d'images compatibles, consultez la section
Images compatibles. Pour les formats multi-images (par exemple, les GIF), une seule image du conteneur s'affiche si DefaultAssetLoaderFactory est utilisé.
Formats spéciaux
Transformer est compatible avec la gestion des entrées dans les formats multimédias plus récents qui offrent des fonctionnalités spéciales par rapport aux formats conventionnels.
Gérer les vidéos HDR
De plus en plus d'appareils sont compatibles avec la capture vidéo HDR qui permet d'obtenir des couleurs plus vives et précises , ainsi qu'une plus grande plage de luminosité.
Transformer est compatible avec le montage de vidéos HDR à partir d'Android 13 (niveau d'API 33) sur les appareils disposant de la prise en charge de l'encodage requise. Lors du montage de vidéos HDR, tous les effets vidéo GL doivent gérer les composants de couleur à virgule flottante 16 bits et l'espace colorimétrique BT.2020. HDR_MODE_KEEP_HDR est le mode par défaut lors de la création de la Composition. Si le montage HDR n'est pas compatible, Transformer revient à l'utilisation de HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL.
La conversion HDR en SDR, également appelée mappage de tonalités, est compatible à partir d'Android
10 (niveau d'API 29) sur les appareils disposant de la prise en charge du décodage et d'OpenGL
requise. Cela est utile lorsque vous partagez des contenus multimédias HDR avec d'autres applications ou services qui ne sont pas compatibles avec l'ingestion de contenus HDR. Pour activer le mappage de tonalités à l'aide d'OpenGL, appelez setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) lors de la création de la Composition. À partir d'Android 12 (niveau d'API 31), MediaCodec est également compatible avec le mappage de tonalités sur certains appareils, y compris tous ceux exécutant Android 13 ou version ultérieure et pouvant capturer des vidéos HDR. Pour activer le mappage de tonalités à l'aide de MediaCodec, appelez setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC).
Gérer les contenus multimédias au ralenti
Les vidéos au ralenti incluent des métadonnées indiquant la vitesse à laquelle chaque section du flux doit être lue. L'aplatissement est le processus de production d'un nouveau flux vidéo basé sur la vidéo au ralenti, mais où les sections sont accélérées ou ralenties en fonction des métadonnées, de sorte qu'elles soient lues correctement même sur les lecteurs qui n'appliquent pas de métadonnées au ralenti.
Pour aplatir les flux au ralenti, utilisez la méthode de compilation setFlattenForSlowMotion sur EditedMediaItem.
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);
Vous pouvez ainsi prendre en charge les vidéos au ralenti sans avoir à vous soucier de la gestion de ces formats spéciaux. Il vous suffit de stocker et de lire la version aplatie de la vidéo au lieu de la version d'origine.