Bläddra i källkod

playback: some demuxers don't respect :start-time, so try to re-set the position after playback started if needed

Felix Paul Kühne 11 år sedan
förälder
incheckning
9d154a92d8
1 ändrade filer med 13 tillägg och 4 borttagningar
  1. 13 4
      Sources/VLCMovieViewController.m

+ 13 - 4
Sources/VLCMovieViewController.m

@@ -444,9 +444,14 @@
 - (void)_playNewMedia
 {
     NSNumber *playbackPositionInTime = @(0);
-    if (self.mediaItem.lastPosition && [self.mediaItem.lastPosition floatValue] < .95) {
-        if (self.mediaItem.duration.intValue != 0)
-            playbackPositionInTime = @(self.mediaItem.lastPosition.floatValue * (self.mediaItem.duration.intValue / 1000.));
+    CGFloat lastPosition = .0;
+    NSInteger duration = self.mediaItem.duration.intValue;
+
+    if (self.mediaItem.lastPosition)
+        lastPosition = self.mediaItem.lastPosition.floatValue;
+    if (lastPosition < .95) {
+        if (duration != 0)
+            playbackPositionInTime = @(lastPosition * (duration / 1000.));
     }
     if (playbackPositionInTime.intValue > 0) {
         [_mediaPlayer.media addOptions:@{@"start-time": playbackPositionInTime}];
@@ -471,7 +476,11 @@
     [self performSelectorInBackground:@selector(_updateExportedPlaybackInformation) withObject:nil];
 
     _currentAspectRatioMask = 0;
-    _mediaPlayer.videoAspectRatio =  NULL;
+    _mediaPlayer.videoAspectRatio = NULL;
+
+    /* some demuxers don't respect :start-time, so re-try here */
+    if (lastPosition < .95 && _mediaPlayer.position < lastPosition)
+        _mediaPlayer.position = lastPosition;
 
     [self _resetIdleTimer];
     _playerIsSetup = YES;