Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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));
        }