MIME Types for Video Streaming: HLS, DASH, and WebRTC

Video streaming formats each require a specific MIME type. HLS manifests and segments, DASH manifest serving, MSE and addSourceBuffer codec parameters.

ZERO UPLOAD · ALL LOCAL
  1. Type a MIME string (e.g. application/json), file extension (e.g. .wasm), or keyword (e.g. "protobuf") to search the database.
  2. Use the category pills (Application, Audio, Font, Image, Model, Text, Video, Multipart) to browse all types in a category.
  3. Click Details on any card to expand the description, spec link, and server configuration snippets in a full-width panel.
  4. Click Copy next to any snippet block to copy the Nginx, Apache, .htaccess, or Caddy directive to your clipboard.

Streaming format MIME types

  • application/x-mpegURL
  • video/mp2t
  • application/dash+xml
  • video/mp4; codecs="avc1.42E01E"

iOS Safari enforces HLS MIME types strictly — serving .m3u8 as text/plain or video/mp4 causes the native player to reject the stream with no useful error.

APPLICATION (100 types)

application/json
.json
application/xml
.xml .xsl .xslt
application/pdf
.pdf
application/wasm
.wasm
application/javascript
.js .mjs .cjs
application/zip
.zip
application/gzip
.gz .tgz
application/x-tar
.tar
application/x-7z-compressed
.7z
application/vnd.rar
.rar
application/x-bzip2
.bz2
application/vnd.openxmlformats-officedocument.wordprocessingml.document
.docx
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xlsx
application/vnd.openxmlformats-officedocument.presentationml.presentation
.pptx
application/msword
.doc
application/vnd.ms-excel
.xls
application/vnd.ms-powerpoint
.ppt
application/octet-stream
.bin .exe .dll
application/x-www-form-urlencoded
application/cbor
.cbor
application/x-protobuf
.proto .pb
application/grpc
application/graphql-response+json
application/vnd.api+json
application/ld+json
.jsonld
application/hal+json
application/jwt
application/manifest+json
.webmanifest
application/rtf
.rtf
application/problem+json
application/json-patch+json
application/merge-patch+json
application/vnd.geo+json
.geojson
application/yaml
.yaml .yml
application/sql
.sql
application/epub+zip
.epub
application/java-archive
.jar
application/vnd.oasis.opendocument.text
.odt
application/vnd.oasis.opendocument.spreadsheet
.ods
application/vnd.oasis.opendocument.presentation
.odp
application/x-ndjson
.ndjson .jsonl
application/vnd.apple.mpegurl
.m3u8
application/dash+xml
.mpd
application/rss+xml
.rss
application/atom+xml
.atom
application/x-apple-diskimage
.dmg
application/x-debian-package
.deb
application/x-rpm
.rpm
application/x-sh
.sh
application/ecmascript
application/toml
.toml
application/zstd
.zst
application/x-xz
.xz
application/x-bzip
.bz
application/x-lzma
.lzma
application/x-iso9660-image
.iso
application/vnd.ms-cab-compressed
.cab
application/vnd.android.package-archive
.apk
application/x-msdownload
.msi
application/vnd.apple.installer+xml
.mpkg
application/x-httpd-cgi
.cgi
application/vnd.google-earth.kml+xml
.kml
application/vnd.google-earth.kmz
.kmz
application/vnd.sqlite3
.sqlite .sqlite3 .db
application/msgpack
.msgpack
application/schema+json
application/wsdl+xml
.wsdl
application/jose+json
application/x-pkcs12
.p12 .pfx
application/pkix-cert
.cer .der
application/x-pem-file
.pem .crt .key
application/pkcs8
.p8
application/pkcs10
.p10 .csr
application/postscript
.ps .eps .ai
application/x-latex
.latex .ltx
application/x-tex
.tex
application/x-dvi
.dvi
application/fits
.fits .fit .fts
application/vnd.oasis.opendocument.graphics
.odg
application/vnd.oasis.opendocument.chart
.odc
application/vnd.oasis.opendocument.formula
.odf
application/vnd.ms-project
.mpp .mpt
application/vnd.visio
.vsd .vst .vss .vsw
application/vnd.ms-access
.mdb
application/vnd.openxmlformats-officedocument.wordprocessingml.template
.dotx
application/vnd.ms-word.document.macroenabled.12
.docm
application/vnd.ms-excel.sheet.macroenabled.12
.xlsm
application/vnd.apple.pages
.pages
application/vnd.apple.numbers
.numbers
application/vnd.apple.keynote
.key
application/typescript
.ts
application/x-perl
.pl .pm
application/x-python-code
.pyc .pyo
application/x-csh
.csh
application/x-troff
.tr .roff .man
application/trig
.trig
application/n-triples
.nt
application/smil+xml
.smil .smi
application/vnd.mozilla.xul+xml
.xul
application/vnd.lotus-1-2-3
.123 .wks

