seekTo method
Future
seekTo(
- int ts, {
- int streamIndex = -1,
- int minTs = ffi.INT64_MIN,
- int maxTs = ffi.INT64_MAX,
- int flags = 0,
override
Implementation
@override
Future seekTo(
int ts, {
int streamIndex = -1,
int minTs = ffi.INT64_MIN,
int maxTs = ffi.INT64_MAX,
int flags = 0,
}) async {
if (_pts == null) throw Exception("no pts data");
final pauseAtSeekTo = _pts!.playing;
final pts = _PTS(_pts!.streams, ts);
_pts = pts;
// remove cache frame
for (var frames in _frames.values) {
for (var frame in frames) {
frame._close();
}
frames.clear();
}
_frames.clear();
// flush codec
for (final codec in _codecs.values) {
await codec.flush();
}
await _playback?.stop();
// seek
await super.seekTo(
ts,
streamIndex: streamIndex,
minTs: minTs,
maxTs: maxTs,
flags: flags,
);
// seek to next frame
if (pts.streams[ffi.AVMediaType.VIDEO] != null) {
Completer<bool> ret = Completer();
_playingFuture = _resume(ret);
return ret.future.then((hitframe) {
if (hitframe && !pauseAtSeekTo) pause();
});
} else if (pauseAtSeekTo) {
_playingFuture = resume();
}
}