Formats compatibles

Consultez la page Formats compatibles avec ExoPlayer pour obtenir une présentation des formats multimédias en général. Les mêmes limites de chargement, d'extraction et de décodage des flux s'appliquent à Transformer, même si Transformer n'est pas compatible avec les modules de décodeur logiciel fournis par ExoPlayer.

Transformer s'appuie également sur MediaCodec pour l'encodage et doit multiplexer les fichiers multimédias de sortie (mux), ce qui limite les formats de sortie compatibles. Consultez les codecs vidéo MediaCodec pour en savoir plus sur les limites d'encodage et MediaMuxer pour connaître les limites qui s'appliquent au conteneur multimédia de sortie. Transformer ne génère que des fichiers MP4.

Par défaut, Transformer utilise MediaMuxer, mais un InAppMuxer en cours de développement est éventuellement disponible pour contourner certaines des limites de MediaMuxer concernant les structures de frames de référence et les formats d'échantillons compatibles. Le multiplexeur par défaut deviendra le multiplexeur intégré à l'application dans une prochaine version.

Compatibilité avec les images

Transformer utilise BitmapFactory pour charger et décoder tous les éléments image. Transformer est donc compatible avec tous les formats acceptés par BitmapFactory. Consultez la section Images compatibles pour connaître les types d'images acceptés. Pour les formats multi-images (par exemple, les GIF), un seul cadre d'image du conteneur s'affiche si DefaultAssetLoaderFactory est utilisé.

Formats spéciaux

Transformer prend en charge la gestion des entrées dans des formats multimédias plus récents qui offrent des fonctionnalités spéciales par rapport aux formats traditionnels.

Gérer les vidéos HDR

De plus en plus d'appareils sont désormais compatibles avec la capture vidéo HDR, ce qui offre des couleurs plus vives et précises, et une meilleure plage de luminosité.

Transformer permet de modifier des vidéos HDR à partir d'Android 13 (niveau d'API 33) sur les appareils compatibles avec l'encodage requis. Lors de la modification 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 Composition. Si la modification HDR n'est pas prise en charge, le transformateur utilise HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL.

La conversion de HDR en SDR, également appelée mappage des tons, est prise en charge à partir d'Android 10 (niveau d'API 29) sur les appareils compatibles avec le décodage et OpenGL requis. Cela s'avère utile lorsque vous partagez des contenus multimédias HDR avec d'autres applications ou services qui ne sont pas compatibles avec l'ingestion de contenu HDR. Pour activer le mappage des tons à l'aide d'OpenGL, appelez setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) lors de la création de l'Composition. À partir d'Android 12 (niveau d'API 31), MediaCodec prend également en charge le mappage des tons sur certains appareils, y compris tous les appareils équipés d'Android 13 ou version ultérieure pouvant enregistrer des vidéos HDR. Pour activer le mappage des tons à 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 de lecture de chaque section du flux. L'aplatissement est le processus de production d'un nouveau flux vidéo basé sur la vidéo au ralenti, mais dans lequel les sections sont accélérées ou ralenties en fonction des métadonnées, afin qu'elles soient lues correctement, même sur les lecteurs qui n'appliquent pas de métadonnées de ralenti.

Pour aplatir des flux au ralenti, utilisez la méthode du constructeur 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);

Cela vous permet d'accepter des vidéos au ralenti sans avoir à gérer ces formats spéciaux. Il vous suffit de stocker et de lire la version aplatie de la vidéo à la place de la version d'origine.