Brewser Docs
Switch Runtime

Audio & Media

Web Audio, audio and video elements, and the codecs that actually decode

Brewser has real audio and video support — Web Audio for synthesis and analysis, <audio> and <video> elements for playback, and a broad set of codecs. Audio and video play back well across the formats below; because decoding runs in software, the one thing to watch is very high-bandwidth video, which can stutter.

Web Audio

The core of the Web Audio API is real and hardware-backed. These nodes work as you'd expect:

  • AudioContext / OfflineAudioContext, AudioDestinationNode
  • GainNode, StereoPannerNode, AudioBufferSourceNode, OscillatorNode
  • AnalyserNode — real time/frequency data, so spectrum visualisers work
  • AudioParam automation and decodeAudioData

Some less-common nodes are shimmed for compatibility so capability-probing apps don't crash: filter, convolver and panner nodes pass audio through unprocessed, and a few others (delay, compressor, wave-shaper, script processor) are present but inert. connect() is lenient — an unsupported connection is a no-op rather than a thrown error — so libraries that build large graphs keep working. Build your core sound on the real nodes above and you're on solid ground.

new Audio() works for sound effects and music (whole-file decode).

<audio> and <video> elements

HTML <audio> and <video> elements play through the runtime's media pipeline. canPlayType() answers honestly, returning "maybe" for the container/codec combinations it can decode.

Media can come from local files, blobs, and the network — including HLS streams over HTTPS (see Networking).

Codec support

Playback works well for the formats below. Decoding is done in software (via FFmpeg), so the codec list is broad and the practical limit is bandwidth: high-bitrate or high-resolution video — 1080p, and heavier codecs like VP9 and AV1 — can drop frames on the Tegra X1. Prefer H.264 at 720p for the smoothest video.

Video

CodecDecodesNotes
H.264 / AVCBest choice; smooth at 720p
H.265 / HEVCWorks; HD is performance-limited
VP8
VP9Performance-limited
AV1Performance-limited
MPEG-1/2/4, VC-1, TheoraSoftware-decoded

Audio

CodecDecodes
MP3
AAC / M4A
Ogg Vorbis
Opus
FLAC
WAV / PCM
AC3/EAC3, ALAC, WMA

Video decodes on the CPU (the hardware video block isn't engaged in this build), so a very high-bandwidth stream is the most likely thing to stutter — not any particular codec. In testing, everything plays; only high-bandwidth video suffers.

See it in action

  • com.natureglass.spectraplay — a Web Audio spectrum visualiser reading an <audio> element through an AnalyserNode, rendered with WebGL 2.
  • com.natureglass.streamcast — a <video> player pulling a live HLS stream.

Browse them at play.brewser.io.

On this page