Consultez la page Formats compatibles avec ExoPlayer pour une présentation générale des formats multimédias. Les mêmes limites concernant le chargement, l'extraction et le décodage des flux s'appliquent à Transformer, bien que Transformer ne soit pas compatible avec les modules de décodeur logiciel fournis avec ExoPlayer.
Transformer s'appuie également sur MediaCodec pour l'encodage et doit multiplexer, ou muxer, les fichiers multimédias de sortie, ce qui limite les formats de sortie pris en charge. Pour en savoir plus sur les limites d'encodage, consultez Codecs vidéo MediaCodec et MediaMuxer pour connaître les limites applicables au conteneur multimédia de sortie. Le transformateur ne génère que des fichiers MP4.
Par défaut, Transformer utilise MediaMuxer, mais une InAppMuxer en cours de développement est disponible en option pour éviter certaines des limites de MediaMuxer concernant les structures de frame de référence et les formats d'échantillon compatibles. Le muxer par défaut deviendra le muxer intégré dans une prochaine version.
Compatibilité avec les images
Transformer utilise BitmapFactory pour charger et décoder tous les composants d'image. Il est donc compatible avec tous les formats pris en charge par BitmapFactory. Pour connaître les types d'images compatibles, consultez 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 permet de gérer les entrées dans les formats multimédias les plus récents qui offrent des fonctionnalités spéciales par rapport aux formats classiques.
Gérer les vidéos HDR
De plus en plus d'appareils sont désormais compatibles avec la capture vidéo HDR, qui offre des couleurs plus vives et plus précises, ainsi qu'une plus grande plage de luminosité.
Transformer permet de modifier les vidéos HDR à partir d'Android 13 (niveau d'API 33) sur les appareils disposant de la prise en charge de l'encodage requise. Lorsque vous modifiez des 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 Composition. Si le montage HDR n'est pas pris en charge, le Transformer revient à l'utilisation de HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL.
La conversion du HDR en SDR, également appelée mappage de tonalités, est prise en charge à 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 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 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 équipés d'Android 13 ou version ultérieure qui peuvent capturer des vidéos HDR. Pour activer le mappage de ton à 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 les métadonnées de 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 originale.