This is an example of the Cisco's OpenH264 library compiled to javascript with emscripten for running natively in browsers.
This is very similar to eg https://github.com/mbebenita/Broadway and others. The main difference is that they use the BSD decoder which is limited to h264 baseline profile. Among others, that means no cabac. OpenH264 (http://www.openh264.org/) does support cabac.
- CABAC decoding
- Tested in Chrome v43 and Firefox 40
- single nal decoding, makes it easy to decode any container externally
- > 30 fps for 1280x720 main profile stream (cabac encoded) on Haswell i7
- Lot's of hardcoding in demo (decode.html).
-
only tested on linux / emcc (Emscripten GCC-like replacement) 1.29.0 (commit fdf24b478e1b26c0362a1627aca49ef82fd53f6a)
-
Get emscripten (http://kripken.github.io/emscripten-site/docs/getting_started/Tutorial.html)
-
Run make
The Makefile will download all dependencies and build everything. A small demo is provided in decoder.html. The demo uses Broadway's rendering library.
There are a lot of copying going on, Several reasons:
- A quick look didn't reveal any buffer control in OpenH264 (validity of data pointers are until next decode call?)
- Broadway's yuv->rgb conversion needs back-to-back planes with stride = width: OpenH264 doesn't do that.
- closure-compiler, even with at whitespace level makes playback slower and more jittery. No clue why.