AWS MediaLive Reservations for Inputs and Outputs
How AWS MediaLive reservations work for inputs and outputs: matching offerings to channel specs, standard vs single-pipeline, and when they don't pay off.
MediaLive bills are strange to read the first time. There’s no instance size, no vCPU count, nothing that looks like EC2. Instead you get a stack of line items for inputs and outputs, each priced by codec, resolution, bitrate and frame rate, and multiplied by every minute the channel runs. A 24x7 linear channel with a decent adaptive bitrate ladder can easily become one of the larger lines on a media company’s bill.
AWS offers reservations for exactly this case, and for always-on channels they’re worth real money. The trouble is that they’re bought per input and per output specification, they can’t be cancelled, and a reservation that doesn’t match your channel’s settings exactly does nothing at all. We’ve seen teams buy a year of HD outputs at <=30fps for channels whose frame rate was set to “initialize from source”. That’s twelve months of paying for minutes that never get used.
This guide covers how the pricing works, how reservations get applied, and how to buy them without overpaying. Prices quoted are on-demand list prices in us-east-1 at the time of writing, taken from AWS’s own worked examples on the MediaLive pricing page.
How MediaLive pricing actually works
A running channel doesn’t carry a channel fee of its own. You pay for the pieces inside it:
- Inputs. Each input attached to a running channel is billed, push or pull, even if it isn’t the active input and even if no content is arriving. The rate depends on the input codec, resolution and maximum bitrate you declare in the channel’s input specification.
- Outputs. Each output is billed while the channel runs, including outputs you’ve paused. The rate depends on codec, resolution, bitrate and frame rate.
- Add-ons. Features like advanced audio are charged once per running channel, not per output.
Billing is per minute, rounded up, with a 10-minute minimum per running resource.
Standard vs single-pipeline channels
A standard channel runs two pipelines in different Availability Zones so one can fail over to the other. A single-pipeline channel runs one. Standard isn’t priced at double, though. In AWS’s examples, a 1080p AVC output at 30 fps is $0.702 an hour on a standard channel and $0.4212 an hour on a single-pipeline channel. So a standard output costs about two-thirds more than a single-pipeline one.
Redundancy only helps if you have two contribution feeds to fail over between. If your source arrives as one stream from one encoder, a standard channel gives you two pipelines fed by the same single point of failure. That’s a reasonable thing to question before you reserve a year of standard-class outputs.
Idle resources still bill
This is the one that catches people. Per the MediaLive pricing docs, a channel that isn’t running still attracts an idle channel charge, and push inputs (RTP push, RTMP push, MediaConnect, Elemental Link) are charged while idle, whether they’re detached or attached to a stopped channel. Pull inputs such as HLS pull don’t have an idle charge.
The idle rates are far lower than running rates, but they add up in accounts that keep a channel per event and never clean up. A sports streaming team with sixty channels left over from last season is paying for sixty idle channels, plus every push input attached to them.
What a MediaLive reservation is
A reservation is a one-year commitment to a specific input, output or add-on configuration in a specific region. AWS says reservations can save up to 75% compared with on-demand for inputs, outputs and add-ons. You pay the reserved hourly rate for every hour of every month in the term, whether anything matching is running or not.
Three properties matter more than the discount:
- They’re not tied to a channel. A reservation covers any matching input or output running in that region, in any channel.
- They’re a monthly pool of minutes. At the start of each billing month, each reservation gets a pool of minutes. AWS counts matching running minutes against it, capped at 60 minutes per clock hour. Unused minutes are gone at month end.
- They can’t be cancelled. Once you click Purchase, you own it for twelve months. Auto-renew is off by default, which is the right default.
The 60-minute cap is worth understanding. Two inputs that run at different times of day can share one reservation, as long as their combined minutes in any hour stay at or under 60. But four matching outputs running at the same time need four reservations. One reservation can’t stretch to cover simultaneous usage.
Organizations and payer accounts
If you buy in the management (payer) account, the reservation applies to MediaLive usage across the whole organisation, payer first and then member accounts. Buy it in a member account and it only covers that account. For a company with live channels spread across several accounts, buying centrally usually gets better utilisation. See Reservations and AWS Organizations.
Matching offerings to your running channels
Every offering is described by a set of attributes, and a reservation only applies when every attribute matches the running resource.
| Reservation type | Attributes that must match |
|---|---|
| Input | Channel class, codec, resolution (range), maximum bitrate (range), region |
| Output | Channel class, codec, resolution (range), bitrate (range), frame rate (range), video quality, region |
| Add-on (channel) | Add-on type, channel class, region |
Input matching is checked against the channel’s input specification, not the stream that actually arrives. If your input spec says HD AVC up to 20 Mbps and you buy an HD AVC up to 10 Mbps input reservation, it won’t apply, even if the real feed is 6 Mbps. Change the spec or buy the matching offering, but don’t assume the reservation will “round down”.
The frame rate trap
If an output’s frame rate is set to initialize from source, MediaLive provisions for a frame rate above 30 fps and prices it that way, even when your source is 25 or 29.97 fps. A <=30fps reservation won’t match. You need the 30-60fps offering. Better still, if you know the source frame rate, set it explicitly. You’ll get cheaper on-demand rates and the cheaper reservation can apply.
Channel class matters too
Offerings carry a channel class, STANDARD or SINGLE_PIPELINE. Buy the class your channel actually runs. Don’t try to cover a standard channel by buying two single-pipeline reservations per output; the class won’t match.
Step by step: find what to reserve
Start with an inventory. These commands are read-only.
# Every channel, its class and whether it's running
aws medialive list-channels \
--query "Channels[].[Id,Name,State,ChannelClass]" \
--output table
# Inputs and whether they're attached to anything
aws medialive list-inputs \
--query "Inputs[].[Id,Name,Type,State,length(AttachedChannels)]" \
--output table
Push inputs in the DETACHED state and channels sitting in IDLE for months are candidates for deletion. Clean those up before you reserve anything.
Next, check what’s already reserved, so you don’t double-buy:
aws medialive list-reservations \
--query "Reservations[].[ReservationId,State,Count,OfferingDescription,End]" \
--output table
Then ask AWS which offerings match a specific channel. The --channel-configuration filter takes a channel ID and returns offerings that match its inputs and outputs, the same as the “Match existing channel” filter in the console:
aws medialive list-offerings \
--channel-configuration 1234567 \
--duration 12 \
--query "Offerings[].[OfferingId,OfferingDescription,UsagePrice,CurrencyCode]" \
--output table
Now look at hours. Pull a few months of MediaLive usage from Cost Explorer, grouped by usage type, and check how many hours a month each input and output type really runs. A channel that ran 24x7 in August because of a tournament but sits idle the rest of the year isn’t a reservation candidate.
Buying
In the console: Reservations, then Reserve offerings, filter, set the Count, add to cart, check the auto-renew box only if you mean it, then Purchase. The API equivalent is PurchaseOffering. This one spends money and can’t be undone:
# Generate the request ID once. Keep this value and reuse it if you retry.
REQ_ID=$(uuidgen)
echo "$REQ_ID"
# SPENDS MONEY: 12-month commitment, cannot be cancelled
aws medialive purchase-offering \
--offering-id 87654321 \
--count 5 \
--name hd-avc-outputs-2026 \
--request-id "$REQ_ID"
The CLI already sets a request ID for its own automatic retries. If you retry yourself, by hand or in a script, send the same $REQ_ID again, so a repeated call returns the original reservation instead of buying another. Generating a fresh ID on every attempt gives you no protection. You can also pass --start to begin the reservation at a future date within the next year, which helps when you’re lining up a commitment with a launch.
When reservations don’t pay off
AWS’s own guidance is that reserved pricing makes sense for channels running more than about 180 hours a month. That lines up with the discount. If the reserved rate is around a quarter of on-demand, you break even at around a quarter of the month, which is roughly 180 of 720 hours. Below that, on-demand is cheaper. The exact break-even depends on the offering’s discount, so compute it per offering from the UsagePrice and the on-demand rate rather than trusting the rule of thumb.
Skip or delay reservations when:
- Your encoding ladder is about to change. Moving from AVC to HEVC, adding a 1080p60 rung or switching video quality settings changes which offering matches. A reservation for last quarter’s ladder is dead weight.
- Channels are event-driven. Five event channels at 20% each only fit one reservation if they never run at the same time. Overlapping minutes beyond 60 in an hour are billed on demand. Only reserve the baseline that’s always on.
- You haven’t decided on channel class. If you’re going to drop to single-pipeline for some channels, do that first and reserve after.
- You’re unsure about the region. Reservations don’t move.
A checklist before you click Purchase
- Delete idle channels and detached push inputs you no longer need.
- Set explicit output frame rates where you can.
- Confirm each channel’s class is the one you actually want for the next year.
- List existing reservations and their end dates.
- Use
--channel-configurationto get matching offerings per channel. - Count simultaneous inputs and outputs in your busiest hour, not the total across channels.
- Reserve only the always-on baseline, in the payer account if you use Organizations.
- Leave auto-renew off and put a calendar reminder a month before expiry.
If you also run large EC2 fleets for transcoding, the same “clean up, then commit” order applies there. We cover it in EC2 Reserved Instances vs Savings Plans, and the leftover-resource side in idle and orphaned AWS resources.
FAQ
Do MediaLive reservations apply automatically?
Yes, as long as a running input, output or add-on matches every attribute of the reservation in the same region. You don’t assign them to channels. If nothing matching runs in an hour, those minutes are wasted.
Can I cancel a MediaLive reservation?
No. Purchases are final for the full 12-month term. That’s why it pays to check the frame rate setting, channel class and input specification before buying.
How many reservations does a standard channel need?
One per simultaneously running input or output, bought at the STANDARD channel class. You don’t buy one per pipeline. The standard-class rate already accounts for both pipelines.
Is MediaLive reserved pricing worth it for part-time channels?
Usually not below roughly 180 hours a month per input or output type. Reservations are charged every hour of the term, and minutes don’t roll over between months.
Do stopped MediaLive channels cost money?
Yes. A channel that isn’t running has an idle channel charge, and push inputs are charged while idle. Pull inputs aren’t. Delete what you don’t need instead of leaving it stopped.
Two numbers to write down
Run the list-channels, list-inputs and list-reservations commands above in every region you stream from, and note how many channels are idle and how many outputs run 24x7. The first number is a cleanup task you can do today. The second is your reservation baseline.
After you buy, keep comparing the two. Kostrix checks each active MediaLive reservation against measured channel usage and flags reservations billing for more capacity than your channels use, along with running channels that have no usable input or deliver no output.
