> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://fastpix.com/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://fastpix.com/docs/_mcp/server.

# Enable MP4 support for offline viewing

HLS adaptive bitrate streaming requires an active internet connection, which excludes offline viewers, legacy devices, and social media embeds that need a single downloadable file. FastPix bridges this gap by generating a static MP4 rendition alongside the HLS manifest when you set the `mp4Support` field at creation time. Serve the file at `https://stream.fastpix.com/<playbackId>/capped-4k.mp4` or `.../audio.m4a`, it keeps a fixed resolution and bitrate so it plays anywhere.

\


## Prerequisites

* A FastPix account with an active workspace ([Activate your account](/getting-started/activate-your-account))
* Your **Access Token ID** and **Secret Key** from the FastPix dashboard
* A video media to upload, or an existing `mediaId` to update
* Familiarity with [uploading from a URL](/upload-videos/upload-videos-from-a-url) or [uploading directly](/upload-videos/upload-videos-from-device)

\


## Key terms

* **`mediaId`** - The unique identifier FastPix assigns to every uploaded media. Use it to update, query, or delete the media.
* **`playbackId`** - A separate, access-controlled identifier FastPix generates for playback. The MP4 download URL is built from the `playbackId`.
* **`accessPolicy`** - Controls whether the media is `public` or `private`. A `private` media requires a signed URL for both HLS and MP4 access.
* **`mp4Support`** - The field you set to tell FastPix which static renditions to generate.

\


## Benefits of enabling MP4 support

1. **Offline viewing**

   Viewers download MP4 files and watch them without an active internet connection, which matters for regions with limited connectivity and for mobile apps that cache content.

2. **Legacy device compatibility**

   MP4 files play on older devices, including Android versions below 4.0, where HLS adaptive bitrate streaming is not supported.

3. **Short-form clips**

   For clips under 10 seconds, a single MP4 file reduces startup latency compared with loading an HLS manifest and its segments.

4. **Social media embedding**

   MP4 files embed in Open Graph cards on Facebook, X, and LinkedIn, so shared links render an inline video preview instead of a still thumbnail.

5. **Audio-only use cases**

   `mp4Support` can generate an `.m4a` audio rendition for podcasts, transcription pipelines, and audio-only streaming, extending its use beyond video.

\


## Choose an mp4Support value

Pick the option that matches the renditions you need:

* **`capped_4k`** - Generates a single MP4 file capped at 1080p.
* **`audioOnly`** - Generates an `.m4a` audio rendition only.
* **`audioOnly,capped_4k`** - Generates both the MP4 and the `.m4a` rendition for medias with audio and video.

