Pular para o conteúdo
fernando.moretes.com
BlogEstudosCursosE-booksOpen SourcePodcasts
Loading…
Fernando Azevedo

Arquiteto de TI Especialista

Arquitetura, AWS, IA em produção, sistemas financeiros e FinOps, escritos a partir do que foi operado, com os números.

  • LinkedIn
  • GitHub
  • E-mail

Conteúdo

  • Blog
  • Estudos de arquitetura
  • Cursos
  • E-books
  • Open Source
  • Podcasts
  • Assuntos
  • Trilhas

Ferramentas

  • Well-Architected self-check
  • Arquitetura deste site
  • Números públicos
  • Histórico de estudo

Sobre

  • Comunidade
  • IA Builder
  • Perfil
  • Currículo (CV)
  • Trabalhe comigo
  • Media kit
  • RSS do blog
  • RSS dos estudos
  • Artigos narrados (podcast)
  • llms.txt
  • Termos, privacidade e uso de IA

(c) 2026 Fernando Francisco Azevedo

Blog/Artigo
RSSMarkdownLLMs
Dados & PlataformasAnatomia do Padrão

MediaLive sem timecode: o que o Video Aligned Locking muda na redundância

13 de set. de 2026 7 minAvançado Com apoio de IA000 visualizações00 reproduções
Ouvir artigo

15:25 · voz do Fernando

Todo desenho de streaming ao vivo com redundância promete a mesma coisa: se o pipeline A cair, o player continua no B sem que o espectador perceba. O que quase ninguém escreve no ADR é a condição para essa promessa valer, os dois pipelines precisam estar no mesmo frame, no mesmo instante, com os mesmos limites de segmento. Durante anos isso exigiu timecode embutido na fonte, e timecode é coisa de caminhão de externa, não de encoder SRT num estádio ou de um push RTMP saindo de um estúdio pequeno. O Video Aligned Locking do AWS Elemental MediaLive, anunciado em 12 de setembro de 2026, tira essa dependência: o encoder compara assinaturas visuais dos frames entre os pipelines e alinha por conteúdo. Vale entender o que ele resolve, o que ele não resolve e onde ele falha sem avisar.

O problema: redundância que só funciona no slide

Um canal STANDARD do MediaLive roda dois pipelines em Availability Zones diferentes. O sistema upstream manda o mesmo sinal para as duas entradas, o MediaLive processa em paralelo e cada output group entrega duas cópias, uma por pipeline, para o downstream (MediaPackage, um origin próprio, um CDN). A redundância está no downstream escolher qualquer uma das duas a qualquer momento.

O que quebra: dois encoders independentes não começam no mesmo frame. Cada um recebe o sinal com jitter próprio, começa a codificar num instante próprio e corta segmentos em pontos próprios. Sem sincronização, o segmento 1042 do pipeline 0 e o segmento 1042 do pipeline 1 têm conteúdos diferentes, deslocados por algumas dezenas de frames. Quando o origin troca de pipeline, o player vê um salto para frente ou uma repetição. Em esporte, isso é o gol que o espectador viu duas vezes.

A resposta histórica: timecode embutido (SMPTE 12M, VITC, ancillary data). Com timecode, os dois encoders sabem que "este frame é 14:32:07:12" e cortam no mesmo ponto. É o método SOURCE_TIMECODE, padrão do MediaLive até hoje. Funciona bem em broadcast tradicional, onde a cadeia inteira carrega timecode desde a câmera.

Onde a resposta histórica não chega: a maioria dos fluxos digitais que vi passar por SRT, RTMP push ou contribuição por IP simplesmente não carrega timecode, ou carrega um que reinicia, salta ou vem de dois encoders com relógio diferente. Nesses casos, o MediaLive cai para sincronização aproximada, o que na prática significa "não confie no failover". A alternativa era hardware especializado antes do encoder, ou orquestração externa. Custo de manter isso por anos, não de comprar: mais um ponto de falha e mais um plantão.

Anatomia: modos, métodos e o pool de locking

O pipeline locking vive em encoderSettings.globalConfiguration e tem duas camadas que a documentação separa com cuidado.

Modo (outputLockingMode): DISABLED, PIPELINE_LOCKING (os pipelines travam um no outro) ou EPOCH_LOCKING (os dois travam no Unix epoch, ou num CustomEpoch a partir de 2000-01-01T00:00:00, só para CMAF Ingest e MediaPackage V2). O padrão num canal standard é PIPELINE_LOCKING, e ele é best-effort: quando não consegue travar, o MediaLive continua processando e não trata isso como falha. Esse detalhe importa mais do que parece, nada para, nada alarma, o failover só deixa de ser frame-accurate.

