- #[allow(unused_variables)]
- fn seek(&mut self, time: u64) -> DemuxerResult<()> {
- Err(NotImplemented)
+ fn seek(&mut self, time: u64, seek_index: &SeekIndex) -> DemuxerResult<()> {
+ let ret = seek_index.find_pos(time);
+ if ret.is_none() {
+ return Err(DemuxerError::SeekError);
+ }
+ let pos = ret.unwrap().pos;
+ self.src.seek(SeekFrom::Start(pos))?;
+
+ let cur_pos = self.src.tell();
+ if cur_pos < self.movi_pos { return Err(DemuxerError::SeekError); }
+ let skip_size = (cur_pos - self.movi_pos) as usize;
+ if skip_size > self.movi_size { return Err(DemuxerError::SeekError); }
+ self.movi_size = self.movi_orig - skip_size;
+
+ Ok(())