MediaLive without timecode: what Video Aligned Locking changes in redundancy
Listen to article
generated on playGenerated only on first play
Powered by Amazon Polly + OmniVoice
MediaLive can now synchronize pipelines by visual frame signature, with no dependency on embedded timecode — precisely the missing piece for field SRT/RTMP sources and for single-pipeline channels linked across regions. I dissect the pattern: the problem it solves, the anatomy of locking modes and methods, the frame-rate and input rules that silently break sync, and the three metrics that need alarms before this goes to production.
Every redundant live-streaming design promises the same thing: if pipeline A dies, the player carries on with B and the viewer never notices. What almost nobody writes into the ADR is the condition for that promise to hold — both pipelines must be on the same frame, at the same instant, with the same segment boundaries. For years that required embedded timecode at the source, and timecode belongs to OB trucks, not to an SRT encoder in a stadium or an RTMP push leaving a small studio. Video Aligned Locking in AWS Elemental MediaLive, announced on September 12, 2026, removes that dependency: the encoder compares visual signatures of frames across pipelines and aligns on content. It is worth understanding what it solves, what it does not, and where it fails without telling you.
The problem: redundancy that only works on the slide
A MediaLive STANDARD channel runs two pipelines in different Availability Zones. The upstream system sends the same signal to both inputs, MediaLive processes in parallel, and each output group delivers two copies — one per pipeline — to the downstream (MediaPackage, your own origin, a CDN). Redundancy lives in the downstream being able to pick either copy at any moment.
What breaks: two independent encoders do not start on the same frame. Each receives the signal with its own jitter, starts encoding at its own instant, and cuts segments at its own points. Without synchronization, segment 1042 on pipeline 0 and segment 1042 on pipeline 1 contain different content — shifted by a few dozen frames. When the origin switches pipelines, the player sees a jump forward or a repeat. In sports, that is the goal the viewer watched twice.
The historical answer: embedded timecode (SMPTE 12M, VITC, ancillary data). With timecode, both encoders know "this frame is 14:32:07:12" and cut at the same point. That is the SOURCE_TIMECODE method, MediaLive's default to this day. It works well in traditional broadcast, where the whole chain carries timecode from the camera onward.
Where the historical answer stops: most digital flows I have seen over SRT, RTMP push or IP contribution simply carry no timecode — or carry one that resets, jumps, or comes from two encoders with different clocks. In those cases MediaLive falls back to approximate synchronization, which in practice means "do not trust the failover". The alternative was specialized hardware in front of the encoder, or external orchestration. The cost of keeping that alive for years, not of buying it: one more failure point and one more on-call rotation.
Anatomy: modes, methods and the locking pool
Pipeline locking lives in encoderSettings.globalConfiguration and has two layers the documentation keeps carefully apart.
Mode (outputLockingMode): DISABLED, PIPELINE_LOCKING (pipelines lock to each other) or EPOCH_LOCKING (both lock to the Unix epoch — or to a CustomEpoch from 2000-01-01T00:00:00 onward, CMAF Ingest and MediaPackage V2 only). The default on a standard channel is PIPELINE_LOCKING, and it is best-effort: when it cannot lock, MediaLive keeps processing and does not treat that as a fault. This matters more than it looks — nothing stops, nothing alarms, the failover just stops being frame-accurate.
Method (outputLockingSettings.pipelineLockingSettings.pipelineLockingMethod): only exists inside PIPELINE_LOCKING. SOURCE_TIMECODE uses embedded timecode; VIDEO_ALIGNMENT computes a visual signature per frame in each encoder and aligns the frames whose content matches. With VIDEO_ALIGNMENT, any existing timecode is ignored for locking decisions — it is not a fallback, it is a replacement.
The pool: participating pipelines form a locking pool with one reference pipeline. The reference's InputVideoAligned metric is always 1; the others only report 1 once aligned with it. A standard channel has both pipelines in the pool. A SINGLE_PIPELINE channel joins the pool through linked channels: a primary channel owns the group, a follower points at the primary's ARN — same account, one follower per primary, and the primary does not need to be running for the follower to work. That is what lets two single-pipeline channels in different regions behave like a two-AZ standard channel.
A timeline detail: the VIDEO_ALIGNMENT value already showed up in the SDK on December 26, 2025; the What's New post is from September 2026. If your IaC already exposes the field, it is not an accident.
Video Aligned Locking: two pipelines, one cross-region follower, one pool
The same timecode-less signal reaches three encoders; the pool compares visual signatures, aligns segment boundaries and exposes state through two metrics. The downstream switches copies without a jump.
- Pipeline 0 · AZ-a · referência do pool
- Pipeline 1 · AZ-b · segue a referência
- Follower channel · aponta para o ARN do primary
- Assinatura visual · por frame, por encoder
- Comparação de frames · alinha corte de segmento
- CloudWatch · PipelinesLocked · InputVideoAligned
- MediaPackage / CMAF Ingest · segmentos idênticos por pipeline
- CDN → player · failover sem salto
When to use it — and the rules that silently drop the lock
Use VIDEO_ALIGNMENT when: the source is SRT, RTMP push, RTP or an Elemental Link without reliable timecode; both pipelines receive exactly the same content; and what you want is failover between copies or frame-accurate input switching. Use SOURCE_TIMECODE when the chain already carries clean timecode from the camera onward — it remains the method with the longest production track record and the only one covering Microsoft Smooth. Use EPOCH_LOCKING when you need unrelated channels to produce segments with the same absolute time boundaries; it requires embedded timecode within 2 minutes of epoch and does not combine with VIDEO_ALIGNMENT.
Now the rules nobody reads and that cost a night shift:
Incompatible inputs raise no validation error. MP4_FILE, TS_FILE, URL_PULL with HLS and RTMP_PULL make video alignment run in open loop — processing, but not locking. The channel saves, starts, and reports InputVideoAligned = 0. This is deliberate, to allow input switching with mixed sources; it is also the most common trap.
An HLS input kills locking for the whole channel. If the channel contains an HLS input, MediaLive stops trying to lock and does not resume even after switching to another input. An "emergency" HLS slate in the input list voids the redundancy you designed.
Frame rate needs a simple conversion. Input and output must be whole-number multiples of each other: 29.97 → 59.94 works; 59.94 → 60 does not; 45 → 60 does not. MediaLive decides at input switch and does not re-evaluate if the frame rate changes mid-source. ComplexFRCPresent = 1 is the tell. And Framerate control must be Specified, never Initialize_from_source.
Looping content confuses the signature. A 10-second slate on repeat has identical frames at different positions; the comparator may align on the wrong frame or oscillate. The documentation lists this as a cause of InputVideoAligned flipping between 0 and 1.
Three ways to lock pipelines in MediaLive
| Configuration | Requires timecode? | Outputs covered | When to pick it | |
|---|---|---|---|---|
| PIPELINE_LOCKING + SOURCE_TIMECODE (default) | outputLockingMode: PIPELINE_LOCKING, default method | Recommended; without it, falls back to approximate sync | HLS live, MediaPackage, CMAF Ingest, segmented UDP/SRT, Microsoft Smooth | Broadcast chain with clean timecode from the origin |
| PIPELINE_LOCKING + VIDEO_ALIGNMENT | pipelineLockingSettings.pipelineLockingMethod: VIDEO_ALIGNMENT | No; existing timecode is ignored | HLS live, MediaPackage, CMAF Ingest, segmented UDP/SRT (no Smooth) | SRT/RTMP push without timecode; cross-region linked channels; no file/HLS/RTMP_PULL inputs |
| EPOCH_LOCKING | outputLockingMode: EPOCH_LOCKING, optional CustomEpoch | Yes, within 2 minutes of epoch | Same, but disables SCTE-35 passthrough and manifest decoration on HLS/MediaPackage | Independent channels that need segment boundaries on absolute time |
Operating it: metrics, alarms and the real cost
Locking is best-effort and silent, so observability is not optional — it is the only way to know whether the redundancy you paid for exists right now.
Three metrics, dimensions ChannelId and Pipeline, statistic Minimum:
PipelinesLocked: 1 when every eligible pair is synchronized; 0 when at least one is not. Applies to standard, epoch and linked channels, and reports the same state underVIDEO_ALIGNMENT. No datapoints means the channel is stopped.InputVideoAligned: 1 when the pipeline is aligned with the pool's reference. The reference always reports 1. No datapoints means the method is notVIDEO_ALIGNMENTor the pipeline has not processed a frame yet.ComplexFRCPresent: 1 means complex frame-rate conversion and no locking attempt at all.
My minimum alarm set: PipelinesLocked with Minimum < 1 for 3 periods of 1 minute on a channel that should be locked, and InputVideoAligned transitioning more than N times in 5 minutes — oscillation is a symptom of unstable network between the two contribution paths or of looping content, and both need a human. Without those alarms, the first news that the lock dropped arrives from the viewer who saw the replay twice.
Cost: MediaLive bills per hour of input, output and add-on, rounded up to the minute above a 10-minute minimum. A 1080p AVC 5 Mbps 30 fps output costs US$0.702/h on-demand in us-east-1; a 12-month reservation brings it to roughly US$0.1726/h. A standard channel costs less than two identical single-pipeline channels in the same region — so the two-linked-single-pipeline design only pays off when you need two regions, not two AZs. Locking itself has no line on the invoice; what it costs is the second contribution path into the other region.
Anti-patterns I have seen in live redundancy designs
- HLS slate in the input list: one emergency HLS input makes MediaLive stop locking the whole channel and never resume — redundancy dies on the day nobody is watching.
- Treating a successful channel save as validation:
RTMP_PULLand file inputs save without error and run in open loop; onlyInputVideoAlignedtells the truth. Initialize_from_sourceon the output frame rate: the docs say it does not work well with locking;Specifiedwith explicit numerator/denominator is the only predictable path.- Two single-pipeline channels in the same region "for control": costs more than a standard channel and gains nothing in zone spread — linked channels are for cross-region.
- Epoch locking with SCTE-35 on HLS/MediaPackage: the channel disables passthrough and manifest decoration; ad insertion vanishes and the ads team never learns why.
- Asymmetric contribution paths: sending the signal to the second region over a route with very different jitter makes the signature oscillate; the lock turns intermittent, the worst possible state.
Acceptance test before the first event
Start the channel with the real input, wait for InputVideoAligned = 1 on both pipelines, then force a copy switch at the origin — in MediaPackage, by flipping the active ingest endpoint — while recording the output with a visible burn-in clock in the picture. If the clock jumps or repeats a frame, the lock is not doing what the ADR promises. Repeat with the backup input active. Twenty minutes of testing are worth more than any diagram.
I would switch to VIDEO_ALIGNMENT on any channel whose source is field SRT or RTMP push, and keep SOURCE_TIMECODE only where the entire chain is broadcast with audited timecode. Before switching, I would remove every HLS and RTMP_PULL input from the channel and put alarms on PipelinesLocked and InputVideoAligned in the same commit as the change — not the week after. The hard-won lesson behind this: in a best-effort system, the absence of an error is not proof it works; the only proof is the metric sitting at 1 at the moment you force the failure. I have seen redundancy designed, paid for and presented to a steering committee that was never locked for a single minute — and nobody knew until the event.
Verdict
Video Aligned Locking is the missing piece for treating timecode-less digital sources with the seriousness broadcast always reserved for its own — and combined with linked channels it makes an active-active channel across two regions viable with no hardware in front of the encoder. Adopt it when: the source has no reliable timecode, both contribution paths deliver the same content with comparable jitter, every input is compatible, and the output frame rate is a whole-number multiple of the input. Stay on SOURCE_TIMECODE when the chain already carries clean timecode or when you need Microsoft Smooth. Either way, what decides whether the redundancy exists is not the configuration — it is the PipelinesLocked alarm you will or will not create.
References
Architecture, AWS, AI and market deep dives — straight to your inbox. Free.
No spam · unsubscribe anytime
Ask Fernando about this
Get a focused answer about this article from my AI assistant, grounded in my work.
Join the conversation
Sign in to comment
Verify your email to join in — you'll also get the newsletter. No password.
Keep reading
Architecture intelligence, in your inbox
Curated signals and original analysis on AWS, AI, distributed systems and the market — the way a solutions architect reads them.
- Curated AWS · AI · architecture · market signals
- New architecture studies & deep-dives when they ship
- Sharp summaries — depth without the noise
- No spam · double opt-in · unsubscribe anytime