Transcodifique e empacote arquivos de mídia com várias faixas de áudio usando o Intelligent Media Services (IMS) para gerar conteúdo de áudio e vídeo multilíngue compatível com diversos dispositivos e players.
Fluxo de trabalho de transcodificação e empacotamento
Exemplo de estrutura de arquivo empacotado:
#EXTM3U
# Audio stream definitions (multi-language)
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="Chinese",LANGUAGE="zh",DEFAULT=YES,URI="audio/chinese.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English",LANGUAGE="en",DEFAULT=NO,URI="audio/english.m3u8"
# Video stream definitions (multi-bitrate)
#EXT-X-STREAM-INF:BANDWIDTH=400000,RESOLUTION=360x640,AUDIO="audio",CODECS="hvc1,mp4a.40.5"
video/360p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=900000,RESOLUTION=720x1280,AUDIO="audio",CODECS="hvc1,mp4a.40.5"
video/720p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2000000,RESOLUTION=1080x1920,AUDIO="audio",CODECS="hvc1,mp4a.40.5"
video/1080p.m3u8
Pré-requisitos
Verifique se o Intelligent Media Services (IMS) está ativado. Para obter instruções, consulte Ativar o IMS.
Configuração
Configuração básica do IMS
Armazenamento: Vincule um bucket do Object Storage Service (OSS) ao IMS. Para mais informações, consulte Configurar um local de armazenamento.
Callbacks: Configure um callback HTTP ou MNS para receber notificações sobre o status das tarefas. Para mais informações, consulte Visão geral dos eventos de callback.
Configuração do modelo de transcodificação
Procedimento de configuração
Requisitos do exemplo
Codec: H.264/H.265
Resolução de vídeo: 360p/540p/720p/1080p
Áudio: HE-AAC a 64 kbps (configuração padrão).
Exemplo de configuração
Crie modelos de transcodificação para cada resolução de vídeo necessária com base nas tabelas a seguir. Para obter instruções, consulte Criar um modelo de transcodificação.
Para transcodificar com Narrowband HD™, crie os modelos correspondentes conforme a tabela e, em seguida, envie um ticket para que a Alibaba Cloud atualize sua configuração de backend.
H.264
|
Modelo de transcodificação |
Codec |
Formato de contêiner |
Outras configurações |
|
Video-360P |
H.264 |
m3u8(.ts) |
|
|
Video-540P |
H.264 |
m3u8(.ts) |
|
|
Video-720P |
H.264 |
m3u8(.ts) |
|
|
Video-1080P |
H.264 |
m3u8(.ts) |
|
|
Audio-64Kbps |
HE-AAC |
m3u8(.ts) |
Nota
Não é possível criar este modelo no console. Use a API ou envie um ticket. |
H.265
Recomendado: Use o formato de contêiner fmp4. Este é o padrão para dispositivos Apple e oferece compatibilidade com o Safari.
Alternativa: O formato de contêiner .ts também é suportado, mas não é compatível com o Safari.
Limitação do console: Não é possível criar um stream com o formato de contêiner fmp4 diretamente no console. Crie o stream com o formato de contêiner m3u8(ts). A Alibaba Cloud atualizará a configuração no backend posteriormente.
|
Modelo de transcodificação |
Codec |
Formato de contêiner |
Outras configurações |
|
Video-360P |
H.265 |
m3u8(.fmp4) |
|
|
Video-540P |
H.265 |
m3u8(.fmp4) |
|
|
Video-720P |
H.265 |
m3u8(.fmp4) |
|
|
Video-1080P |
H.265 |
m3u8(.fmp4) |
|
|
Audio-64Kbps |
HE-AAC |
m3u8(.fmp4) |
Nota
Não é possível criar este modelo no console. Use a API ou envie um ticket. |
Tarefa de transcodificação e empacotamento com múltiplas taxas de bits
Envio de tarefa com múltiplas taxas de bits
Chame a operação SubmitMediaConvertJob para enviar uma tarefa de transcodificação dos seus arquivos de mídia.
Parâmetros HlsGroupConfig
|
Parâmetro |
Tipo |
Descrição |
|
Type |
string |
Tipo do fluxo de dados. Valores válidos:
|
|
Bandwidth |
string |
Largura de banda. Parâmetro opcional. Por padrão, usa a taxa de bits (em bps). Válido apenas quando |
|
AudioGroup |
string |
Grupo de áudio referenciado pelo fluxo de vídeo. Válido apenas quando |
|
SubtitleGroup |
string |
Grupo de legendas referenciado pelo fluxo de vídeo. Válido apenas quando |
|
Name |
string |
Atributo NAME do fluxo de saída no manifesto HLS. Parâmetro obrigatório quando |
|
Group |
string |
Atributo GROUP_ID do fluxo de saída no manifesto HLS. Válido apenas quando O valor padrão corresponde ao parâmetro |
|
Language |
string |
Atributo LANGUAGE do fluxo de saída no manifesto HLS. Válido apenas quando |
|
Default |
boolean |
Define se este é o fluxo padrão. Válido apenas quando |
|
AutoSelect |
boolean |
Define se o fluxo deve ser selecionado automaticamente. Válido apenas quando |
|
Forced |
boolean |
Define se o fluxo é forçado. Válido apenas quando |
Caso de uso 1: Transcodificar e empacotar
{
"Inputs": [
{
"Name": "video",
"InputFile": {
"Type": "OSS",
"Media": "https://<your-bucket>.<public-endpoint>/<video_1_chinese.mp4>"
}
},
{
"Name": "EnglishAudio",
"InputFile": {
"Type": "OSS",
"Media": "https://<your-bucket>.<public-endpoint>/<video_1_english.mp4>"
}
},
{
"Name": "JapaneseAudio",
"InputFile": {
"Type": "OSS",
"Media": "https://<your-bucket>.<public-endpoint>/<video_1_japanese.mp4>"
}
}
],
"OutputGroups": [
{
"GroupConfig": {
"Type": "Hls",
"OutputFileBase": {
"Type": "OSS",
"Media": "https://<your-bucket>.<public-endpoint>/<URI>/"
},
"ManifestName": "<m3u8_filename>"
},
"Outputs": [
{
"Name": "360P",
"InputRef": "video",
"OutputFileName": "video/360p/360p",
"TemplateId": "Video-360P"
},
{
"Name": "540P",
"InputRef": "video",
"OutputFileName": "video/540p/540p",
"TemplateId": "Video-540P"
},
{
"Name": "720P",
"InputRef": "video",
"OutputFileName": "video/720p/720p",
"TemplateId": "Video-720P"
},
{
"Name": "1080P",
"InputRef": "video",
"OutputFileName": "video/1080p/1080p",
"TemplateId": "Video-1080P"
},
{
"OutputFileName": "audio/chinese/chinese",
"TemplateId": "Audio-64Kbps",
"HlsGroupConfig": {
"Name": "Chinese",
"Type":"audio",
"Language": "zh",
"Autoselect": "TRUE",
"Default": "TRUE"
}
},
{
"InputRef": "EnglishAudio",
"OutputFileName": "audio/english/english",
"TemplateId": "Audio-64Kbps",
"HlsGroupConfig": {
"Name": "English",
"Type":"audio",
"Language": "en",
"Autoselect": "TRUE"
}
},
{
"InputRef": "JapaneseAudio",
"OutputFileName": "audio/japanese/japanese",
"TemplateId": "Audio-64Kbps",
"HlsGroupConfig": {
"Name": "Japanese",
"Type":"audio",
"Language": "ja",
"Autoselect": "TRUE"
}
}
]
}
]
}
Caso de uso 2: Adicionar faixas de áudio
Procedimento:
Especifique uma entrada chamada "ExtraAudio". Na saída, referencie essa entrada para transcodificá-la em um fluxo de áudio HLS.
Defina InputRef na opção ManifestExtend do GroupConfig para referenciar o arquivo "RefManifest" da entrada, reutilizando o manifesto original para adicionar faixas de áudio extras.
{
"Inputs": [
{
"Name": "ExtraAudio",
"InputFile": {
"Type": "OSS",
"Media": "http://your-bucket.oss-region.aliyuncs.com/in/extra-audio.mp4"
}
},
{
"Name": "RefManifest",
"InputFile": {
"Type": "OSS",
"Media": "http://your-bucket.oss-region.aliyuncs.com/in/manifest.m3u8"
}
}
],
"OutputGroups": [
{
"GroupConfig": {
"Type": "Hls",
"OutputFileBase": {
"Type": "OSS",
"Media": "http://your-bucket.oss-region.aliyuncs.com/out/demo"
},
"ManifestName": "manifest",
"ManifestExtend": {
"InputRef": "RefManifest"
}
},
"Outputs": [
{
"Name": "ExtraAudioOut",
"InputRef": "ExtraAudio",
"OutputFileName": "extra-audio",
"TemplateId": "#YourAudioTemplateId",
"hlsGroupConfig": {
"Type": "audio",
"Name":"Chinese",
"Language": "zh-cn"
}
}
]
}
]
}
Caso de uso 3: Substituir faixas de áudio
Este cenário baseia-se no Caso de uso 2. Use a opção Excludes dentro de ManifestExtend para excluir fluxos específicos do manifesto original.
|
Parâmetro |
Tipo |
Descrição |
|
Name |
string |
Atributo |
|
Type |
string |
Atributo Valores válidos:
|
|
Language |
string |
Atributo |
{
"Inputs": [
{
"Name": "ExtraAudio",
"InputFile": {
"Type": "OSS",
"Media": "http://your-bucket.oss-region.aliyuncs.com/in/extra-audio.mp4"
}
},
{
"Name": "RefManifest",
"InputFile": {
"Type": "OSS",
"Media": "http://your-bucket.oss-region.aliyuncs.com/in/manifest.m3u8"
}
}
],
"OutputGroups": [
{
"GroupConfig": {
"Type": "Hls",
"OutputFileBase": {
"Type": "OSS",
"Media": "http://your-bucket.oss-region.aliyuncs.com/out/demo"
},
"ManifestName": "manifest",
"ManifestExtend": {
"InputRef": "RefManifest",
"Excludes": [{
"Language": "en",
"Type": "Audio"
}]
}
},
"Outputs": [
{
"Name": "ExtraAudioOut",
"InputRef": "ExtraAudio",
"OutputFileName": "extra-audio",
"TemplateId": "#YourAudioTemplateId",
"hlsGroupConfig": {
"Type": "audio",
"Name":"Chinese",
"Language": "zh-cn"
}
}
]
}
]
}
Consulta dos resultados da tarefa
Chame a operação GetMediaConvertJob para consultar os detalhes de uma tarefa de transcodificação.
Notificações de callback
Tipo de evento: MediaConvertComplete
Não é possível configurar este evento no console. Em vez disso, chame a operação SetEventCallback.
Principais parâmetros de callback
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
|
|
Name |
String |
Sim |
Nome da tarefa principal. |
|
|
JobId |
String |
Sim |
ID da tarefa. |
|
|
Status |
String |
Sim |
Status da tarefa. |
|
|
TriggerSource |
String |
Não |
Origem que acionou a tarefa. |
|
|
FinishTime |
String |
Não |
Horário de conclusão da tarefa. O formato deve corresponder a |
|
|
UserData |
string |
Não |
String personalizada especificada no envio da tarefa. Esse valor é transmitido e retornado no callback. |
|
Exemplo
{
"FinishTime": "2025-05-09T08:03:21Z",
"JobId": "your-job-id",
"Status": "Success",
"TriggerSource": "IceWorkflow",
"UserData": "{\"ImsSrc\":\"Workflow\",\"TaskId\":\"e89a955d88ca47f0b9b79c562e5c622f\"}"
}
Reprodução do vídeo empacotado com múltiplas taxas de bits
Use o ApsaraVideo Player para reproduzir o vídeo empacotado com múltiplas taxas de bits.
Fluxo de trabalho de tradução de vídeo e empacotamento com múltiplas taxas de bits
Prepare as entradas: Forneça o arquivo de source.
Traduza: Traduza o arquivo de source para os idiomas de destino, como inglês e japonês, para gerar os arquivos de áudio ou vídeo correspondentes.
Transcodifique e empacote: Chame a operação
SubmitMediaConvertJobpara mesclar o conteúdo multilíngue e transcodificá-lo em um vídeo padronizado com múltiplas taxas de bits.