> **NOTE**
>
> The value you pick determines which static rendition URLs FastPix exposes. You can change it later with the update endpoint covered in [Update MP4 support on an existing media](#update-mp4-support-on-an-existing-media).

\


## Create a media media with MP4 support

Set `mp4Support` in the request body when calling either upload endpoint:

* [**Create media from URL**](/video-on-demand-api/upload-and-import-videos/create-media) - pull the source from a URL.
* [**Upload media from device**](/video-on-demand-api/upload-and-import-videos/direct-upload-video-media) - push the source from local storage.

Subscribe to the [`video.media.mp4Support.ready`](/webhooks/transform-media-events#videomediamp4supportready) webhook to be notified when the static rendition finishes transcoding.

**Upload video from URL**

**`Request`**

```json Request
{ 
  "inputs": [ 
    { 
      "type": "video", 
      "url": "https://static.fastpix.com/fp-sample-video.mp4" 
    } 
  ], 
  "accessPolicy": "public", 
  "mp4Support":"capped_4k" 
} 
```

> **NOTE**
>
> Replace `url` with the source URL of your video. This request generates an MP4 rendition capped at 1080p.

\


**Upload video from device**

For a direct upload from local storage, use this configuration:

**`Request`**

```json Request
{ 
  "corsOrigin": "*", 
  "pushMediaSettings": 
  { 
  "accessPolicy": "public",  
  "mp4Support": "capped_4k" 
  } 
} 
```

> **NOTE**
>
> Set `mp4Support` to `capped_4k`, `audioOnly`, or `audioOnly,capped_4k` depending on the renditions you need.

\


## Create media with MP4 support from the dashboard

To create media with MP4 support from the dashboard, you need to:

1. [Add your media](#add-your-media).
2. [Enable MP4 support in media settings](#enable-mp4-support-in-media-settings).
3. [Review metadata and start the upload](#review-metadata-and-start-the-upload).
4. [Verify the upload](#verify-the-upload).

\


### Add your media

1. In the left navigation, go to **Video > Media**.
2. On the **Upload media** page, add your video using one of the following methods:
   * **Upload from device**: Drag and drop your file into the upload area, or click **Browse** to open your device's file picker. Navigate to the video you want to upload, select it, and click **Open**.
   * **Upload using video URL**: Paste a public video URL into the **Upload using video URL** field and click **Submit URL**.

\


### Enable MP4 support in media settings

1. In the **Media Settings** panel, select **Custom settings**.

2. Set `"mp4Support": "capped_4k"` in the JSON configuration. For example:

   ```json
   {
     "mp4Support": "capped_4k"
   }
   ```

3. Configure any other settings as needed, then click **Continue**.

\


### Review metadata and start the upload

1. In the **Metadata** panel, review the preview of your video along with the auto-populated fields.
2. Optionally, edit the **Media title**, **Creator ID**, or **Third party ID**.
3. When ready, click **Start upload all media**.

\


### Verify the upload

1. After the upload completes, open the **Media Details** page.
2. Confirm the status is **Ready** and the playback ID is available.
3. Use the media for offline viewing with MP4 support enabled.

\


## Update MP4 support on an existing media

FastPix also lets you enable or change MP4 support after a media is created with the [update mp4 support](/video-on-demand-api/manage-videos/updated-mp-4-support) endpoint.

Method: `PATCH`
URL: `https://api.fastpix.com/v1/on-demand/{mediaId}/update-mp4Support`

**`Request Body`**

```Text Request Body
{
  "mp4Support": "audioOnly,capped_4k"
}
```

Subscribe to the `video.media.mp4Support.updated` webhook to track when the new rendition finishes transcoding.

\


## Enable and download a static rendition from the dashboard

For a media that is already uploaded, you can enable a static rendition and download it as a file directly from the dashboard, without calling the API. This uses the same renditions as `mp4Support`: **Highest Quality Video** creates the `capped_4k` MP4 file, and **Audio Only** creates the `audioOnly` `.m4a` file.

1. In the dashboard, open the media from **Video > Media** and go to the **Overview** tab.
2. Click **Download** in the top right. Under **Static renditions**, you see two options, **Highest Quality Video** and **Audio Only**.
3. Next to the rendition you want, click **Enable**:
   * **Highest Quality Video** generates a downloadable MP4 file (`capped_4k`).
   * **Audio Only** generates a downloadable `.m4a` audio file (`audioOnly`).
4. In the confirmation dialog, click **Enable**. FastPix creates the file in the background, which can take a few minutes depending on the media's duration and resolution.
5. When the file is ready, open the **Download** menu again and click the download icon next to the rendition to save it. To remove the rendition, click the delete icon.

> **NOTE:** A static rendition is an on-demand file, so storage is billed for as long as it stays enabled. Delete the rendition when you no longer need it to stop the storage cost.

\


## Billing for static rendition downloads

Downloading a static rendition counts as streaming usage because the file is delivered through `stream.fastpix.com`.

Streaming charges are based on the media's quality tier:

* `standard`
* `pro`
* `premium`

This billing applies whether you download the file from the FastPix dashboard or access it directly through the static rendition URL.

For more information about streaming usage and pricing, see the [FastPix pricing documentation](/account-and-billing/understand-fastpix-pricing).

\


## Access the MP4 download URL

Once the static rendition is ready, build the download URL from the `playbackId` and the rendition filename:

**`URL Format`**

```Text URL Format
https://stream.fastpix.com/{PLAYBACK_ID}/{capped-4k.mp4, audio.m4a}
```

**Video**

**`Video`**

```Text Video
https://stream.fastpix.com/{PLAYBACK_ID}/capped-4k.mp4
```

**Audio**

**`Audio`**

```Text Audio
https://stream.fastpix.com/{PLAYBACK_ID}/audio.m4a
```

> **TIP**: Use these URLs directly in a `<video>` or `<audio>` element, or expose them as a download link for offline viewing.

Opening the URL in a browser starts the download automatically. If it does not, trigger the download manually as shown in the browser instructions that follow.

\


### Download an MP4 video in Safari

![Safari context menu showing Download Video option](https://files.readme.io/f543042d8e2280de96ce4aff9f13492ae5d6cd3a39f8a01aae5224b865b8f247-Downloading_mp4_video_in_Safari_1_1.webp)

### Download an MP4 video in Chrome

![Chrome context menu showing Save video as option](https://files.readme.io/10ea7f6399166a775ac7784a0db3a933b788522f0337b9812e29998c339d26a8-Downloading_mp4_video_in_Chrome_1.webp)

\


#### Frequently asked questions

`capped_4k` generates a single MP4 file capped at 1080p resolution. `audioOnly` generates an `.m4a` audio rendition with no video track. Use `audioOnly,capped_4k` to generate both from a single source.

Yes. Send a `PATCH` request to `https://api.fastpix.com/v1/on-demand/{mediaId}/update-mp4Support` with the new `mp4Support` value. FastPix transcodes the static rendition and fires the `video.media.mp4Support.updated` webhook when it is ready.

Static MP4 renditions follow the same `accessPolicy` as the media. A `public` media is downloadable at the static URL. A `private` media requires a signed JWT on the MP4 URL, see [Secure media access with JWTs](/video-security/secure-media-access-with-jwts). DRM-protected renditions are not downloadable as static MP4 files; DRM applies to HLS playback only.

Download the MP4 from the static rendition URL, store it in the app's local filesystem, and point your native player at the local file path. On iOS use `AVmedia` with a file URL; on Android use `ExoPlayer` with a `FileDataSource`.

Enable `mp4Support` on the media media (set it to `capped_4k` at creation or via `PATCH`), wait for the `video.media.mp4Support.ready` webhook, then fetch the file at `https://stream.fastpix.com/{playbackId}/capped-4k.mp4`. Opening that URL in a browser triggers a download; in application code, issue a standard HTTP GET and write the response body to disk.

Open the media in the dashboard, go to the **Overview** tab, and click **Download > Static renditions**. Click **Enable** next to **Highest Quality Video** (the `capped_4k` MP4) or **Audio Only** (the `audioOnly` `.m4a` file). FastPix creates the file in the background, and once it is ready you can download it from the same menu or delete it to stop the storage cost.

FastPix transcodes the static rendition in parallel with the HLS renditions. Listen for the `video.media.mp4Support.ready` webhook rather than polling, it triggers as soon as the MP4 file is available at the static URL.

\


## What's next?

* [Upload videos from a URL](/upload-videos/upload-videos-from-a-url)
* [Upload videos directly from a device](/upload-videos/upload-videos-from-device)
* [Play your videos](/video-on-demand/play-your-videos)
* [Secure playback with DRM](/video-security/set-up-drm-encryption)
* [API Reference: Update MP4 support](/video-on-demand-api/manage-videos/updated-mp-4-support)