diff -aur libmpdemux/demux_avi.c.orig libmpdemux/demux_avi.c --- libmpdemux/demux_avi.c.orig Tue Feb 17 14:30:44 2004 +++ libmpdemux/demux_avi.c Sun Feb 22 20:40:04 2004 @@ -449,7 +449,7 @@ demuxer->priv=(void*)priv; //---- AVI header: - read_avi_header(demuxer,(demuxer->stream->flags & STREAM_SEEK)?index_mode:-2); + read_avi_header(demuxer,(demuxer->stream->flags & STREAM_SEEK_BW)?index_mode:-2); if(demuxer->audio->id>=0 && !demuxer->a_streams[demuxer->audio->id]){ mp_msg(MSGT_DEMUX,MSGL_WARN,"AVI: invalid audio stream ID: %d - ignoring (nosound)\n",demuxer->audio->id); diff -aur libmpdemux/network.c.orig libmpdemux/network.c --- libmpdemux/network.c.orig Tue Feb 17 14:30:44 2004 +++ libmpdemux/network.c Sun Feb 22 20:41:06 2004 @@ -754,7 +754,11 @@ streaming_ctrl->data = (void*)http_hdr; // Check if we can make partial content requests and thus seek in http-streams - seekable=(http_hdr!=NULL && http_hdr->status_code==200 && strncmp(http_get_field(http_hdr,"Accept-Ranges"),"bytes",5)==0); + if( http_hdr!=NULL && http_hdr->status_code==200 ) { + char *accept_ranges; + if( (accept_ranges = http_get_field(http_hdr,"Accept-Ranges")) != NULL ) + seekable = strncmp(accept_ranges,"bytes",5)==0; + } // Check if the response is an ICY status_code reason_phrase if( !strcasecmp(http_hdr->protocol, "ICY") ) { diff -aur libmpdemux/stream.h.orig libmpdemux/stream.h --- libmpdemux/stream.h.orig Tue Feb 17 14:30:45 2004 +++ libmpdemux/stream.h Sun Feb 22 20:50:30 2004 @@ -229,7 +229,7 @@ } inline static int stream_skip(stream_t *s,off_t len){ - if(len<0 || (len>2*STREAM_BUFFER_SIZE && (s->flags & STREAM_SEEK))) { + if( (len<0 && (s->flags & STREAM_SEEK_BW)) || (len>2*STREAM_BUFFER_SIZE && (s->flags & STREAM_SEEK_FW)) ) { // negative or big skip! return stream_seek(s,stream_tell(s)+len); }