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

# Codec support

> Video and audio codecs supported by the Livepeer network for transcoding, ingest, and playback. Container formats, codec profiles, and limitations.

export const CustomDivider = ({color = "var(--lp-color-border-default)", middleText = "", spacing = "default", style = {}, className = "", ...rest}) => {
  const spacingPresets = {
    default: {
      margin: "24px 0"
    },
    overlap: {
      margin: "-1rem 0 -1rem 0"
    },
    tight: {
      margin: "0 0 -1rem 0"
    },
    section: {
      margin: "0 0 -2rem 0"
    },
    sectionOverlap: {
      margin: "-1rem 0 -2rem 0"
    },
    deepOverlap: {
      margin: "-1rem 0 -1.5rem 0"
    }
  };
  const spacingStyle = spacingPresets[spacing] || spacingPresets.default;
  return <div role="separator" aria-orientation="horizontal" className={className} style={{
    display: "flex",
    alignItems: "center",
    ...spacingStyle,
    fontSize: style?.fontSize || "16px",
    height: "fit-content",
    ...style
  }} {...rest}>
      <span style={{
    marginRight: "var(--lp-spacing-px-8)",
    opacity: 0.2
  }}>
        <Icon icon="/snippets/assets/logos/Livepeer-Logo-Symbol-Theme.svg" />
      </span>
      <div style={{
    flex: 1,
    height: "1px",
    background: "var(--lp-color-border-default)",
    opacity: 0.4
  }}></div>
      {middleText && <>
          <Icon icon="circle" size={2} />
          <span style={{
    margin: "0 8px",
    fontWeight: "bold",
    color: color,
    opacity: 0.7
  }}>
            {middleText}
          </span>
          <Icon icon="circle" size={2} />
        </>}
      <div style={{
    flex: 1,
    height: "1px",
    background: "var(--lp-color-border-default)",
    opacity: 0.4
  }}></div>
      <span style={{
    marginLeft: "var(--lp-spacing-px-8)",
    opacity: 0.2
  }}>
        <span style={{
    display: "inline-block",
    transform: "scaleX(-1)"
  }}>
          <Icon icon="/snippets/assets/logos/Livepeer-Logo-Symbol-Theme.svg" />
        </span>
      </span>
    </div>;
};

export const TableCell = ({children, align = "left", header = false, style = {}, className = "", ...rest}) => {
  const Component = header ? "th" : "td";
  return <Component className={className} style={{
    padding: "0.75rem 1rem",
    textAlign: align,
    border: header ? "none" : "1px solid var(--lp-color-border-default)",
    ...style
  }} {...rest}>
      {children}
    </Component>;
};

export const TableRow = ({children, header = false, hover = false, style = {}, className = "", ...rest}) => {
  const rowId = `table-row-${Math.random().toString(36).substr(2, 9)}`;
  return <>
      {hover && <style>{`
          #${rowId}:hover {
            background-color: var(--lp-color-bg-card);
          }
        `}</style>}
      <tr id={rowId} className={className} style={{
    ...header && ({
      backgroundColor: "var(--lp-color-accent-strong)",
      color: "var(--lp-color-on-accent)",
      fontWeight: "bold"
    }),
    ...style
  }} {...rest}>
        {children}
      </tr>
    </>;
};

export const StyledTable = ({children, variant = "default", style = {}, className = "", ...rest}) => {
  const wrapperVariants = {
    default: {
      border: "1px solid var(--lp-color-border-default)",
      backgroundColor: "var(--lp-color-bg-card)",
      overflow: "hidden"
    },
    bordered: {
      border: "2px solid var(--lp-color-accent)",
      backgroundColor: "var(--lp-color-bg-page)",
      overflow: "hidden"
    },
    minimal: {
      border: "none",
      backgroundColor: "transparent",
      overflow: "visible"
    }
  };
  return <div data-docs-styled-table-shell className={className} style={{
    width: "100%",
    padding: 0,
    margin: 0,
    ...wrapperVariants[variant],
    ...style
  }} {...rest}>
      <table data-docs-styled-table style={{
    width: "100%",
    borderCollapse: "collapse",
    borderSpacing: 0,
    margin: 0,
    backgroundColor: "transparent"
  }}>
        {children}
      </table>
    </div>;
};

<CustomDivider />

Livepeer transcoding supports a range of video and audio codecs for ingest, processing, and output. The underlying media library is LPMS (Livepeer Media Server), which uses FFmpeg and NVIDIA hardware encoding/decoding.

<CustomDivider />

## Video codecs

<StyledTable variant="bordered">
  <thead>
    <TableRow header>
      <TableCell header>Codec</TableCell>
      <TableCell header>Ingest</TableCell>
      <TableCell header>Transcode output</TableCell>
      <TableCell header>HW acceleration</TableCell>
    </TableRow>
  </thead>

  <tbody>
    <TableRow>
      <TableCell>**H.264 (AVC)**</TableCell>
      <TableCell>Yes</TableCell>
      <TableCell>Yes (default)</TableCell>
      <TableCell>NVENC/NVDEC</TableCell>
    </TableRow>

    <TableRow>
      <TableCell>**H.265 (HEVC)**</TableCell>
      <TableCell>Yes</TableCell>
      <TableCell>Yes</TableCell>
      <TableCell>NVENC/NVDEC</TableCell>
    </TableRow>

    <TableRow>
      <TableCell>**VP8**</TableCell>
      <TableCell>Yes</TableCell>
      <TableCell>Yes</TableCell>
      <TableCell>Software only</TableCell>
    </TableRow>

    <TableRow>
      <TableCell>**VP9**</TableCell>
      <TableCell>Yes</TableCell>
      <TableCell>Limited</TableCell>
      <TableCell>Software only</TableCell>
    </TableRow>
  </tbody>
</StyledTable>

H.264 is the default output codec for HLS delivery. NVIDIA GPU-accelerated encoding (NVENC) and decoding (NVDEC) are used when available; software fallback handles non-NVIDIA environments.

<CustomDivider />

## Container formats

| Format                 | Ingest            | Output                    |
| ---------------------- | ----------------- | ------------------------- |
| RTMP/FLV               | Yes (live ingest) | No                        |
| MP4                    | Yes (VOD upload)  | Yes (VOD download)        |
| HLS (MPEG-TS segments) | No                | Yes (live + VOD playback) |
| WebM                   | Yes (VOD upload)  | No                        |
| MOV, AVI, MKV, WMV     | Yes (VOD upload)  | No                        |

VOD upload accepts MP4, MOV, AVI, WebM, MKV, WMV, and FLV. Files up to 10 GB are supported.

<CustomDivider />

## Audio codecs

| Codec | Ingest       | Output                |
| ----- | ------------ | --------------------- |
| AAC   | Yes          | Yes (default for HLS) |
| MP3   | Yes (VOD)    | No                    |
| Opus  | Yes (WebRTC) | Yes (WebRTC)          |

AAC is the default audio codec for HLS output. WebRTC sessions use Opus.

<CustomDivider />

The [transcoding](/v2/developers/build/video/transcoding-direct-quickstart) page covers transcoding profiles and configuration. The [LPMS integration](/v2/developers/build/video/lpms-integration) page covers the underlying media library.
