From 65912ec4e0832799ea08c200942e5463f4b3d64c Mon Sep 17 00:00:00 2001 From: snaeji Date: Sun, 13 Sep 2020 11:08:56 +0000 Subject: [PATCH] Update UriAudioSource.m (#181) --- darwin/Classes/UriAudioSource.m | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/darwin/Classes/UriAudioSource.m b/darwin/Classes/UriAudioSource.m index 91321d4..9945a0a 100644 --- a/darwin/Classes/UriAudioSource.m +++ b/darwin/Classes/UriAudioSource.m @@ -50,19 +50,36 @@ - (void)seek:(CMTime)position completionHandler:(void (^)(BOOL))completionHandler { if (!completionHandler || (_playerItem.status == AVPlayerItemStatusReadyToPlay)) { - [_playerItem seekToTime:position toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero completionHandler:completionHandler]; + CMTimeRange seekableRange = [_playerItem.seekableTimeRanges.lastObject CMTimeRangeValue]; + CMTime relativePosition = CMTimeAdd(position, seekableRange.start); + [_playerItem seekToTime:relativePosition toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero completionHandler:completionHandler]; } } - (CMTime)duration { - return _playerItem.duration; + NSValue *seekableRange = _playerItem.seekableTimeRanges.lastObject; + if (seekableRange) { + CMTimeRange seekableDuration = [seekableRange CMTimeRangeValue];; + return seekableDuration.duration; + } + else { + return _playerItem.duration; + } + return kCMTimeInvalid; } - (void)setDuration:(CMTime)duration { } - (CMTime)position { - return _playerItem.currentTime; + NSValue *seekableRange = _playerItem.seekableTimeRanges.lastObject; + if (seekableRange) { + CMTimeRange range = [seekableRange CMTimeRangeValue]; + return CMTimeSubtract(_playerItem.currentTime, range.start); + } else { + return _playerItem.currentTime; + } + } - (CMTime)bufferedPosition {