AUDIO (23 types)

audio/mpeg
.mp3 .mpga
audio/ogg
.ogg .oga
audio/wav
.wav
audio/flac
.flac
audio/aac
.aac
audio/opus
.opus
audio/webm
.weba
audio/midi
.mid .midi
audio/mp4
.m4a .m4b .mp4a
audio/3gpp
.3gp .3gpp
audio/aiff
.aif .aiff
audio/x-ms-wma
.wma
audio/amr
.amr
audio/speex
.spx
audio/ac3
.ac3
audio/vorbis
audio/basic
.au .snd
audio/x-caf
.caf
audio/mpegurl
.m3u
audio/vnd.dts
.dts
audio/mp2
.mp2
audio/3gpp2
.3g2
audio/x-realaudio
.ra .ram

FONT (10 types)

font/woff
.woff
font/woff2
.woff2
font/ttf
.ttf
font/otf
.otf
application/vnd.ms-fontobject
.eot
font/collection
.ttc
font/sfnt
.sfnt
application/x-font-truetype
.ttf
application/x-font-opentype
.otf
application/x-font-woff
.woff

IMAGE (35 types)

image/jpeg
.jpg .jpeg .jfif
image/png
.png
image/gif
.gif
image/webp
.webp
image/avif
.avif
image/svg+xml
.svg .svgz
image/vnd.microsoft.icon
.ico
image/x-icon
.ico
image/bmp
.bmp
image/tiff
.tiff .tif
image/heic
.heic
image/heif
.heif
image/apng
.apng
image/jxl
.jxl
image/jp2
.jp2 .j2k .jpf
image/jpx
.jpx
image/vnd.djvu
.djvu .djv
image/vnd.adobe.photoshop
.psd
image/x-portable-bitmap
.pbm
image/x-portable-graymap
.pgm
image/x-portable-pixmap
.ppm
image/x-xcf
.xcf
image/ktx
.ktx
image/ktx2
.ktx2
image/x-exr
.exr
image/x-rgb
.rgb .rgba .sgi
image/x-xbitmap
.xbm
image/x-pcx
.pcx
image/vnd.wap.wbmp
.wbmp
image/x-tga
.tga .tpic
image/vnd.ms-photo
.jxr .hdp .wdp
image/x-win-bitmap
.cur
image/x-emf
.emf
image/wmf
.wmf
image/vnd.radiance
.hdr .rgbe

MODEL (19 types)

model/gltf+json
.gltf
model/gltf-binary
.glb
model/obj
.obj
model/stl
.stl
model/usd
.usd .usda .usdc
model/vnd.collada+xml
.dae
model/vnd.usdz+zip
.usdz
model/mtl
.mtl
model/vnd.dwf
.dwf
model/iges
.igs .iges
model/step
.stp .step .p21
model/step+xml
.stpx .stpxz
model/x3d+xml
.x3d
model/x3d+binary
.x3db .x3dbz
model/x3d-vrml
.x3dv .x3dvz
model/vnd.3mf
.3mf
model/vnd.fbx
.fbx
model/vnd.opengex
.ogex
model/JT
.jt

TEXT (33 types)

text/html
.html .htm
text/css
.css
text/csv
.csv
text/plain
.txt .text .conf .log
text/markdown
.md .markdown
text/calendar
.ics .ical .ifb
text/vcard
.vcf .vcard
text/javascript
.js
text/event-stream
text/tab-separated-values
.tsv
text/xml
.xml
text/x-python
.py .pyw
text/x-java-source
.java
text/x-c
.c .h
text/x-ruby
.rb
text/x-go
.go
text/x-rust
.rs
text/x-kotlin
.kt .kts
text/x-swift
.swift
text/x-scala
.scala .sc
text/x-php
.php .php3 .php4 .php5 .phtml
text/x-diff
.diff .patch
text/uri-list
.uri .urls .uris
text/x-rst
.rst
text/x-asciidoc
.adoc .asciidoc
text/x-nfo
.nfo
text/x-asm
.asm .s
text/troff
.roff .me .ms .mm
text/x-ini
.ini .cfg .inf
text/x-tcl
.tcl .tk
text/x-fortran
.f .f90 .for .f95
text/x-yaml
.yaml .yml
text/cache-manifest
.appcache .manifest

VIDEO (21 types)