Método (outputLockingSettings.pipelineLockingSettings.pipelineLockingMethod): só existe dentro de PIPELINE_LOCKING. SOURCE_TIMECODE usa o timecode embutido; VIDEO_ALIGNMENT calcula uma assinatura visual por frame em cada encoder e alinha os frames cujo conteúdo bate. Com VIDEO_ALIGNMENT, o timecode existente é ignorado para qualquer decisão de locking, não é fallback, é substituição.

O pool: os pipelines participantes formam um pool de locking com um pipeline de referência. A métrica InputVideoAligned da referência é sempre 1; os demais só marcam 1 quando alinharam com ela. Um canal standard tem os dois pipelines no pool. Um canal SINGLE_PIPELINE entra no pool via linked channels: um canal primary é o dono do grupo, um follower aponta para o ARN do primary, mesma conta, um follower por primary, e o primary não precisa estar rodando para o follower funcionar. É isso que permite dois single-pipeline em regiões diferentes se comportarem como um standard de duas AZs.

Um detalhe de linha do tempo: o campo VIDEO_ALIGNMENT já aparecia no SDK em 26 de dezembro de 2025; o What's New é de setembro de 2026. Se sua IaC já expõe o campo, não é acidente.

Video Aligned Locking: dois pipelines, um follower cross-region, um pool

O mesmo sinal sem timecode chega a três encoders; o pool compara assinaturas visuais, alinha o corte de segmento e expõe o estado em duas métricas. O downstream troca de cópia sem salto.

🟧 AWS us-east-1, canal STANDARD
  • Pipeline 0 · AZ-a · referência do pool
  • Pipeline 1 · AZ-b · segue a referência
🟧 AWS us-west-2: SINGLE_PIPELINE linked
  • Follower channel · aponta para o ARN do primary
🔧 Pool de locking: VIDEO_ALIGNMENT
  • Assinatura visual · por frame, por encoder
  • Comparação de frames · alinha corte de segmento
  • CloudWatch · PipelinesLocked · InputVideoAligned
📤 Distribuição
  • MediaPackage / CMAF Ingest · segmentos idênticos por pipeline
  • CDN → player · failover sem salto

Quando usar, e as regras que derrubam o lock em silêncio

Use VIDEO_ALIGNMENT quando: a fonte é SRT, RTMP push, RTP ou um Elemental Link sem timecode confiável; os dois pipelines recebem exatamente o mesmo conteúdo; e o que você quer é failover entre cópias ou troca de input frame-accurate. Use SOURCE_TIMECODE quando a cadeia já carrega timecode limpo desde a câmera, ele continua sendo o método com mais histórico em produção e o único que cobre Microsoft Smooth. Use EPOCH_LOCKING quando precisa que canais sem relação entre si produzam segmentos com os mesmos limites de tempo absoluto; ele exige timecode embutido dentro de 2 minutos do epoch e não combina com VIDEO_ALIGNMENT.

Agora as regras que ninguém lê e que custam uma madrugada:

Inputs incompatíveis não geram erro de validação. MP4_FILE, TS_FILE, URL_PULL com HLS e RTMP_PULL fazem o video alignment rodar em open loop, processando, mas sem travar. O canal salva, sobe e reporta InputVideoAligned = 0. Isso é deliberado, para permitir input switching com fontes mistas; também é a armadilha mais comum.

Input HLS mata o locking do canal inteiro. Se o canal contém um input HLS, o MediaLive para de tentar travar e não retoma nem depois de trocar para outro input. Um slate HLS "de emergência" na lista de inputs anula a redundância que você desenhou.

Frame rate precisa de conversão simples. Entrada e saída devem ser múltiplos inteiros uma da outra: 29.97 → 59.94 funciona; 59.94 → 60 não; 45 → 60 não. O MediaLive decide na troca de input e não reavalia se o frame rate mudar no meio. ComplexFRCPresent = 1 é o sinal. E Framerate control precisa ser Specified, nunca Initialize_from_source.

Conteúdo que faz loop confunde a assinatura. Um slate de 10 segundos repetido tem frames idênticos em posições diferentes; o comparador pode alinhar no frame errado ou oscilar. A documentação lista isso como causa de InputVideoAligned alternando entre 0 e 1.

Três formas de travar pipelines no MediaLive

