Todos os produtos
Search
Central de documentação

ApsaraVideo Media Processing:Executar empacotamento HLS

Última atualização: Jun 27, 2026

O empacotamento HLS gera uma master playlist que combina streams de vídeo, áudio e legendas com múltiplas taxas de bits em conteúdo de taxa de bits adaptativa. Crie um fluxo de trabalho de empacotamento HLS e chame a operação AddMedia com o ID do fluxo de trabalho para processar os vídeos.

Procedimento

  1. Crie um fluxo de trabalho de empacotamento HLS. A tabela a seguir descreve os principais objetos. Detalhes da API: Adicionar um fluxo de trabalho de mídia.

    Objeto

    Descrição

    Topology

    Processo de negócios definido como um grafo acíclico direcionado (DAG).

    Activity

    Nós que constituem a topologia. A tabela a seguir descreve as atividades de empacotamento HLS.

    Dependencies

    Arestas na topologia que definem dependências entre atividades.

    Tabela 1: Atividades de empacotamento HLS

    Activity

    Description

    Dependency

    PackageConfig

    Especifique o local de saída da master playlist.

    • Nó pai compatível: Start

    • Nós filhos compatíveis: SubtitleGroup, AudioGroup e Transcode apenas para streams de vídeo

    SubtitleGroup

    Defina o ID e o idioma de cada grupo de legendas.

    • Nó pai compatível: PackageConfig

    • Nó filho compatível: Transcode apenas para streams de legendas

    AudioGroup

    Defina o ID e o idioma de cada grupo de áudio.

    • Nó pai compatível: PackageConfig

    • Nó filho compatível: Transcode apenas para streams de áudio

    Transcode

    Extrai streams de vídeo, áudio ou legendas.

    • Nós pais compatíveis: PackageConfig, SubtitleGroup e AudioGroup.

    • Nó filho compatível: GenerateMasterPlayList

    GenerateMasterPlayList

    Combina streams de vídeo, áudio e legendas com múltiplas taxas de bits em uma master playlist.

    • Nó pai compatível: Transcode

    • Nó filho compatível: Report

  2. Chame a operação Adicionar um arquivo de mídia para acionar o fluxo de trabalho:

    • Especifique o ID do fluxo de trabalho de empacotamento HLS.

    • Para substituir a URL do arquivo de legenda na atividade Transcode, use o parâmetro OverrideParams. Apenas arquivos de legenda WebVTT são suportados.

    • Defina TriggerMode como NotInAuto.

Cenário

Este exemplo extrai duas streams de vídeo, três streams de áudio e duas streams de legendas WebVTT de um arquivo de source MXF (os formatos MP4, FLV, M3U8 e TS também são suportados) e gera uma master playlist.

Especificar o local de saída e o nome da master playlist

  • Especifique o bucket do OSS para a master playlist.

  • Especifique o local.

  • Especifique o nome.

    Código de exemplo:

    {
    "Parameters" : {
    "Output" : "{\"Bucket\": \"processedmediafile\",\"Location\": \"oss-cn-hangzhou\",\"MasterPlayListName\": \"{MediaId}/{RunId}/hls/master.m3u8\"}"
    },
    "Type" : "PackageConfig"
    }

Especificar um grupo de áudio

Especifique o ID do grupo de áudio. As duas streams de áudio pertencem ao mesmo grupo. Código de exemplo:

{
"Parameters" : {
"GroupId" : "audios"
},
"Type" : "AudioGroup"
}
  • GroupId: ID do grupo de áudio. Definido como audios neste exemplo.

  • Type: AudioGroup.