video/mp4
.mp4 .m4v
video/webm
.webm
video/ogg
.ogv
video/x-msvideo
.avi
video/quicktime
.mov .qt
video/x-matroska
.mkv .mk3d
video/mp2t
.ts .mts .m2ts
video/mpeg
.mpeg .mpg
video/3gpp
.3gp .3gpp
video/3gpp2
.3g2 .3gp2
video/x-ms-wmv
.wmv
video/x-ms-asf
.asf .asx
video/vnd.avi
.avi
video/iso.segment
.m4s
video/x-dv
.dv .dif
video/x-ms-vob
.vob
video/H264
video/H265
video/AV1
video/x-flv
.flv
video/x-f4v
.f4v

MULTIPART (9 types)

multipart/form-data
multipart/byteranges
multipart/mixed
multipart/alternative
multipart/digest
multipart/related
multipart/signed
multipart/encrypted
multipart/report
No MIME types match your search.

MIME Types for Video Streaming: HLS, DASH, and WebRTC

Video streaming formats each require a specific MIME type to work correctly. Progressive download video uses video/mp4 with byte-range support. HLS (HTTP Live Streaming) requires two MIME types: application/x-mpegURL for the .m3u8 manifest file and video/mp2t for the .ts segment files.1 DASH (Dynamic Adaptive Streaming over HTTP) uses application/dash+xml for the .mpd manifest.2 MSE (Media Source Extensions) streaming uses video/webm or video/mp4 as the source buffer type. Getting any of these types wrong causes streaming failures that range from silent video player stalls to explicit iOS Safari errors that reject HLS streams entirely. Apple mandates specific MIME types for HLS, and iOS Safari is particularly strict about enforcing them. Consequently, configuring MIME types for a video streaming server is a prerequisite for testing across all target platforms, not an afterthought.

HLS MIME type requirements

Apple defined HLS and mandates specific MIME types for the two file types it uses. The .m3u8 playlist file, which lists stream variants and segment URLs, must be served as application/x-mpegURL. Some implementations also accept application/vnd.apple.mpegurl, which Apple recognises as an alias. The .ts segment files containing the MPEG-TS encoded video must be served as video/mp2t. iOS Safari enforces these types strictly: serving .m3u8 as text/plain or video/mp4 causes the native HLS player to reject the stream without a useful error message.1 Building on this, Android browsers and desktop browsers use JavaScript HLS libraries like hls.js that fetch manifests and segments directly via the Fetch API. These libraries are more tolerant of incorrect MIME types than iOS Safari, which can mask configuration errors that only surface on iOS devices. Verify MIME types on iOS Safari specifically as part of HLS deployment testing.

DASH manifest serving and segment delivery

MPEG-DASH manifests are XML documents served with Content-Type: application/dash+xml. The manifest file conventionally uses a .mpd extension. The DASH segments themselves are typically fragmented MP4 files and use video/mp4 or audio/mp4 depending on track type. CORS headers are required when DASH segments are loaded cross-origin by Media Source Extensions: the segment server must send Access-Control-Allow-Origin for the player page origin.2

Byte-range delivery for DASH segments

DASH players request specific byte ranges of segments to support adaptive bitrate switching. The segment server must support 206 Partial Content responses for Range header requests. Without byte-range support, the player must download entire segments before playback, breaking adaptive bitrate behaviour. Verify byte-range support with curl -r 0-1 -sI against a representative segment URL and confirm the response is 206, not 200.

MSE and Media Source Extensions API

The Media Source Extensions API builds a video stream in the browser from JavaScript-provided data. A SourceBuffer is created with addSourceBuffer(), which requires a MIME type string specifying both the container and codec. For MP4 video: 'video/mp4; codecs="avc1.42E01E"' creates a source buffer for H.264 baseline MP4. For WebM video: 'video/webm; codecs="vp9"' creates a VP9 WebM buffer. The MIME type string passed to addSourceBuffer() must exactly match the codec and container of the segments you append, otherwise the browser rejects the segments.3 Consequently, this is a code-level MIME type declaration rather than a server header. For audio-only MSE streams, use 'audio/mp4; codecs="mp4a.40.2"' for AAC in MP4. Building on this, isTypeSupported() checks whether the browser can handle a given MIME type string before attempting to create a source buffer, enabling graceful degradation when a specific codec combination is unavailable.

VP9 and AV1 in WebM containers for open-codec streaming

VP9 inside a WebM container uses the MIME type video/webm; codecs="vp9" for MSE source buffer creation. Browser support for VP9 in WebM is broad: Chrome, Firefox, and Edge have supported it since 2015, and Safari added VP9 support in version 14.1.4 AV1 in WebM uses video/webm; codecs="av01.0.08M.08" (the full AV1 codec string carries profile, level, and bit depth), and Safari added AV1 playback support in version 17.5 Both codecs deliver better compression than H.264 at equivalent quality, making them worth including in an adaptive bitrate ladder alongside H.264 for clients that cannot use them.