ConfiguraçãoExige timecode?Outputs cobertosQuando escolher
PIPELINE_LOCKING + SOURCE_TIMECODE (padrão)outputLockingMode: PIPELINE_LOCKING, método padrãoRecomendado; sem ele cai para sincronização aproximadaHLS live, MediaPackage, CMAF Ingest, UDP/SRT segmentado, Microsoft SmoothCadeia broadcast com timecode limpo desde a origem
PIPELINE_LOCKING + VIDEO_ALIGNMENTpipelineLockingSettings.pipelineLockingMethod: VIDEO_ALIGNMENTNão; timecode existente é ignoradoHLS live, MediaPackage, CMAF Ingest, UDP/SRT segmentado (sem Smooth)SRT/RTMP push sem timecode; linked channels cross-region; inputs sem file/HLS/RTMP_PULL
EPOCH_LOCKINGoutputLockingMode: EPOCH_LOCKING, opcional CustomEpochSim, dentro de 2 minutos do epochOs mesmos, mas desliga SCTE-35 passthrough e manifest decoration em HLS/MediaPackageCanais independentes que precisam de limites de segmento em tempo absoluto

Operar isso: métricas, alarmes e o custo real

O locking é best-effort e silencioso, então a observabilidade não é opcional, é a única forma de saber se a redundância que você pagou existe agora.

Três métricas, dimensões ChannelId e Pipeline, estatística Minimum:

  • PipelinesLocked: 1 quando todos os pares elegíveis estão sincronizados; 0 quando pelo menos um não está. Vale para standard, epoch e linked channels, e reporta o mesmo estado com VIDEO_ALIGNMENT. Sem datapoints significa canal parado.
  • InputVideoAligned: 1 quando o pipeline alinhou com a referência do pool. A referência marca 1 sempre. Sem datapoints significa que o método não é VIDEO_ALIGNMENT ou o pipeline ainda não processou frame algum.
  • ComplexFRCPresent: 1 significa conversão complexa de frame rate e nenhuma tentativa de locking.

Meu alarme mínimo: PipelinesLocked com Minimum < 1 por 3 períodos de 1 minuto num canal que deveria estar travado, e InputVideoAligned transitando mais de N vezes em 5 minutos, oscilação é sintoma de rede instável entre os dois caminhos de contribuição ou de conteúdo em loop, e os dois exigem ação humana. Sem esses alarmes, a primeira notícia de que o lock caiu chega pelo espectador que viu o replay duplicado.

Custo: o MediaLive cobra por hora de input, output e add-on, arredondado ao minuto acima de um mínimo de 10 minutos. Um output 1080p AVC 5 Mbps 30 fps custa US$ 0,702/h on-demand em us-east-1; reservado por 12 meses cai para cerca de US$ 0,1726/h. Um canal standard custa menos que dois single-pipeline idênticos na mesma região, então o desenho de dois single-pipeline ligados só se justifica quando você precisa de duas regiões, não de duas AZs. O locking em si não tem linha própria na fatura; o que ele custa é o segundo caminho de contribuição até a outra região.

Anti-padrões que vi em desenhos de redundância ao vivo

  • Slate HLS na lista de inputs: um input HLS de emergência faz o MediaLive parar de travar o canal inteiro e não retomar, a redundância morre no dia em que ninguém está olhando.
  • Confiar no save do canal como validação: RTMP_PULL e file inputs passam sem erro e rodam em open loop; só InputVideoAligned conta a verdade.
  • Initialize_from_source no frame rate de saída: a documentação diz que não funciona bem com locking; Specified com numerador/denominador explícitos é o único caminho previsível.
  • Dois single-pipeline na mesma região para "ter controle": custa mais que um standard e não ganha nada em zona, linked channels são para cross-region.
  • Epoch locking com SCTE-35 em HLS/MediaPackage: o canal desliga passthrough e manifest decoration; a inserção de anúncio some sem que o time de ads saiba por quê.
  • Caminhos de contribuição assimétricos: mandar o sinal para a segunda região por uma rota com jitter muito diferente faz a assinatura oscilar; o lock vira intermitente, o pior estado possível.

Teste de aceitação antes do primeiro evento

Suba o canal com o input real, espere InputVideoAligned = 1 nos dois pipelines, e então force a troca de cópia no origin, no MediaPackage, alternando o endpoint de ingest ativo, enquanto grava a saída com um relógio de burn-in visível no vídeo. Se o relógio salta ou repete um frame, o lock não está fazendo o que o ADR promete. Repita com o input de backup ativo. Vinte minutos de teste valem mais que qualquer diagrama.

FA
Nota de curadoria
Arquiteto de TI Especialista

Eu trocaria para VIDEO_ALIGNMENT em qualquer canal cuja fonte seja SRT ou RTMP push de campo, e deixaria SOURCE_TIMECODE só onde a cadeia inteira é broadcast com timecode auditado. Antes de trocar, eu removeria todo input HLS e RTMP_PULL do canal e colocaria alarme em PipelinesLocked e InputVideoAligned no mesmo commit da mudança, não na semana seguinte. A lição dura por trás disso: em sistema best-effort, a ausência de erro não é prova de funcionamento; a única prova é a métrica em 1 no momento em que você força a falha. Já vi redundância desenhada, paga e apresentada em comitê que nunca esteve travada um único minuto, e ninguém soube até o evento.

