EBML parser


A pure decoder for rfc-8794. Use this library to parse Extensible Binary Meta Language ebml, webm and mkv file format.


The main goal of this project is to enable serving a webm stream by splitting the initialization segments from the media segments.

Implemented features:

  • Basic data types (binary, text, int)
  • Unknown-sized element
  • Pretty printer
  • Incremental stream parser
  • WebM track informations
  • Float and date types
  • Schemas validation
  • Encoder
  • Property tests


Check the Codec.EBML module for documentation. Or try the executable demo:

$ cabal run exe:haskell-ebml -- ./data/firefox-mrec-opus.webm
[pretty print the EBML elements]

Without a parameter, the command process the stdin as a webm stream, for example:

$ gst-launch-1.0 pulsesrc ! audioconvert ! opusenc ! webmmux ! fdsink fd=2 2>&1 >/dev/null | cabal run
[print the stream cluster]


Contributions and bug reports are welcome! Run the ./bin/run-tests script to validate a commit.