> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gcore.com/llms.txt
> Use this file to discover all available pages before exploring further.

# HEVC, AV1, and VP9 multi-codec VOD

> Reduce VOD delivery costs by transcoding large video libraries into efficient codecs such as HEVC, AV1, and VP9

## Multi-codec for lower CDN costs

Many VOD libraries are still stored and delivered mainly in H.264. H.264 is widely compatible, but it usually needs more bitrate than newer codecs to reach the same visual quality. For large catalogs, this directly affects CDN traffic costs.

With multi-codec VOD, Gcore can create additional **HEVC**,  **AV1**, and **VP9** renditions from your uploaded source videos. Players can then choose the most efficient codec supported by each device. Viewers keep the same visual quality, while compatible devices receive smaller video segments and generate less CDN traffic.

Live streaming with advanced codecs can be designed for live broadcasting too, but it requires additional validation of the ingest, transcoding, packaging, latency, and player path before launch.

This feature is designed for enterprise customers with large VOD libraries and high delivery volume. It is available with premium transcoding. To activate it, contact your salesperson or account manager.

<Info>
  Premium transcoding is a paid feature.
</Info>

## Demo video

<iframe title="Multi-codec VOD demo player" src="https://player.gvideo.co/videos/2675_5aT2bPTFEN2BSQFm" width="100%" height="420" allow="autoplay; fullscreen; picture-in-picture" allowFullScreen />

The demo video has AV1, VP9, HEVC, and H.264 renditions. Note that while Firefox handles VP9 playback successfully, Chrome has issues of playing VP9.

