private TimeSpan RepositionPipelines(TimeSpan timeIndex) { var videoPosition = videoPipeline.Seek(timeIndex); var audioPosition = audioPipeline.Seek(videoPosition); Logger.Info($"Request Position {timeIndex} Video {videoPosition} Audio {audioPosition}"); audioPipeline.PacketPredicate = packet => !packet.ContainsData() || packet.Pts >= videoPosition; return(videoPosition); }
private TimeSpan RepositionPipelines(TimeSpan timeIndex) { Logger.Info(""); var newPosition = videoPipeline.Seek(timeIndex); audioPipeline.Seek(newPosition); audioPipeline.PacketPredicate = packet => !packet.ContainsData() || packet.Pts >= newPosition; return(newPosition); }
public Task <TimeSpan> Seek(TimeSpan time, CancellationToken token) { if (!IsSeekingSupported()) { throw new SeekException("Seeking is not supported"); } videoPipeline.Pause(); audioPipeline.Pause(); var videoSegmentStart = videoPipeline.Seek(time); audioPipeline.Seek(videoSegmentStart); audioPipeline.PacketPredicate = packet => !packet.ContainsData() || packet.Pts >= videoSegmentStart; videoPipeline.Resume(); audioPipeline.Resume(); return(Task.FromResult(videoSegmentStart)); }