Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
82 lines (50 sloc) 3.87 KB

HTML5 MediaElement startOffsetTime Patches

This repository contains patches we created to implement the startOffsetTime attribute of HTML 5 HTMLMediaElement objects in Firefox. The startOffsetTime value is implemented for WebM video only, using the DateUTC field in the Segment Information section of the WebM stream.

Note that this implementation differs slightly from the current HTML 5 specification, in that startOffsetTime returns a double and not a Date object. The value contains the number of milliseconds since the Unix epoch, which is easily converted to a Date value in JavaScript:

var date = new Date(videoElement.startOffsetTime);

The Firefox patch also adds some other attributes to the HTMLMediaElement that are not part of the HTML 5 specification, but we used during our investigation:

// Absolute time reference of media stream, in seconds,
// essentially currentTime + startOffsetTime
readonly attribute double currentTimeAbsolute;

// Time of browser joining the stream, relative to the
// start of the stream, in microseconds
readonly attribute double startTime;

// The DateUTC value read from the Segment Information
// section of the WebM stream, converted to be milliseconds
// relative to the Unix epoch
readonly attribute double dateUTC;

There is also a patch for FFmpeg that sets the DateUTC value to the current system time when generating WebM output. DateUTC is calculated in the same way as the GStreamer Matroska plugin (refer to matroska-mux.c and ebml-write.c).


The file firefox-8.patch contains a patch for the Firefox 8 source code. The following instructions explain how to compile Firefox on Linux.

First, download and unpack the Firefox source code:

$ mkdir firefox
$ cd firefox
$ curl -O
$ tar jxvf firefox-8.0.source.tar.bz2

Apply the patch:

$ cd mozilla-release
$ patch -p2 < firefox-8.patch

Install Firefox's dependencies (refer to this page for details):

$ sudo apt-get -y build-dep firefox
$ sudo apt-get -y install mercurial libasound2-dev libcurl4-openssl-dev libnotify-dev libxt-dev libiw-dev mesa-common-dev autoconf2.13 yasm


$ ./configure
$ make

When the build is complete, you can find the patched binary in the dist/bin directory.


The file ffmpeg.patch contains a patch for FFmpeg 0.8.2.

Download and unpack the ffmpeg source code:

$ mkdir ffmpeg
$ cd ffmpeg
$ curl -O
$ tar jxvf

Apply the patch:

$ cd ffmpeg-0.8.2
$ patch -p1 < ffmpeg.patch


$ ./configure
$ make


These patches are released under the same licenses as the original projects: the Firefox patch is released under the Mozilla Public License 1.1 and the FFmpeg patch is released under the GNU Lesser General Public License (LGPL) version 2.1.


This software was written by Chris Needham, chris.needham at