Enable static MP4 renditions on your video assets for offline viewing and other use cases.
Why enable MP4 support
Reasons you might need the MP4
How to enable MP4 support
MP4 support is not enabled by default
Create the MP4 streaming URL
Assembling your video data to create the valid MP4 URL
Signed URLs with MP4 video
Sign your URLs appropriately
Any Mux video asset can be streamed or downloaded using the MPEG-4 (.mp4) video format.
This allows users to download a file for watching offline which is useful for:
In the majority of other cases, you'll want to use our default HLS (.m3u8) format, which provides a better viewing experience by dynamically adjusting the quality level to the viewer's connection speed. The HLS version of a video will also be ready sooner than the MP4 versions, if time-to-ready is important.
There is no additional cost for creating and storing MP4 files. Delivery for video has the same price-per-minute as HLS delivery.
You can add MP4 support to an asset when creating an assetAPI by including the "mp4_support": "standard"
parameter.
{
"input": "INPUT_URL",
"playback_policy": [
"public"
],
"mp4_support": "standard"
}
You can also add it afterward by updating the assetAPI.
If you want to enable MP4 support from the recorded version of a live stream soon after the live stream is finished, use the mp4_support
property in the new_asset_settings
when creating the live streamAPI.
{
"playback_policy": "public",
"new_asset_settings": {
"playback_policy": "public",
"mp4_support": "standard"
}
}
After adding MP4 support you'll see an additional key on the asset object called static_renditions
. This is the object that will contain the information about which MP4s are available.
The static_renditions.status
parameter refers to the current status of processing the MP4s. MP4s take longer to create than our default HLS version of the video, so they will not be ready immediately when the asset status is ready
. Instead they will be ready when the static_renditions.status
is ready
, and a webhook of video.asset.static_renditions.ready
is fired.
{
...all asset details...
"mp4_support": "standard",
"static_renditions": {
"status": "preparing"
}
}
When the static_renditions.status
field is ready
, you will see the details of the MP4s available in an array under the files
key.
Depending on the source video uploaded, you will have one or more options for MP4 renditions. If the source video had a low resolution (e.g., 240p) there will only be a low.mp4
file available. If the source video had a high resolution (HD, 720p+) you will have three options: low.mp4
, medium.mp4
, and high.mp4
.
{
...all asset details...
"mp4_support": "standard",
"static_renditions": {
"status": "ready",
"files": [
{
"name": "low.mp4",
"ext": "mp4",
"height": {MP4_HEIGHT},
"width": {MP4_WIDTH},
"bitrate": {MP4_BITRATE},
"filesize": {MP4_FILESIZE}
}
]
}
}
The MP4 streaming URL is compiled using the playback ID and one of the static_renditions.
https://stream.mux.com/{PLAYBACK_ID}/{high, medium, or low}.mp4
--
ex. https://stream.mux.com/abcd1234/low.mp4
If you want a browser to download the MP4 file rather than attempt to stream it, you can provide a file name for the MP4 to save it via the download
query parameter:
https://stream.mux.com/{PLAYBACK_ID}/{MP4_FILE_NAME}?download={FILE_NAME}
--
ex. https://stream.mux.com/abcd1234/low.mp4?download=cats
Your application can be automatically updated with the status of MP4 downloads for an asset through webhooks.
There are four related events you can receive.
Webhook | Description |
---|---|
video.asset.static_renditions.preparing | Received when MP4 support is first requested |
video.asset.static_renditions.ready | Received when the MP4 URL(s) are available and ready for use |
video.asset.static_renditions.deleted | Received if MP4 support has been set to none via a PUT to the mp4-support endpoint |
video.asset.static_renditions.errored | Received if an unexpected error happens while making the MP4 URLs available |
If you're using audio-only assets with MP4 support, the MP4 file name is audio.m4a and you should craft the URL with this file name.
Also, there is only one MP4 rendition option for audio-only assets.
Mux videos have two types of playback policy, public
or signed
. If your playback_id
is signed
, you will need to also sign requests made for MP4 URLs.
You can check out how to do that in our signed URLs guide.
If you run into any trouble signing MP4 requests, please reach out and we'll be able to help.