This extends the `Material` object to support `HTMLVideoElement`, similar
to how we already support `Canvas`. It also adds similar support to the
`Entity` layer, via the `ImageMaterialProperty`.
Also added `VideoSynchronizer`. By default, video materials just use the
current video frame as the texture, so if you pause, seek, or otherwise
change the video, the material is updated to match. `VideoSynchronizer` is
a helper class that flips this so that the video time is controlled by the
simulation clock, allowing for you to synchronize the video with the rest
of your scene.
Added a new Sandcastle example using Big Buck Bunny, an open source blender
movie project from a few years ago. To avoid bloating the repository and
release zip size, movie files are hosted on cesiumjs.org.
Browser Support
IE will most likely never support video textures, but they are being
added to Edge. Chrome and Firefox work great, Safari should work as well.
Sound
Sound works as expected, even when playing faster or slower than normal. Ultimately it's browser controlled and users determine whether to include sound or not directly on the video element. Our Sandcastle demo has sound.
The WeakMap shim actually stored values (in this case the observable storage) on the keys (view models) directly, using a hidden randomly-generated property, and overwrote the global Object.getOwnPropertyNames function to hide that property. For our purposes, the observable storage is not really that secret, so it simplifies everything to just create a non-enumerable property named __knockoutObservables on the view model. Less is more.
Make the files match their upstream form as closely as possible. We should not be aggressively rewriting and reformatting our third-party libraries to match our own coding standards, because it makes it much harder to diff against the original when trying to upgrade.
Also adjust the licensing comments to:
* be correctly preserved in minified output by both r.js (UglifyJS) and Dojo (Closure Compiler)
* clearly indicate the names and URLs of the components each license applies to.
The selection of the implementation should only happen once. Add smarts to the non-native setTimeout fallback to make it better target 60fps by accounting for the time taken by the callback. Add es5-shim library when running specs to allow them to actually be runnable on old IE. Update LICENSE.md to reflect current state of third party libraries by removing old ACE and JS Beautifier entries, and add CodeMirror, JSHint, and now es5-shim.
Replace Jobs.downloadImage and getImageFromUrl with promise-based loadImage.
Change jsonp to work in a promise-based way. Fix some other random documentation
problems I noticed along the way.