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
-
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
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
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
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
Extrai streams de vídeo, áudio ou legendas.
-
Nós pais compatíveis: PackageConfig, SubtitleGroup e AudioGroup.
-
Nó filho compatível: 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
-
-
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" }Output: local de saída e nome da master playlist. Detalhes: seção "PackageConfig" em Métodos suportados para fluxos de trabalho de mídia.
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 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
-
Criar um fluxo de trabalho de empacotamento HLS.
-
Adicionar um arquivo de mídia.