[theora] Indexing Ogg files for faster seeking

Chris Pearce chris at pearce.org.nz
Mon Sep 21 20:27:28 PDT 2009


I've developed an indexer which embeds a keyframe index track in Ogg 
files. It embeds the index in its own track, so that players that don't 
understand or don't want to use the index can just ignore it.

Ogg needs this to make seeking over networks faster and more efficient.

Currently we must do a bisection search when seeking, which usually 
takes aound 6 HTTP requests, give or take a few. If we are to compete 
with existing internet video (AKA the "YouTube" case) we need to do that 
faster and more efficiently - using fewer HTTP requests. We need an 
index so that seeking only takes 1 HTTP request.

Using an index of keyframes also makes it easier to seek without visual 
artifacts - though of course robust players should be able to do that in 
the absence of an index.

You can download the source code for my indexer here:
http://github.com/cpearce/OggIndex

My specification for the index track is stored in that repo, here:
http://tinyurl.com/l4c9yg

I'd appreciate comments on the spec...

To see how it improves network seeking performance, you can download a 
version of Firefox which can take advantage indexes here:
http://pearce.org.nz/video/firefox-indexed-ogg-seek.linux.tar.bz2
http://pearce.org.nz/video/firefox-indexed-ogg-seek.macosx.dmg
http://pearce.org.nz/video/firefox-indexed-ogg-seek.win32.zip

Then point that browser here:
http://pearce.org.nz/video/indexed-seek-demo.html
(There's a couple of other indexed ogg files in
http://pearce.org.nz/video/ too)

In terms of compatibility, currently the following players can play and 
seek in indexed files (i.e. aren't broken when playing/seeking indexed 
files):
* VLC
* Cortardo
* XiphQT plugin

The following players can play indexed files, but can't seek:
* Anything that uses liboggz (including Firefox 3.5).
* The DirectShow filters (do these use liboggz?)

It only takes a pretty trivial patch to enable liboggz (and thus FF3.5) 
to seek in files with an index; liboggz refuses to seek because it 
doesn't understand metrics for the index track. It shouldn't be too hard 
to fix other players as well.

Totem on Ubuntu9.04 refuses to play the indexed files, though it decodes 
the first few frames. That may require a gstreamer patch.

So... what do you guys think?




More information about the theora mailing list