Extrair streams de áudio

  • Para extrair streams de áudio do arquivo de source MXF, remova as streams de vídeo.

  • Configurações de saída das streams de áudio:

    • Codec: AAC

    • Taxa de amostragem: 48000 Hz

    • Formato: Estéreo

    Código de exemplo:

    
    {
    "Name" : "audio-extract-1",
    "Parameters" : {
    "Outputs" : "[{\"TemplateId\":\"S00000001-100020\",\"AudioStreamMap\":\"0:a:0\",\"Video\":{\"Remove\":\"true\"}}]",
    "ExtXMedia" : "{\"URI\": \"sd/audio-en.m3u8\",\"Name\": \"audio-en\",\"Language\": \"en-US\"}"
    }
    • TemplateId: ID do modelo de transcodificação. O modelo S00000001-100020 extrai um arquivo de áudio M3U8 a 80 Kbit/s. Detalhes dos modelos predefinidos.

    • AudioStreamMap: número de sequência da stream de áudio. Detalhes: seção "Output" em Detalhes dos parâmetros.

    • Remove: indica se as streams de vídeo devem ser removidas da saída. Detalhes dos parâmetros.

    • ExtXMedia: informações da playlist de mídia. URI especifica o nome da playlist. Detalhes: seção "ExtXMedia" em Detalhes dos parâmetros.

    • Type: Transcode.

Extrair streams de vídeo

Para extrair streams de vídeo do arquivo de source MXF, remova as streams de áudio. Código de exemplo:

{
"Name" : "video-extract",
"Parameters" : {
"Outputs" : "[{\"TemplateId\":\"1fe5393bdb7b2b883f0a0fc91e81****\",\"Audio\":{\"Remove\":\"true\"}}]",
"MultiBitrateVideoStream" : "{\"URI\": \"sd/video1.m3u8\"}"
},
"Type" : "Transcode"
}
  • Este exemplo usa um modelo de transcodificação personalizado (ID: 1fe5393bdb7b2b883f0a0fc91e81****). Para criar um, faça login no console do ApsaraVideo Media Processing (MPS), escolha Template Management > Transcoding Template e clique em Create Template na aba Custom Template. Configure os seguintes parâmetros de vídeo:

    • Codec: H.264

    • Resolução: 384 × 216

    • Profile: Main

    • Taxa de bits: 240 Kbit/s

    • FPS: 25

    • Formato de pixel: YUV420P Tamanho máximo do GOP: 1 Duração do segmento: 4 segundos

    • Formato de saída: M3U8

  • Remove: indica se as streams de áudio devem ser removidas da saída. Detalhes dos parâmetros.

  • MultiBitrateVIdeoStream: informações da playlist de mídia. URI especifica o nome da playlist. Detalhes dos parâmetros.

  • Type: Transcode.

Especificar um grupo de legendas

Especifique o ID do grupo de legendas. As duas streams de legendas pertencem ao mesmo grupo. Código de exemplo:

{
"Parameters" : {
"GroupId" : "subtitles"
},
"Type" : "SubtitleGroup"
}
  • GroupId: ID do grupo de legendas. Definido como subtitles neste exemplo.

  • Type: SubtitleGroup.

Extrair streams de legendas

Faça upload dos arquivos de legenda WebVTT para o OSS. Código de exemplo:


{
"Name" : "subtitle-extract-1",
"Parameters" : {
"WebVTTSubtitleURL" : "http://example-bucket-****.oss-cn-hangzhou.aliyun-inc.com/ShawshankRedemption****.vtt",
"ExtXMedia" : "{\"URI\": \"zh/subtitle1-cn.m3u8\",\"Name\": \"subtitle-cn\",\"Language\": \"cn\"}"
},
"Type" : "Transcode"
}
  • WebVTTSubtitleURL: URL do arquivo de legenda. Use o parâmetro OverrideParams na chamada AddMedia para substituir esta URL. Detalhes: parâmetro OverrideParams na seção "Request parameters" do tópico Adicionar um arquivo de mídia.

  • ExtXMedia: informações da playlist de mídia. URI especifica o nome da playlist. Detalhes: seção "ExtXMedia" em Detalhes dos parâmetros.

  • Type: Transcode.

Gerar uma master playlist

Gere uma master playlist a partir das streams de áudio, vídeo e legendas extraídas. Código de exemplo:

{
"Parameters" : {
"MasterPlayList" : "{\"MultiBitrateVideoStreams\": [{\"RefActivityName\": \"video-extract\",\"ExtXStreamInfo\": {\"BandWidth\": \"1110000\",\"Audio\": \"audios\",\"Subtitles\": \"subtitles\"}}]}"
},
"Type" : "GenerateMasterPlayList"
}
  • MasterPlayList: configuração da master playlist. Detalhes: seção "MasterPlayList" em Detalhes dos parâmetros.

  • MultiBitrateVideoStreams: streams de vídeo com múltiplas taxas de bits. Detalhes: seção "MasterPlayList" em Detalhes dos parâmetros.

  • RefActivityName: nome da atividade de extração de stream de vídeo.

  • ExtXStreamInfo: atributos das streams de vídeo com múltiplas taxas de bits. Audio especifica o grupo de áudio e Subtitles especifica o grupo de legendas. Detalhes: seção "ExtXStreamInfo" em Detalhes dos parâmetros.

  • Type: GenerateMasterPlayList.

Código de exemplo completo da topologia:

{
"Activities" : {
"package-node" : {
"Name" : "package-node",
"Parameters" : {
"Output" : "{\"Bucket\": \"processedmediafile\",\"Location\": \"oss-cn-hangzhou\",\"MasterPlayListName\": \"{MediaId}/{RunId}/hls/master.m3u8\"}"
},
"Type" : "PackageConfig"
},
"audioGroupNode" : {
"Name" : "audioGroupNode",
"Parameters" : {
"GroupId" : "audios"
},
"Type" : "AudioGroup"
},
"subtitleGroupNode" : {
"Name" : "subtitleGroupNode",
"Parameters" : {
"GroupId" : "subtitles"
},
"Type" : "SubtitleGroup"
},
"video-extract-1" : {
"Name" : "video-extract-1",
"Parameters" : {
"Outputs" : "[{\"TemplateId\":\"1fe5393bdb7b2b883f0a0fc91e81344a\",\"Audio\":{\"Remove\":\"true\"}}]",
"MultiBitrateVideoStream" : "{\"URI\": \"sd/video1.m3u8\"}"
},
"Type" : "Transcode"
},
"video-extract-2" : {
"Name" : "video-extract-1",
"Parameters" : {
"Outputs" : "[{\"TemplateId\":\"1fe5393bdb7b2b883f0a0fc91e81344b\",\"Audio\":{\"Remove\":\"true\"}}]",
"MultiBitrateVideoStream" : "{\"URI\": \"sd/video2.m3u8\"}"
},
"Type" : "Transcode"
},
"audio-extract-1" : {
"Name" : "audio-extract-1",
"Parameters" : {
"Outputs" : "[{\"TemplateId\":\"S00000001-100020\",\"AudioStreamMap\":\"0:a:0\"}]",
"ExtXMedia" : "{\"URI\": \"sd/audio-en-1.m3u8\",\"Name\": \"audio-en\",\"Language\": \"en-US\"}"
},
"Type" : "Transcode"
},
"audio-extract-2" : {
"Name" : "audio-extract-2",
"Parameters" : {
"Outputs" : "[{\"TemplateId\":\"S00000001-100020\",\"AudioStreamMap\":\"0:a:1\"}]",
"ExtXMedia" : "{\"URI\": \"sd/audio-cn.m3u8\",\"Name\": \"audio-cn\",\"Language\": \"cn\"}"
},
"Type" : "Transcode"
},
"audio-extract-3" : {
"Name" : "audio-extract-3",
"Parameters" : {
"Outputs" : "[{\"TemplateId\":\"S00000001-100020\",\"AudioStreamMap\":\"0:a:2\"}]",
"ExtXMedia" : "{\"URI\": \"sd/audio-de.m3u8\",\"Name\": \"audio-de\",\"Language\": \"de\"}"
},
"Type" : "Transcode"
},
"subtitle-extract-1" : {
"Name" : "subtitle-extract-1",
"Parameters" : {
"WebVTTSubtitleURL" : "http://example-bucket-****.oss-test.aliyun-inc.com/1****.vtt",
"ExtXMedia" : "{\"URI\": \"zh/subtitle1-cn.m3u8\",\"Name\": \"subtitle-cn\",\"Language\": \"cn\"}"
},
"Type" : "Transcode"
},
"subtitle-extract-2" : {
"Name" : "subtitle-extract-2",
"Parameters" : {
"WebVTTSubtitleURL" : "http://example-bucket-****.oss-cn-hangzhou.aliyun-inc.com/ShawshankRedemption****.vtt",
"ExtXMedia" : "{\"URI\": \"zh/subtitle1-en.m3u8\",\"Name\": \"subtitle-en\",\"Language\": \"en-US\"}"
},
"Type" : "Transcode"
},
"masterPlayListGenerate" : {
"Name" : "masterPlayListGenerate",
"Parameters" : {
"MasterPlayList" : "{\"MultiBitrateVideoStreams\": [{\"RefActivityName\": \"video-extract-1\",\"ExtXStreamInfo\": {\"BandWidth\": \"1110000\",\"Audio\": \"audios\",\"Subtitles\": \"subtitles\"}}, {\"RefActivityName\": \"video-extract-2\",\"ExtXStreamInfo\": {\"BandWidth\": \"5000000\",\"Audio\": \"audios\",\"Subtitles\":\"subtitles\"}}]}"
},
"Type" : "GenerateMasterPlayList"
},
"activityEnd" : {
"Name" : "activityEnd",
"Parameters" : {
"PublishType" : "Manual"
},
"Type" : "Report"
},
"activityStart" : {
"Name" : "activityStart",
"Parameters" : {
"PipelineId" : "900ededca77641ecbecd4f44cc3a2965",
"Role" : "AliyunMTSDefaultRole",
"InputFile" : "{\"Bucket\":\"videouploaded\",\"Location\":\"oss-cn-hangzhou\",\"ObjectPrefix\":\"uploaded/\"}"
},
"Type" : "Start"
}
},
"Dependencies" : {
"video-extract-1" : [ "masterPlayListGenerate" ],
"video-extract-2" : [ "masterPlayListGenerate" ],
"audio-extract-1" : [ "masterPlayListGenerate" ],
"audio-extract-2" : [ "masterPlayListGenerate" ],
"audio-extract-3" : [ "masterPlayListGenerate" ],
"subtitle-extract-1" : [ "masterPlayListGenerate" ],
"subtitle-extract-2" : [ "masterPlayListGenerate" ],
"package-node" : [ "video-extract-1", "video-extract-2","subtitleGroupNode", "audioGroupNode" ],
"audioGroupNode" : [ "audio-extract-1", "audio-extract-2","audio-extract-3"],
"subtitleGroupNode" : [ "subtitle-extract-1", "subtitle-extract-2" ],
"masterPlayListGenerate" : [ "activityEnd" ],
"activityEnd" : [ ],
"activityStart" : [ "package-node" ]
}
}

Código de exemplo