Utilisez Alibaba Cloud Intelligent Media Services (IMS) pour transcoder et empaqueter des fichiers audio et vidéo contenant plusieurs sous-titres, afin de générer des contenus multimédias multi-sous-titres lisibles sur divers types d'appareils.
Flux de travail de transcodage et d'empaquetage
Pour générer des contenus multimédias multi-sous-titres avec IMS, suivez les étapes ci-dessous :
Préparez l'environnement. Activez IMS, liez un compartiment OSS, configurez les rappels et téléchargez les fichiers source. Consultez les sections Prérequis et Préparation.
Créez des modèles de transcodage pour les flux vidéo et audio. Reportez-vous à la section Configuration des modèles de transcodage.
Soumettez une tâche de transcodage et d'empaquetage multi-débit. Voir la section Soumission d'une tâche multi-débit.
-
Interrogez le résultat de la tâche et vérifiez la sortie empaquetée. Consultez les sections Interrogation du résultat de la tâche et Vérification de la sortie empaquetée.
L'organigramme suivant illustre le flux de travail de transcodage et d'empaquetage.
Exemple de structure de fichier empaqueté
L'exemple ci-dessous présente la structure de liste de lecture d'une sortie empaquetée :
#EXTM3U
# Audio stream definitions (multi-language)
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="Chinese-Audio",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="zh",URI="audio/chinese/chinese.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English-Audio",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="en",URI="audio/english/english.m3u8"
# Video stream definitions (multi-bitrate)
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=900000,CODECS="avc1.640020",RESOLUTION=720x1280,AUDIO="audio",SUBTITLES="subtitle"
video/720p/720p.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000,CODECS="avc1.640020",RESOLUTION=360x640,AUDIO="audio",SUBTITLES="subtitle"
video/360p/360p.m3u8
# Subtitle stream definitions (multi-language)
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subtitle",NAME="Chinese-Subtitle",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="zh",URI="subtitle/chinese/chinese.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subtitle",NAME="English-Subtitle",DEFAULT=NO,AUTOSELECT=YES,FORCED=NO,LANGUAGE="en",URI="subtitle/english/english.m3u8"
Prérequis
Intelligent Media Services est activé. Pour plus d'informations, consultez la rubrique Activation d'IMS.
Préparation
Configuration de base d'IMS
Configuration du stockage — Liez un compartiment OSS à IMS. Pour en savoir plus, consultez la rubrique Configuration d'une adresse de stockage.
Configuration des rappels — Configurez un rappel HTTP ou un rappel MNS pour recevoir les notifications d'état des tâches. Pour obtenir des informations générales sur les méthodes de rappel et les événements de rappel, consultez la rubrique Aperçu des événements de rappel.
Fichiers source — Téléchargez les fichiers vidéo, audio et de sous-titres source dans le compartiment OSS lié à IMS. L'exemple de tâche présenté dans cette rubrique fait référence à ces fichiers via leurs URL OSS.
Configuration des modèles de transcodage
Flux de configuration
L'organigramme suivant illustre le flux de configuration des modèles de transcodage.
Exigences de l'exemple
Cet exemple repose sur les exigences suivantes :
Protocole d'encodage — H264 ou H265
Résolution vidéo — 360P, 540P, 720P ou 1080P
Audio — HE-AAC à 64 Kbps. Les autres paramètres audio utilisent les valeurs par défaut.
Sous-titres — M3U8 (VTT)
Exemple de configuration
Cet exemple utilise quatre niveaux de qualité vidéo. Créez les modèles de transcodage vidéo comme indiqué dans les tableaux suivants. Pour plus de détails, consultez la rubrique Création d'un modèle de transcodage.
L'exemple de tâche de cette rubrique fait également référence à un modèle de transcodage audio nommé Audio-64Kbps pour les sorties audio HE-AAC. Assurez-vous que ce modèle est créé avant de soumettre la tâche d'empaquetage.
Pour utiliser le transcodage Narrowband HD, créez les modèles correspondants selon les descriptions des tableaux, puis soumettez un ticket. Alibaba Cloud mettra ensuite à niveau la configuration en arrière-plan.
Les tableaux suivants décrivent les modèles pour les protocoles d'encodage H264 et H265. Si vous utilisez H265, tenez compte des considérations suivantes concernant le format de conteneur :
Option privilégiée — Utilisez le format de conteneur fmp4. Il s'agit du protocole standard Apple et fonctionne bien avec le navigateur Safari.
Alternative — Le format de conteneur ts fonctionne également, mais il n'est pas compatible avec Safari.
Limitation de la console — Vous ne pouvez pas créer le format de conteneur fmp4 directement dans la console. Commencez par créer le modèle avec le format de conteneur m3u8(ts). Alibaba Cloud mettra ensuite à niveau la configuration en arrière-plan.
H264
|
Modèle de transcodage |
Protocole d'encodage |
Format de conteneur |
Autres paramètres |
|
Video-360P |
H264 |
m3u8(.ts) |
Résolution : 640 pixels sur le côté long (le côté court est adaptatif). Durée du segment : 5 secondes. Configurez les autres paramètres selon vos besoins. |
|
Video-540P |
H264 |
m3u8(.ts) |
Résolution : 960 pixels sur le côté long (le côté court est adaptatif). Durée du segment : 5 secondes. Configurez les autres paramètres selon vos besoins. |
|
Video-720P |
H264 |
m3u8(.ts) |
Résolution : 1280 pixels sur le côté long (le côté court est adaptatif). Durée du segment : 5 secondes. Configurez les autres paramètres selon vos besoins. |
|
Video-1080P |
H264 |
m3u8(.ts) |
Résolution : 1920 pixels sur le côté long (le côté court est adaptatif). Durée du segment : 5 secondes. Configurez les autres paramètres selon vos besoins. |
H265
|
Modèle de transcodage |
Protocole d'encodage |
Format de conteneur |
Autres paramètres |
|
Video-360P |
H265 |
m3u8(.fmp4) |
Résolution : 640 pixels sur le côté long (le côté court est adaptatif). Durée du segment : 5 secondes. Configurez les autres paramètres selon vos besoins. |
|
Video-540P |
H265 |
m3u8(.fmp4) |
Résolution : 960 pixels sur le côté long (le côté court est adaptatif). Durée du segment : 5 secondes. Configurez les autres paramètres selon vos besoins. |
|
Video-720P |
H265 |
m3u8(.fmp4) |
Résolution : 1280 pixels sur le côté long (le côté court est adaptatif). Durée du segment : 5 secondes. Configurez les autres paramètres selon vos besoins. |
|
Video-1080P |
H265 |
m3u8(.fmp4) |
Résolution : 1920 pixels sur le côté long (le côté court est adaptatif). Durée du segment : 5 secondes. Configurez les autres paramètres selon vos besoins. |
Tâche de transcodage et d'empaquetage multi-débit
Une fois la préparation terminée, soumettez une tâche de transcodage et d'empaquetage multi-débit, puis interrogez le résultat de la tâche.
Soumission d'une tâche multi-débit
Appelez l'opération SubmitMediaConvertJob pour soumettre une tâche de transcodage pour un fichier vidéo ou audio à Intelligent Media Services.
Utilisation d'OverrideParams pour définir les flux de sous-titres
Vous ne pouvez pas personnaliser les informations de sous-titres dans un modèle de transcodage. Pour configurer les flux de sous-titres, définissez explicitement les informations de sous-titres avec OverrideParams lors de la soumission de la tâche. Les tableaux suivants décrivent les paramètres des flux de sous-titres.
Subtitles
|
Paramètre |
Type |
Description |
|
Subtitles |
Array of Subtitle |
Paramètres du flux de sous-titres. |
Subtitle
|
Paramètre |
Type |
Description |
|
Codec |
String |
Format d'encodage du flux de sous-titres. HLS prend uniquement en charge le format vtt. |
Description de la configuration (HlsGroupConfig)
Chaque sortie de l'exemple de tâche contient un objet HlsGroupConfig qui décrit le flux de sortie dans le manifeste HLS. Le tableau suivant décrit les paramètres.
|
Paramètre |
Type |
Description |
|
Type |
string |
Spécifie le type de flux de données. Valeurs valides : Video, Audio, Subtitle et Hybrid. Lors du traitement, seuls les paramètres correspondant au type de flux sont conservés : paramètres liés à la vidéo pour Video, paramètres liés à l'audio pour Audio, et paramètres liés à l'audio et à la vidéo pour Hybrid. |
|
Bandwidth |
string |
Bande passante. Ce paramètre est facultatif. Le débit binaire (bps) est utilisé par défaut. Ce paramètre prend effet lorsque Type est Video ou Hybrid. |
|
AudioGroup |
string |
Groupe audio référencé par ce flux vidéo. Ce paramètre prend effet lorsque Type est Video. |
|
SubtitleGroup |
string |
Groupe de sous-titres référencé par ce flux vidéo. Ce paramètre prend effet lorsque Type est Video ou Hybrid. |
|
Name |
string |
Attribut NAME de ce flux de sortie dans le manifeste HLS. Ce paramètre est requis lorsque Type est Audio ou Subtitle. |
|
Group |
string |
Attribut GROUP_ID de ce flux de sortie dans le manifeste HLS. Ce paramètre prend effet lorsque Type est Audio ou Subtitle. Valeur par défaut : identique à la valeur de Type. |
|
Language |
string |
Attribut LANGUAGE de ce flux de sortie dans le manifeste HLS. Ce paramètre prend effet lorsque Type est Audio ou Subtitle. La valeur doit être conforme à la norme RFC 5646. |
|
Default |
boolean |
Indique si le flux doit être défini comme flux par défaut. Ce paramètre prend effet lorsque Type est Audio ou Subtitle. |
|
AutoSelect |
boolean |
Indique si le flux doit être sélectionné automatiquement. Ce paramètre prend effet lorsque Type est Audio ou Subtitle. |
|
Forced |
boolean |
Indique si l'affichage du flux doit être forcé. Ce paramètre prend effet lorsque Type est Audio ou Subtitle. |
Exemple : transcodage et génération de fichiers empaquetés multi-débit
L'exemple suivant définit quatre entrées : une vidéo (video), une piste audio anglaise (EnglishAudio), une piste de sous-titres chinois (ChineseSubtitle), et une piste de sous-titres anglais (EnglishSubtitle). Les sorties incluent deux niveaux de qualité vidéo (720P et 360P), deux pistes audio et deux pistes de sous-titres. Cet exemple utilise deux des quatre modèles vidéo que vous avez créés. Vous pouvez ajouter ou supprimer des sorties vidéo selon vos besoins.
Chaque sortie, y compris chaque sortie de sous-titres, nécessite un TemplateId. Pour une sortie de sous-titres, spécifiez l'ID de n'importe quel modèle de transcodage dans la tâche d'empaquetage. Dans l'exemple suivant, remplacez <TemplateId> par un ID de modèle existant, tel que Video-360P.
Le JSON suivant correspond au paramètre Config de la requête SubmitMediaConvertJob. Remplacez les espaces réservés entre crochets angulaires par vos valeurs réelles.
{
"Config": {
"Inputs": [
{
"Name": "video",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSSPublicEndpoint>/<Video1Chinese>"
}
},
{
"Name": "EnglishAudio",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSSPublicEndpoint>/<Audio1English>"
}
},
{
"Name": "ChineseSubtitle",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSSPublicEndpoint>/<Subtitle1Chinese>"
}
},
{
"Name": "EnglishSubtitle",
"InputFile": {
"Type": "OSS",
"Url": "https://<Bucket>.<OSSPublicEndpoint>/<Subtitle1English>"
}
}
],
"OutputGroups": [
{
"Name": "Hls",
"GroupConfig": {
"Type": "Hls",
"OutputFileBase": {
"Type": "OSS",
"Url": "https://<Bucket>.<PublicEndpoint>/<URI>/"
},
"ManifestName": "<m3u8filename>"
},
"Outputs": [
{
"Name": "720P",
"OutputFileName": "video/720p/720p",
"TemplateId": "Video-720P",
"HlsGroupConfig": {
"Type": "Video"
}
},
{
"Name": "360P",
"OutputFileName": "video/360p/360p",
"TemplateId": "Video-360P",
"HlsGroupConfig": {
"Type": "Video"
}
},
{
"OutputFileName": "audio/chinese/chinese",
"TemplateId": "Audio-64Kbps",
"HlsGroupConfig": {
"Type": "Audio",
"Name": "ChineseAudio",
"Language": "zh",
"Autoselect": "TRUE",
"Default": "TRUE"
}
},
{
"InputRef": "ChineseSubtitle",
"OutputFileName": "subtitle/chinese/chinese",
"TemplateId": "<TemplateId>",
"OverrideParams": {
"Subtitles": [
{
"Codec": "vtt"
}
]
},
"HlsGroupConfig": {
"Type": "Subtitle",
"Name": "ChineseSubtitle",
"Language": "zh",
"Autoselect": "TRUE",
"Default": "TRUE"
}
},
{
"InputRef": "EnglishAudio",
"OutputFileName": "audio/english/english",
"TemplateId": "Audio-64Kbps",
"HlsGroupConfig": {
"Type": "Audio",
"Name": "EnglishAudio",
"Language": "en",
"Autoselect": "TRUE",
"Default": "FALSE"
}
},
{
"InputRef": "EnglishSubtitle",
"OutputFileName": "subtitle/english/english",
"TemplateId": "<TemplateId>",
"OverrideParams": {
"Subtitles": [
{
"Codec": "vtt"
}
]
},
"HlsGroupConfig": {
"Type": "Subtitle",
"Name": "EnglishSubtitle",
"Language": "en",
"Autoselect": "TRUE",
"Default": "FALSE"
}
}
]
}
]
}
}
Interrogation du résultat de la tâche
Appelez l'opération GetMediaConvertJob pour obtenir les détails de la tâche de transcodage.
Événement de rappel
Lorsqu'une tâche d'empaquetage est terminée, IMS envoie un événement de rappel. Le type d'événement (EventType) est MediaConvertComplete. La console ne permet pas encore de sélectionner cet événement. Pour le configurer, appelez l'opération SetEventCallback.
Description des champs clés
Le tableau suivant décrit les champs clés de l'événement de rappel.
|
Paramètre |
Type |
Obligatoire |
Description |
|
Name |
String |
Oui |
Nom de la tâche principale. |
|
JobId |
String |
Oui |
ID de la tâche. |
|
Status |
String |
Oui |
État de la tâche. La valeur |
|
TriggerSource |
String |
Non |
Source du déclencheur. La valeur |
|
FinishTime |
String |
Non |
Heure de fin de la tâche. Le format doit être identique à celui de EventTime. |
|
UserData |
string |
Non |
Données personnalisées transmises lors de la soumission de la tâche. |
L'exemple suivant montre un événement de rappel :
{
"FinishTime": "2025-05-09T08:03:21Z",
"JobId": "your-job-id",
"Status": "Success",
"TriggerSource": "IceWorkflow",
"UserData": "{\"ImsSrc\":\"Workflow\",\"TaskId\":\"e89a955d88ca47f0b9b79c562e5c622f\"}"
}
Vérification de la sortie empaquetée
Une valeur Status égale à Success indique que la tâche a réussi. Pour confirmer que les fichiers empaquetés sont complets, comparez les fichiers de sortie dans votre compartiment OSS avec la structure présentée dans la section Exemple de structure de fichier empaqueté. Vérifiez que les listes de lecture vidéo, audio et de sous-titres sont toutes générées comme prévu.