Firefox Ogg Support

From Meta, a Wikimedia project coordination wiki

A call for native open video and CMML support in Firefox.

Rationale[edit]

Native support for ogg theora video in firefox is critical for wide adoption of the patent-free video codec ogg theora. Unlike text and images, widespread support for free tools that enable the creation and participation with free audio video are limited. For full rationale see Monty’s about xiph

Specs[edit]

The following attempts details the feature set for ogg theora video support for multiple browser. The goals of this feature set are to enable theora to be on par or better than what is already available in the flash video system.

Feature Description Feature Status (VLC 0.8.5)
A simple web based install interface (both as an “firefox extension” and IE activex component. Or native support would be even better. annodex.net has a vlc installer for firefox on mac/linux/pc adding in an easy install for active X would be good.
Obey DOM object layer order: video objects would obey their z-index order like other elements in the page. PNG images could smoothly blend over video. requires what is called a “windowless” plugin
application hooks to allow the plug-in to compress and upload client side files. Enabling web scripts to request permission to send a limited set of encoding settings to the client computer and allowing the client to select a source video stream from a file or capture source no update
Multiple video files could be played back simultaneously or in uninterrupted sequence via control over buffering future clips. partially working via the use of "sequences"
Cache header support, as to cache video and audio clips based on http headers no update
A full screen display mode working
Full support of ogg skeleton streams and DOM level access to embed continus xml (based on the cmml standard) no update
A default css/javascript based video control interface for simple in-line embed of an ogg file. The interface will be syllable via CSS styles or included by default but easily over writable via CSS or extended embed tags not super high priority good JS support makes this possible: see javascript vlc play head
JavaScript hooks be able to access info such as:
how much of the clip has been buffered (to show progress bars in progressive playback) part of the buffer issues
what frame or time the video is currently at. working
be able to Stop, play, pause the video (enabling css/html styled video playback controls) working
be able to jump to arbitrary time in the video stream. working for non-annodex based streams see javascript vlc play head
Alpha video layers? To enable transparent video overlays on other video or background images? part of windowless plugin will theoretically allow video to be put on top of other video. (not high priority)

Approach[edit]

There are a few possible approaches to making this happen.

  1. Directly writing in support for libtheora into firefox. This bring up problems such as sound hardware, color conversion compatibility with sound systems etc. But may be easier to have good performance with multiple streams and easier to make it work with the dom index order.
  2. Extending the existing mozilla-vlc-plugin. Has the added benefit of working with lots of media types but plugin could be large and getting firefox to put it into their distributable will be difficult. Installing extensions can be done with a few clicks like flash. VLC already has good support for a few of the above mentioned features and we won't have to deal with the hardware level issues.
  3. Creating a netscape standard plugin. This way it will work with Internet Explorer also, as it is used by 80% of people in the world. This plugin should be as easy to install as Adobe's Flash : single click on any machine. [This won't work off the bat; IE support for Netscape plugins was removed in IE 5.5 SP2. You might be able to install Adam Lock's wrapper which restores this functionality to IE, but it might not work with your plugin - Gerv]

The VLC plugin is already been developed as an ActiveX component so we will likely use that.