<table className="w-full text-left border-collapse">
  <thead>
    <tr>
      <th className="p-2 border-b">Codec</th>
      <th className="p-2 border-b">Manifest codec ID</th>
      <th className="p-2 border-b">Resolution</th>
      <th className="p-2 border-b">Video bitrate</th>
      <th className="p-2 border-b">Reduction vs H.264</th>
    </tr>
  </thead>

  <tbody>
    <tr style={{backgroundColor: 'rgba(147, 51, 234, 0.08)'}}>
      <td className="p-2">AV1</td>
      <td className="p-2">`av01.0.16M.08`</td>
      <td className="p-2">4839x2160</td>
      <td className="p-2">12 Mbps</td>
      <td className="p-2">About 50% vs 24 Mbps H.264 4K</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(147, 51, 234, 0.08)'}}>
      <td className="p-2">AV1</td>
      <td className="p-2">`av01.0.12M.08`</td>
      <td className="p-2">2420x1080</td>
      <td className="p-2">3 Mbps</td>
      <td className="p-2">50%</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(147, 51, 234, 0.08)'}}>
      <td className="p-2">AV1</td>
      <td className="p-2">`av01.0.08M.08`</td>
      <td className="p-2">1613x720</td>
      <td className="p-2">1.35 Mbps</td>
      <td className="p-2">50%</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(147, 51, 234, 0.08)'}}>
      <td className="p-2">AV1</td>
      <td className="p-2">`av01.0.04M.08`</td>
      <td className="p-2">1049x468</td>
      <td className="p-2">400 Kbps</td>
      <td className="p-2">50%</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(147, 51, 234, 0.08)'}}>
      <td className="p-2">AV1</td>
      <td className="p-2">`av01.0.04M.08`</td>
      <td className="p-2">807x360</td>
      <td className="p-2">225 Kbps</td>
      <td className="p-2">50%</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(2, 132, 199, 0.08)'}}>
      <td className="p-2">VP9</td>
      <td className="p-2">`vp09.00.10.08`</td>
      <td className="p-2">4840x2160</td>
      <td className="p-2">12 Mbps</td>
      <td className="p-2">About 50% vs 24 Mbps H.264 4K</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(2, 132, 199, 0.08)'}}>
      <td className="p-2">VP9</td>
      <td className="p-2">`vp09.00.10.08`</td>
      <td className="p-2">2420x1080</td>
      <td className="p-2">3.5 Mbps</td>
      <td className="p-2">42%</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(2, 132, 199, 0.08)'}}>
      <td className="p-2">VP9</td>
      <td className="p-2">`vp09.00.10.08`</td>
      <td className="p-2">1612x720</td>
      <td className="p-2">1.5 Mbps</td>
      <td className="p-2">44%</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(2, 132, 199, 0.08)'}}>
      <td className="p-2">VP9</td>
      <td className="p-2">`vp09.00.10.08`</td>
      <td className="p-2">1048x468</td>
      <td className="p-2">450 Kbps</td>
      <td className="p-2">44%</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(2, 132, 199, 0.08)'}}>
      <td className="p-2">VP9</td>
      <td className="p-2">`vp09.00.10.08`</td>
      <td className="p-2">806x360</td>
      <td className="p-2">250 Kbps</td>
      <td className="p-2">44%</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(22, 163, 74, 0.08)'}}>
      <td className="p-2">HEVC</td>
      <td className="p-2">`hev1.1.2.L180.90`</td>
      <td className="p-2">4839x2160</td>
      <td className="p-2">14.4 Mbps</td>
      <td className="p-2">About 40% vs 24 Mbps H.264 4K</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(22, 163, 74, 0.08)'}}>
      <td className="p-2">HEVC</td>
      <td className="p-2">`hev1.1.2.L150.90`</td>
      <td className="p-2">2420x1080</td>
      <td className="p-2">3.6 Mbps</td>
      <td className="p-2">40%</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(22, 163, 74, 0.08)'}}>
      <td className="p-2">HEVC</td>
      <td className="p-2">`hev1.1.2.L120.90`</td>
      <td className="p-2">1613x720</td>
      <td className="p-2">1.62 Mbps</td>
      <td className="p-2">40%</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(22, 163, 74, 0.08)'}}>
      <td className="p-2">HEVC</td>
      <td className="p-2">`hev1.1.2.L90.90`</td>
      <td className="p-2">1049x468</td>
      <td className="p-2">480 Kbps</td>
      <td className="p-2">40%</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(22, 163, 74, 0.08)'}}>
      <td className="p-2">HEVC</td>
      <td className="p-2">`hev1.1.2.L90.90`</td>
      <td className="p-2">807x360</td>
      <td className="p-2">270 Kbps</td>
      <td className="p-2">40%</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(107, 114, 128, 0.08)'}}>
      <td className="p-2">H.264</td>
      <td className="p-2">`avc1.4d0033`</td>
      <td className="p-2">4096x1828</td>
      <td className="p-2">24 Mbps</td>
      <td className="p-2">Baseline</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(107, 114, 128, 0.08)'}}>
      <td className="p-2">H.264</td>
      <td className="p-2">`avc1.4d0032`</td>
      <td className="p-2">2420x1080</td>
      <td className="p-2">6 Mbps</td>
      <td className="p-2">Baseline</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(107, 114, 128, 0.08)'}}>
      <td className="p-2">H.264</td>
      <td className="p-2">`avc1.4d0020`</td>
      <td className="p-2">1613x720</td>
      <td className="p-2">2.7 Mbps</td>
      <td className="p-2">Baseline</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(107, 114, 128, 0.08)'}}>
      <td className="p-2">H.264</td>
      <td className="p-2">`avc1.4d001f`</td>
      <td className="p-2">1049x468</td>
      <td className="p-2">800 Kbps</td>
      <td className="p-2">Baseline</td>
    </tr>

    <tr style={{backgroundColor: 'rgba(107, 114, 128, 0.08)'}}>
      <td className="p-2">H.264</td>
      <td className="p-2">`avc1.4d001e`</td>
      <td className="p-2">807x360</td>
      <td className="p-2">450 Kbps</td>
      <td className="p-2">Baseline</td>
    </tr>

    <tr>
      <td className="p-2">AAC audio</td>
      <td className="p-2">`mp4a.40.2`</td>
      <td className="p-2">Audio only</td>
      <td className="p-2">64, 128, and 192 Kbps</td>
      <td className="p-2">—</td>
    </tr>

    <tr>
      <td className="p-2">Subtitles</td>
      <td className="p-2">WebVTT</td>
      <td className="p-2">English</td>
      <td className="p-2">—</td>
      <td className="p-2">—</td>
    </tr>
  </tbody>
</table>

<Note>
  Gcore uses generic encoding parameters that fit many video libraries out of the box. If you have your own quality targets, bitrate ladder, codec priorities, or device requirements, Gcore can review them and apply custom transcoding settings for your workflow.
</Note>

<Info>
  Gcore uses modern NVIDIA and Intel GPU encoding and decoding hardware in multiple regions worldwide. This helps process large transcoding workloads quickly and makes multi-codec preparation practical for large VOD libraries, especially using batch-migration).
</Info>

## HLS manifest example

The demo HLS master manifest is available at:

```text theme={null}
https://demo-public.gvideo.io/videos/2675_5aT2bPTFEN2BSQFm/master.m3u8
```

It contains AV1, HEVC, and H.264 video variants with AAC audio:

