What is HTML 5 video?
[any material that should appear in print but not on the slide]
History
- Proposed by Opera to WHATWG with experimental implementation
- Alternative specification from Apple
- Combination of both proposals with feedback from WHATWG/W3C participants
[any material that should appear in print but not on the slide]
Demos
[any material that should appear in print but not on the slide]
Implementation One
Libraries
- Used Xiph reference libraries
- libogg
- libvorbis
- libtheora
- PortAudio for sound
Result
- Basic playback
- No seeking
- Bad a/v sync
- Audio crashes on some platforms
[any material that should appear in print but not on the slide]
Implementation Two
Libraries
- Used Annodex higher level libraries
- liboggz
- libfishsound
- liboggplay
- libsydneyaudio
Result
- What you saw in Firefox 3.1 alpha and beta's
[any material that should appear in print but not on the slide]
Seeking
- Ogg requires bisecting of file to seek
- Implemented in Firefox using HTTP byte range requests
- Also needed to get duration of video
- Additional request to find keyframe and read forward
- Slow...
- Improvements coming with OggIndex
[any material that should appear in print but not on the slide]
Sidetrack: Native Backends
Native Backends
- GStreamer on Linux (Bug 422540)
- DirectShow on Windows (Bug 435339)
- QuickTime on Mac OS X (Bug 435298)
[any material that should appear in print but not on the slide]
Back to Implementation Two
- Dropped development of native backends
- Continued work on liboggplay backend
- Result is the media functionality of Firefox 3.5/3.6
[any material that should appear in print but not on the slide]
liboggplay
- Allowed basic playback to be implemented quickly
- Issues with design of liboggplay related with a/v synching
- Unable to drop frames or prioritize audio playback over video
- Doesn't support chained Ogg playback
[any material that should appear in print but not on the slide]
Implementation Three
- New Ogg backend being developed (Bug 531340)
- Back to using libogg, libvorbis and libtheora directly
- Designed to prioritize audio playback
- Skips frames falling back to keyframe only decoding if needed
- Reduces code footprint
- Intended to allow chained Ogg playback
[any material that should appear in print but not on the slide]
Audio
- Had difficulty finding an audio library that worked on all platforms
- Originally PortAudio
- Moved to libsydneyaudio, ALSA backend on Linux
- Still issues with PulseAudio
[any material that should appear in print but not on the slide]
Graphics Backend
- Need to be able to composite video with HTML
- Rendering done in software
- liboggplay has optimized YUV to RGB conversion on some platforms (SSE2)
- Work in progress on moving some parts of the graphics pipeline to hardware
[any material that should appear in print but not on the slide]
Implementation Articles/Examples
[any material that should appear in print but not on the slide]
Mobile
- Theora running on TI C64x+ DSP and OMAP3
- Much work going on improving Theora decoding on ARM devices (eg. Nokia N900)
- Work ongoing on the GStreamer backend for Mobile usage
[any material that should appear in print but not on the slide]
Video Today
- Theora playback works in three major browsers (Chrome, Firefox, Opera)
- Safari playback of Theora with XiphQT plugin
- Sites already using it (Daily Motion, Wikipedia, Archive.org)
- See Robert O'Callahan's talk on Friday for more
[any material that should appear in print but not on the slide]