MediaSource.isTypeSupported() accepts the full codec string including parameters, so your player code can query support before registering a source buffer. Querying video/webm; codecs="av01" returns false in Safari 15 and true in Safari 16, giving you a reliable branch condition. When AV1 is unsupported, falling back to the VP9 source buffer requires only changing the codec string in the addSourceBuffer() call; the streaming infrastructure remains identical because both codecs share the WebM container.

Open-codec streaming server configuration

Serving WebM files requires video/webm in your server's MIME type table. Apache's default mime.types file includes this mapping, but Nginx's default mime.types file did not include video/webm in older distributions. On Nginx, add video/webm webm; to the types block and reload. For CDN origins, confirm the origin passes the correct Content-Type before enabling CDN caching, since CloudFront and Fastly cache responses including their Content-Type and will serve the cached value to all edge nodes regardless of origin changes made after the first cache fill.

CMAF and fragmented MP4 for unified HLS and DASH delivery

Common Media Application Format (CMAF) uses fragmented MP4 as the container for both HLS and DASH segments, replacing the TS container for HLS and the WebM or MP4 container for DASH with a single file format that both protocols consume. Fragmented MP4 segments use the video/mp4 MIME type for video tracks and audio/mp4 for audio tracks when referenced from manifests. Using fMP4 segments reduces storage costs because a single segment file serves both HLS and DASH players without transcoding differences between formats.

HLS manifests using fMP4 segments require version 7 or later in the #EXT-X-VERSION tag. Each segment group needs an initialisation segment referenced by an #EXT-X-MAP tag pointing to a separate .mp4 file that contains the codec initialisation data without media samples. Clients that cache the initialisation segment and reference it across multiple media segments avoid re-fetching the codec setup data on every ABR quality switch.

Low-Latency HLS partial segments and MIME requirements

Low-Latency HLS (LL-HLS) introduces partial segments declared with the EXT-X-PART tag, each carrying a small portion of a full segment to reduce end-to-end latency below two seconds.6 Partial segments are fMP4 fragments and use video/mp4 as their Content-Type like regular segments. Your CDN must support the _HLS_msn and _HLS_part query parameters that LL-HLS clients append to playlist requests for blocking playlist reloads; Cloudflare's LL-HLS support handles these parameters natively, but custom origin servers must implement the blocking reload response pattern to avoid clients falling back to regular HLS latency.

The fMP4 container used by partial segments means the byte-range and caching rules that apply to regular HLS also apply here, so a CDN that mishandles Range requests degrades LL-HLS as badly as it does standard HLS. Testing partial segment delivery with a player that reports segment fetch timing exposes the regression before users notice added latency; why iOS Safari rejects HLS streams almost always traces back to a wrong MIME type. CapyToolkit's MIME reference documents the video/mp4 Content-Type so the fMP4 fragments carry the type the player expects.

When to use this

Use this guide when configuring a server for adaptive bitrate video streaming with HLS or DASH, debugging video playback failures on iOS Safari, or implementing Media Source Extensions streaming in a custom video player.

Examples

Nginx: add HLS and DASH MIME types

Required for HLS and DASH manifests and segment files to be served with correct types.

Test HLS manifest MIME type with curl

iOS Safari requires application/x-mpegURL for .m3u8 files. Verify before testing on device.

MSE: create source buffer with codec string

addSourceBuffer() requires both container and codec in the MIME type string.

Sources
  1. 1.

    Apple, "HLS Authoring Specification for Apple Devices," developer.apple.com, accessed June 2026. https://developer.apple.com/documentation/http-live-streaming/hls-authoring-specification-for-apple-devices

  2. 2.

    "application/dash+xml," IANA, iana.org, accessed June 2026. https://www.iana.org/assignments/media-types/application/dash+xml

  3. 3.

    W3C, "Media Source Extensions," w3.org, 2024. https://www.w3.org/TR/media-source/

  4. 4.

    WebKit, "New WebKit Features in Safari 14.1," webkit.org, 2021. https://webkit.org/blog/11648/new-webkit-features-in-safari-14-1/

  5. 5.

    WebKit, "WebKit Features in Safari 17.0," webkit.org, 2023. https://webkit.org/blog/14445/webkit-features-in-safari-17-0/

  6. 6.

    Cloudflare, "Vary for Images: Serve the Correct Images to the Correct Browsers," blog.cloudflare.com, 2021. https://blog.cloudflare.com/vary-for-images-serve-the-correct-images-to-the-correct-browsers/

FAQ