-
Notifications
You must be signed in to change notification settings - Fork 335
Home
Cyril Concolato edited this page May 29, 2015
·
3 revisions
Welcome to the mp4box.js wiki!
ISOBMFF read-only:
- simple box analysis (e.g. http://download.tsi.telecom-paristech.fr/gpac/mp4box.js/filereader.html)
- users: dash.js (https://github.com/Dash-Industry-Forum/dash.js)
- provide MSE helper functions
- RFC6381 about codecs
- more complex use case cases:
- sample extraction (fragmented or not modes)
- users:
- extraction of TTML samples (to be processed by another library)
- extraction of HEVC frames for BPG image visualization
- users:
- metadata extraction
- users: research issues such as transport of Flash games
- sample extraction (fragmented or not modes)
ISOBMFF read-write:
- on-the-fly fragmentation
- especially non-fragmented, fast start ('moov' before 'mdat')
- non-fragmented, no fast start
- users: P2P
- Browsers compatibility (IE10+, FF, Chrome, Safari)
- Node compatibility
- Should handle Large files (tested 7+GB)
- Should be input delivery independant
- XHR (Node, Browser)
- File (Node, Browser)
- P2P
- "Stream"
- Progressive
- W3C Streams API
- 10+ JS files
- API is callback-based
- Should we use Promises? (when?)
MP4Box.js is fed with ArrayBuffer objects by the application. MP4Box.js is agnostic with the media it is fed, although it has expectations from its API (in particular the data is expected to be a remote ISOBMF) and a fileStart property indicates the offset in that file.
+===============+===========================================================+
| Application | |
+===============+===========================================================+
| MP4Box.js API | append() / setExtractOptions() / flush() / ... |
+===============+===========================================================+
| MP4Box.js | ISOFile: API |
+ +=================+==============+==========================+
| | MPEG-4 'esd' | Box | Sample |
| | Parsing | read & write | management |
+ +=================+==============+==========================+
| | DataView or DataStream or MultiByte Stream |
+===============+===========================================================+
| Data | ArrayBuffer |
+===============+===========================================================+
| Network | |
| (controlled | Protocol independent: XHR, WebRTC DataChannel, File, |
| by the | Stream API |
| Application) | |
+===============+===========================================================+
TODO
- Grunt
- tasks: concatenate, uglify, code quality (jshint)
- Conditional build (two targets): "simple" (box parsing only) and "full"
- QUnit
- many tests: extraction, buffer overlaps, simple box parsing ...
- no MSE coverage (pass a buffer through MSE and check result - would help is regression in MSE)
- Browser testing manually
- Node testing: not yet, PhantomJS Bug
- TODO: isomorphic when serializing to JS then re-writing boxes
- Performances:
- DataView is right but slow: https://groups.google.com/forum/#!searchin/dashjs/dataview/dashjs/5PmEkjKILDQ/bPVw4YDIS3kJ
- Network evaluation (from offsets returned by the API): TODO
- continuous data, box-aligned
- continuous data, non box-aligned
- non continuous data, non box-aligned
- Test code in workers
- Code is not yet re-entrant
- Should return box size + 8
- Separate MP4Box.js "Simple" and "Full" and remove datastream.js (which is big) from "Simple"
- Use ES6 (Classes, 'let' instead of 'var', ...)
- dash.js plans to move to ES6
- binders in Grunt to generate ES5 from ES6