Veredito

Adote com alarmes / Adopt with alarms

Video Aligned Locking é a peça que faltava para tratar fontes digitais sem timecode com a mesma seriedade que o broadcast tratava as suas, e a combinação com linked channels torna viável um canal ativo-ativo em duas regiões sem hardware na frente do encoder. Adote quando: a fonte não tem timecode confiável, os dois caminhos de contribuição entregam o mesmo conteúdo com jitter comparável, os inputs são todos compatíveis e o frame rate de saída é múltiplo inteiro do de entrada. Fique no SOURCE_TIMECODE quando a cadeia já carrega timecode limpo ou quando precisa de Microsoft Smooth. Em qualquer dos casos, o que decide se a redundância existe não é a configuração, é o alarme em PipelinesLocked que você vai ou não vai criar.

Referências

AWS What's New: MediaLive enables frame-accurate pipeline locking for streams without timecode (2026-09-12)MediaLive User Guide: Implementing pipeline locking (modes, methods, applicable outputs)MediaLive User Guide: Input and output requirements, incl. requirements for video aligned lockingMediaLive User Guide: Setting up for locking (console fields, framerate control)MediaLive User Guide: Pipeline locking troubleshooting (ComplexFRCPresent, InputVideoAligned)MediaLive User Guide: Pipeline locking metrics (PipelinesLocked, InputVideoAligned)MediaLive User Guide: Channel class and linked channels for single-pipeline channelsCloudFormation: AWS::MediaLive::Channel PipelineLockingSettings (CustomEpoch, PipelineLockingMethod)
#MediaLive#live-streaming#pipeline-locking#multi-region#resilience#observability#media-services#SRT
Compartilhar:LinkedInWhatsAppXBaixar em Markdown
Fonte analisada: AWS Elemental MediaLive enables frame-accurate pipeline locking for streams without timecode
Próximo passo
Trilha Arquiteto de IA, gratuitaFundamentos, LLMs, RAG, tools, MCP e arquitetura na AWS, em aulas curtas e interativas.Começar a trilhaAgentes de IA em produção na AWSComo eu desenho, oriento e audito agentes que vão ao ar, com os números e as fontes.Ver o IA Builder

Continue lendo

Dados & PlataformasCapacidade por tipo de trabalho no Amazon Connect: o que muda de fatoO Amazon Connect passou a permitir concorrência por tipo de trabalho dentro dos canais Task e Email, e não mais só por canal. O ganho operacional é concreto em filas de alta variância, disputa, KYC, backoffice regulatório. O preço é uma taxonomia nova para governar e um modo de falha que não grita: contato com workload type sem linha correspondente no routing profile fica na fila para sempre.Ler Dados & PlataformasMediaTailor Analytics: console, BI ou lakehouse?O dashboard de analytics do AWS Elemental MediaTailor muda a primeira linha de investigação para publishers que operam SSAI em múltiplas regiões. Eu o vejo como uma excelente camada operacional, mas não como substituto automático para BI, reconciliação financeira ou observabilidade de engenharia.Ler Dados & PlataformasAmazon Connect compact mode: densidade operacional com cautelaO compact mode dos dashboards do Amazon Connect Customer parece pequeno, mas toca um ponto central de operações críticas: reduzir o tempo entre anomalia, percepção e ação. Eu o vejo como uma melhoria útil de cockpit operacional, desde que não vire substituto para alertas, SLOs, automação e desenho cuidadoso de métricas.Ler
AnteriorLoop recursivo no Lambda: quatro guardrails comparados no Sovereign CloudPróximoCold start de LLM no HyperPod: de 27 minutos a segundos com model caching
Gostou desta análise? Receba a próxima.

Deep dives de arquitetura, AWS, IA e mercado: direto no seu email. Grátis.

Sem spam · cancele quando quiser

Pergunte ao Fernando sobre isto

Uma resposta focada sobre este artigo, do meu assistente de IA, baseada no meu trabalho.

Participe da conversa

Entre para comentar

Confirme seu e-mail para participar, você também recebe a newsletter. Sem senha.

Neste artigo
O problema: redundância que só funciona no slideAnatomia: modos, métodos e o pool de lockingArquiteturaQuando usar, e as regras que derrubam o lock em silêncioTrês formas de travar pipelines no MediaLiveOperar isso: métricas, alarmes e o custo realAntipadrõesVereditoReferências