```m3u8 theme={null}
#EXTM3U

#EXT-X-STREAM-INF:BANDWIDTH=12192000,RESOLUTION=4839x2160,FRAME-RATE=24.000,CODECS="av01.0.16M.08,mp4a.40.2",SUBTITLES="subs0"
index-s0q5739v1-v1-a1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=14592000,RESOLUTION=4839x2160,FRAME-RATE=24.000,CODECS="hev1.1.2.L180.90,mp4a.40.2",SUBTITLES="subs0"
index-s0q5749v1-v1-a1.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=24192000,RESOLUTION=4096x1828,FRAME-RATE=24.000,CODECS="avc1.4d0033,mp4a.40.2",SUBTITLES="subs0"
index-s0q5759v1-v1-a1.m3u8
...
```

When a video has any non-H.264 codec, `master.m3u8` automatically uses HLS CMAF with fragmented MP4 (`.m4s`) chunks for the modern-codec variants. The player still opens the same `master.m3u8` URL, but the variant playlists contain `.m4s` chunks instead of only `.ts` segments.

```m3u8 theme={null}
#EXT-X-MAP:URI="init-s0q5737v1-v1-a1.m4s"
#EXTINF:2.000,
segment-1-s0q5737v1-v1-a1.m4s
#EXTINF:2.000,
segment-2-s0q5737v1-v1-a1.m4s
```

For the detailed technical explanation, see [HLS TS and CMAF formats](/streaming/video-hosting/hls-and-mp4#hls-ts-and-cmaf-formats).

## MPEG-DASH manifest example

The demo MPEG-DASH manifest is available at:

```text theme={null}
https://demo-public.gvideo.io/videos/2675_5aT2bPTFEN2BSQFm/master.mpd
```

It groups codecs into separate `AdaptationSet` blocks. VP9 and AV1 are delivered as WebM chunks, while HEVC and H.264 are delivered as fragmented MP4 chunks:

```xml theme={null}
<AdaptationSet id="1" maxWidth="4840" maxHeight="2160" maxFrameRate="24">
  <SegmentTemplate
      media="dash-segment-$Number$-$RepresentationID$.webm"
      initialization="dash-init-$RepresentationID$.webm" />
  <Representation
      id="f1-v1-x3"
      mimeType="video/webm"
      codecs="vp09.00.10.08"
      width="4840"
      height="2160"
      bandwidth="12000000" />
</AdaptationSet>

<AdaptationSet id="2" maxWidth="4839" maxHeight="2160" maxFrameRate="24">
  <SegmentTemplate
      media="dash-segment-$Number$-$RepresentationID$.m4s"
      initialization="dash-init-$RepresentationID$.m4s" />
  <Representation
      id="f2-v1-x3"
      mimeType="video/mp4"
      codecs="hev1.1.2.L180.90"
      width="4839"
      height="2160"
      bandwidth="14400000" />
</AdaptationSet>

<AdaptationSet id="3" maxWidth="4839" maxHeight="2160" maxFrameRate="24">
  <SegmentTemplate
      media="dash-segment-$Number$-$RepresentationID$.webm"
      initialization="dash-init-$RepresentationID$.webm" />
  <Representation
      id="f3-v1-x3"
      mimeType="video/webm"
      codecs="av01.0.16M.08"
      width="4839"
      height="2160"
      bandwidth="12000000" />
</AdaptationSet>

<AdaptationSet id="4" maxWidth="4839" maxHeight="2160" maxFrameRate="24">
  <SegmentTemplate
      media="dash-segment-$Number$-$RepresentationID$.m4s"
      initialization="dash-init-$RepresentationID$.m4s" />
  <Representation
      id="f4-v1-x3"
      mimeType="video/mp4"
      codecs="avc1.4d0033"
      width="4096"
      height="1828"
      bandwidth="24000000" />
</AdaptationSet>
...
```

## Activation

HEVC, AV1, and VP9 multi-codec transcoding is available for enterprise customers who use premium transcoding. To activate it, contact your salesperson or account manager and share:

* Expected library size and monthly traffic
* Current source codec, usually H.264
* Target devices and geographies
* Required codecs: HEVC, AV1, VP9, or a subset
* Expected migration plan for existing assets

After activation, Gcore will configure the required transcoding presets for your account.

## Related pages

<CardGroup cols={2}>
  <Card title="Output codecs and parameters" icon="settings" href="/streaming/live-streams-and-videos-protocols-and-codecs/output-parameters-and-codecs">
    Review default and custom transcoding outputs
  </Card>

  <Card title="HLS, MPEG-DASH, MP4" icon="play" href="/streaming/video-hosting/hls-and-mp4">
    Learn how modern codecs are delivered to players
  </Card>
</CardGroup>
