GNOME Bugzilla – Bug 629212
[oggdemux] Improve support for push mode (seeking, duration)
Last modified: 2011-10-29 15:36:54 UTC
Hi, When playing back urls like for example: http://stream101.jamendo.com/stream/537309/ogg2/07%20-%20Magdalen%20Graal%20-%20Goodbye.ogg?u=0&h=c99d39f075 In totem, they are not seekable and the duration is off. Where as downloading them using wget and then playing them in totem both are fine. I believe this is an issue with the libgstsouphttpsrc plugin. Most of the time I use audacious as my media player for sound files (and totem for video), and audacious had the same issue. I've created a patch for this for audacious. The problem with audacious was that the seek function of the ov_callbacks struct passed in when using libvorbis, was getting called like this: "fseek(f, 0, SEEK_END)" this is quite a normal thing to do to determine filesize, but it effectively seeks 1 byte past the end of the file (to the magical EOF marker byte). The neon http plugin in audacious could not handle this seeking of 1 byte past the end, and this lead to exactly the same results as I'm seeing under totem. So the chances are that the issue in gstreamer is the same (but that is just a hunch). Regards, Hans p.s. To reproduce login to jamendo, and choose to play music using an external player with m3u files with ogg vorbis files linked inside them.
Well, the duration is only 3 seconds off, that's good for an estimation. Seeking and duration reporting over HTTP is only working/accurate if the file has a Skeleton stream with an index table.
(In reply to comment #1) > Well, the duration is only 3 seconds off, that's good for an estimation. > Seeking and duration reporting over HTTP is only working/accurate if the file > has a Skeleton stream with an index table. Hmm, This is working fine with audacious (with the seek to eof issue fixed). I find it weird that gstreamer which I consider more advanced then the xmms derived audacious cannot handle this. Esp. as ogg is supposed to nbe *the* open format. Ah well. Regards, Hans
First pass push mode seeking implementation for oggdemux. Upon the first seek, duration is determined, and a message is sent with the duratoin. Before that seek, the existing estimated duration will still be there, but seeking when readying the pipeline didn't work. Seeking is currently done to the previous keyframe, so there's a granularity in the seeking. http://git.collabora.co.uk/?p=user/vincent/gst-plugins-base;a=shortlog;h=refs/heads/seeking Here's the work so far. Comments welcome.
Updated, it now doesn't need to wait for a user seek to determine duration. Seeking is disabled for chained streams.
Hi, Thanks for working on this! You're implementation sounds good. I'll give it a test run as time permits (likely some where next week during my christmas holliday). Regards, Hans
(In reply to comment #4) > Updated, it now doesn't need to wait for a user seek to determine duration. > Seeking is disabled for chained streams. I've given the version from your git tree a test and now seeking in oggs streamed from jamendo works great. Thanks for fixing this! Regards, Hans
Thanks for testing. The branch has been updated with various fixes (mostly for streams having a video track though).
Fixed by 0173afa38cc6f8a2cb810f99a24ddb1d5d5f4868 See https://bugzilla.gnome.org/show_bug.cgi?id=621897