Convertir des vidéos en HLS, MPEG-Dash et CMAF
🤖/video/adaptive encode des vidéos dans des formats pris en charge par HTTP Live Streaming (HLS), MPEG-Dash et CMAF et génère les fichiers de manifeste et de liste de lecture nécessaires.

Ce Robot accepte tous les types de fichiers vidéo et audio. N’oubliez pas d’utiliser le regroupement de Steps dans votre paramètre use pour permettre au Robot de traiter plusieurs fichiers d’entrée à la fois.
Ce Robot est normalement utilisé en combinaison avec 🤖/video/encode. Nous avons mis en place des préréglages d’encodage vidéo et audio spécialement conçus pour la prise en charge de MPEG-Dash et de HTTP Live Streaming. Ces préréglages portent les préfixes "dash/" et "hls/". Voir une démo de HTTP Live Streaming ici (English).
Paramètres CORS requis pour MPEG-Dash et HTTP Live Streaming
La lecture de fichiers manifestes MPEG-Dash ou de listes de lecture HLS nécessite une configuration CORS appropriée côté serveur. Le serveur qui distribue les fichiers devrait être configuré pour ajouter les champs d’en-tête suivants aux réponses :
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET
Access-Control-Allow-Headers: *
Si les fichiers sont stockés dans un bucket Amazon S3, vous pouvez utiliser la définition CORS suivante pour vous assurer que les champs d’en-tête CORS sont correctement définis :
[
{
"AllowedHeaders": ["*"],
"AllowedMethods": ["GET"],
"AllowedOrigins": ["*"],
"ExposeHeaders": []
}
]
Pour configurer CORS pour votre bucket S3 :
- Accédez à https://s3.console.aws.amazon.com/s3/buckets/
- Cliquez sur votre bucket
- Cliquez sur « Permissions »
- Modifiez « Cross-origin resource sharing (CORS) »
Stockage des segments et des fichiers de listes de lecture
Le Robot attribue à ses fichiers de résultat (segments, segments d’initialisation, fichiers manifestes MPD et fichiers de listes de lecture M3U8) la propriété de métadonnées relative_path appropriée, afin que vous puissiez les stocker facilement avec l’un de nos Robots de stockage.
Dans le paramètre path du Robot de stockage de votre choix, utilisez l’Assembly Variable ${file.meta.relative_path} pour stocker les fichiers en respectant les chemins appropriés afin que les fichiers de listes de lecture fonctionnent.
Exemple d’utilisation
Mise en œuvre de HTTP Live Streaming : encoder la vidéo téléversée en trois versions, puis les découper en plusieurs segments et générer des fichiers de liste de lecture contenant tous les segments :
{
"steps": {
":original": {
"robot": "/upload/handle"
},
"encoded_1080p": {
"ffmpeg_stack": "v7",
"preset": "hls/1080p",
"robot": "/video/encode",
"use": ":original"
},
"encoded_480p": {
"ffmpeg_stack": "v7",
"preset": "hls/480p",
"robot": "/video/encode",
"use": ":original"
},
"encoded_720p": {
"ffmpeg_stack": "v7",
"preset": "hls/720p",
"robot": "/video/encode",
"use": ":original"
},
"hls_bundled": {
"playlist_name": "my_playlist.m3u8",
"robot": "/video/adaptive",
"technique": "hls",
"use": {
"bundle_steps": true,
"steps": [
"encoded_480p",
"encoded_720p",
"encoded_1080p"
]
}
}
}
}Paramètres
interpolateboolean | Record<string, boolean>Détermine si les Assembly Variables sont interpolées pour chaque champ d’instruction.
Par défaut, la plupart des champs d’instruction des Robots interpolent les Assembly Variables. Définissez ce paramètre sur
falsepour traiter tous les champs d’instruction comme du texte littéral, ou définissez le chemin d’un champ individuel surfalsepour traiter uniquement ce champ comme du texte littéral. Pour les champs propres à un Robot qui sont littéraux par défaut, définissez ce paramètre surtrueou définissez le chemin de ce champ surtruepour réactiver l’interpolation.Utilisez des noms de champs tels que
path, ou des chemins avec points tels queffmpeg.vfpour les objets imbriqués.output_metaRecord<string, boolean> | boolean | Array<string>Permet de spécifier un ensemble de métadonnées dont le calcul est plus coûteux en puissance CPU et qui sont donc désactivées par défaut afin que le traitement de vos Assemblies reste rapide.
Pour les images, vous pouvez ajouter
"has_transparency": truedans cet objet pour déterminer si l’image contient des parties transparentes, et"dominant_colors": truepour extraire de l’image un tableau de codes couleur hexadécimaux.Pour les images, vous pouvez également ajouter
"blurhash": truepour extraire une chaîne BlurHash — une représentation compacte d’un espace réservé pour l’image, utile pour afficher un aperçu flou pendant le chargement de l’image complète.Pour les images,
"thumbhash": trueextrait plutôt un ThumbHash encodé en base64 dansmeta.thumbhash, accompagné demeta.has_alpha(qui indique si un canal alpha existe, même lorsque l’image est entièrement opaque). Il décrit les pixels orientés selon les données EXIF et utilise la première image des images animées. L’extraction est effectuée au mieux : les images de plus de 40 mégapixels, les formats non pris en charge ou un décodage échoué ou limité ne produisent aucun espace réservé. Une extraction réussie ajoute des frais de métadonnées équivalents à 20 % des octets de ce fichier. Aucun supplément ThumbHash ne s’applique lorsque l’option est désactivée ou lorsqu’aucun hash n’est produit.Définissez cette option sur le Step qui produit l’image, par exemple
/upload/handlepour les originaux téléversés ou/image/resizepour les sorties traitées. La définir uniquement sur/transloadit/storene déclenche pas l’extraction : le stockage conserve les métadonnées du Step producteur. Transloadit Storage conserve un hash généré avec sa version immuable et le renvoie dans les résultats stockés et lors des lectures natives de ressources. Les téléversements directs vers S3 ne génèrent pas d’espaces réservés. Un espace réservé contient des informations sur l’image : protégez-le donc avec les mêmes contrôles d’accès que l’image complète.Pour les vidéos, vous pouvez ajouter le paramètre
"colorspace": truepour extraire l’espace colorimétrique de la vidéo de sortie.Pour les vidéos, vous pouvez également ajouter
"interlaced": truepour détecter si la vidéo est entrelacée. Cette option combine l’indicateur ffprobe peu coûteuxfield_orderavec une passe d’échantillonnageidetlimitée sur les premières images de la source, et exposeinterlaced,field_orderainsi qu’un objet de diagnosticinterlace_detectionsousfile.meta. Cette opération est coûteuse en calcul et facturée en conséquence.Pour l’audio, vous pouvez ajouter
"mean_volume": truepour obtenir une valeur unique représentant le volume moyen du fichier audio.Vous pouvez également définir cette option sur
falsepour ignorer l’extraction des métadonnées et accélérer le transcodage.user_metaRecord<string, any>(par défaut :{})Ajoute des métadonnées JSON personnalisées à chaque fichier émis sans modifier son contenu. Les objets et tableaux imbriqués sont pris en charge.
L’héritage dépend du Robot. Les valeurs sont fusionnées avec la valeur
user_metaexistante du fichier de sortie ; le Step actuel remplace les clés de premier niveau correspondantes. Attribuez explicitement les clés requises lorsqu’un Robot crée de nouvelles sorties.Dans les Steps de traitement,
${file.*}désigne la première entrée et${result.*}le fichier émis. Les valeurs sont évaluées pour chaque sortie après l’exécution du Robot, avant l’extraction ultérieure des métadonnées et le stockage temporaire. Sur:original, les valeurs sont évaluées pour chaque téléversement avant l’extraction des métadonnées.Les Steps en aval lisent
${file.user_meta.key}. Consultez Métadonnées personnalisées pour un exemple complet et les règles d’héritage.resultboolean(par défaut :false)Indique si les résultats de ce Step doivent figurer dans l’Assembly Status JSON
queuebatchDéfinir la file d’attente sur « batch » abaisse manuellement la priorité des Jobs de ce Step afin d’éviter de consommer des emplacements prioritaires de Jobs pour des Jobs qui n’ont pas besoin d’un temps d’attente nul dans la file
force_acceptboolean(par défaut :false)Forcer un Robot à accepter un type de fichier qu’il aurait ignoré.
Par défaut, les Robots ignorent les fichiers qu’ils ne connaissent pas. Le Robot 🤖/video/encode, par exemple, ignorera volontiers les images en entrée.
Avec le paramètre
force_acceptdéfini surtrue, vous pouvez forcer les Robots à accepter tous les fichiers qui leur sont envoyés. Cela entraîne généralement des erreurs et ne doit être utilisé que pour le débogage ou pour traiter des cas limites.ignore_errorsboolean | Array<meta | execute>(par défaut :[])Ignore les erreurs pendant certaines phases du traitement.
Si vous définissez cette valeur sur
["meta"], le Robot ignorera les erreurs lors de l’extraction des métadonnées.Si vous définissez cette valeur sur
["execute"], le Robot ignorera les erreurs lors de la phase d’exécution principale.Définir cette valeur sur
trueéquivaut à["meta", "execute"]: les erreurs seront alors ignorées dans les deux phases.usestring | Array<string> | Array<object> | objectIndique quel(s) Step(s) utiliser comme entrée.
- Vous pouvez choisir n’importe quel nom pour les Steps, sauf
":original"(réservé aux téléversements des utilisateurs gérés par Transloadit) - Vous pouvez fournir plusieurs Steps en entrée à l’aide de tableaux :
{ "use": [ ":original", "encoded", "resized" ] } - Vous pouvez également étiqueter les Steps d’entrée avec
aspour transmettre une intention sémantique aux Robots :{ "use": [ { "name": ":original", "as": "image" }, { "name": ":original", "as": "mask" } ] }
AstuceC’est probablement tout ce que vous devez savoir sur
use, mais vous pouvez consulter les cas d’utilisation avancés.- Vous pouvez choisir n’importe quel nom pour les Steps, sauf
ffmpegobjectUn objet de paramètres à transmettre à FFmpeg. Si un préréglage est utilisé, les options spécifiées sont fusionnées par-dessus celles du préréglage. Pour connaître les options disponibles, consultez la documentation de FFmpeg. Les options spécifiées ici ont priorité sur celles du préréglage.
ffmpeg_stackv6 | v7 | v8 | string(par défaut :"v6.0.0")Sélectionne la version de la pile FFmpeg à utiliser pour l’encodage. Nous recommandons actuellement d’utiliser « v7 ». Les versions exactes « v6.0.0 », « v7.0.0 » et « v8.0.0 » sont des valeurs héritées qui restent acceptées pour assurer la rétrocompatibilité. Les valeurs « v5.x », dépréciées, sont également acceptées.
widthstring | number | nullLargeur de la nouvelle vidéo, en pixels.
Si la valeur n’est pas spécifiée et que le paramètre
presetest disponible, la largeur fournie (English) parpresetsera appliquée.heightstring | number | nullHauteur de la nouvelle vidéo, en pixels.
Si la valeur n’est pas spécifiée et que le paramètre
presetest disponible, la hauteur fournie (English) parpresetsera appliquée.presetandroid | android-high | android-low | android_high | android_low | dash-1080p-video | dash-1080p_video |Convertit une vidéo selon des paramètres préconfigurés (English).
Vous pouvez utiliser ici la valeur
'empty'si vous spécifiez vos propres paramètres FFmpeg à l’aide du Robot, ou si vous ne souhaitez pas que Transloadit définisse de paramètres d’encodage.techniquedash | hls | cmaf(par défaut :"dash")Détermine la technique de streaming à utiliser. Prend en charge
"dash"pour MPEG-Dash,"hls"pour HTTP Live Streaming et"cmaf"pour une sortie CMAF basée sur FFmpeg avec à la fois des manifestes MPEG-Dash et HLS qui font référence aux mêmes segments fMP4.playlist_namestringLe nom du fichier manifeste ou de liste de lecture généré. La valeur par défaut est
"playlist.mpd"si votretechniquevaut"dash", et"playlist.m3u8"si votretechniquevaut"hls". Pour"cmaf", cette valeur définit le nom du manifeste MPEG-Dash et vaut"playlist.mpd"par défaut.hls_playlist_namestringUtilisé uniquement lorsque
techniquevaut"cmaf". Définit le nom du fichier de la liste de lecture principale HLS générée. La valeur par défaut est"playlist.m3u8".segment_durationstring | number(par défaut :10)La durée de chaque segment en secondes.
closed_captionsboolean(par défaut :true)Détermine si vous souhaitez la prise en charge des sous-titres codés avec la technique
"hls".audio_groupboolean(par défaut :false)Lorsque ce paramètre est défini sur
trueet que la technique"hls"est utilisée, les fichiers d’entrée contenant uniquement de l’audio sont traités comme des rendus audio alternatifs plutôt que comme des variantes de flux autonomes. Cela permet aux lecteurs de proposer la sélection d’une piste audio (par exemple pour plusieurs langues). Les fichiers contenant uniquement de l’audio figurent sous forme d’entrées#EXT-X-MEDIA:TYPE=AUDIOdans la liste de lecture multivariante, et les variantes vidéo y font référence via l’attributAUDIO.Lorsque cette option est activée, seul le flux vidéo des entrées vidéo est inclus dans les segments de sortie (tout audio multiplexé est exclu). Fournissez l’audio séparément sous forme de fichiers d’entrée contenant uniquement de l’audio.
Cette option n’est prise en charge que pour la technique
"hls"et n’a aucun effet avec"dash".