[Vorbis-dev] Re: [theora-dev] Ogg: correspondence between playtime
and file offset
Ralph Giles
giles at xiph.org
Wed Jul 5 14:51:53 PDT 2006
On Sat, Jul 01, 2006 at 09:45:21AM +0800, ramakrishna.p at radixs.com wrote:
> If you can provide formulae or any function, that would be great help to
> provide streaming of ogg files with all the features that typical media
> player should have.
The general algorithm is this: perform a bisection search for the first
page whose granulepos maps to a time prior to your seek point. You can
use all the streams you know how to parse (i.e. vorbis and theora) to do
this. Keep in mind that some pages may have a granulepos of -1 and these
must be ignored. This isn't sufficient for perfect playback, but it is
close.
For theora, this will likely be an predicted frame and so you cannot
actually begin playback there. One option is to start playing audio and
just discard any video packets until the next keyframe. However, the
form of the theora packet granulepos encodes the offset of the previous
keyframe. You can use this to perform a second bisection search, begin
decoding there, and then start playback at the actual seekpoint.
In both cases you can use a cache and the average bitrate to narrow down
the first step of the bisection search.
Hope that helps, and thanks for adding ogg theora support!
-r
More information about the Vorbis-dev
mailing list