1

J'écris une application qui va jouer beaucoup de vidéos en utilisant le MPMoviePlayerController sur l'iPad. Le problème est que l'application fonctionnait correctement et que je lisais les vidéos lorsque j'ai cessé de travailler il y a environ 15 heures, mais que les vidéos ne sont plus diffusées. Le MPMoviePlayerController montrera la première image de la vidéo, et en mode plein écran, je pourrai faire défiler le film correctement, mais quand j'appuierai, il s'arrêtera tout de suite. J'ai le code ci-dessous, lors du débogage j'ai remarqué que quand j'appelle play il envoie un MPMoviePlayerPlaybackStateDidChangeNotification avec le playbackState étant MPMoviePlaybackStatePlaying et puis tout de suite il envoie une autre notification MPMoviePlayerPlaybackStateDidChangeNotification avec playbackState étant MPMoviePlaybackStatePaused. Je ne sais pas si cela aide, mais s'il vous plaît laissez-moi savoir si vous voyez quelque chose de mal dans mon code ou avoir une idée, merci.MPMoviePlayerController erreur de lecture sur iPad

- (void)handleNotification:(NSNotification *)notification { 
    if ([[notification name] isEqualToString:MPMoviePlayerPlaybackStateDidChangeNotification]) { 
     if (_videoPlayer.playbackState == MPMoviePlaybackStatePlaying) { 
      _playButtonLarge.hidden = YES; 
      _scrubber.maximumValue = _videoPlayer.duration; 
      [_playPauseButton setBackgroundImage:[UIImage imageNamed:@"video_controls_pause.png"] forState:UIControlStateNormal]; 
      if (_updateScrubberTimer == nil) { 
       _updateScrubberTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(updateScrubber) userInfo:nil repeats:YES]; 
      } 
     } else if (_videoPlayer.playbackState == MPMoviePlaybackStatePaused || _videoPlayer.playbackState == MPMoviePlaybackStateStopped) { 
      [_playPauseButton setBackgroundImage:[UIImage imageNamed:@"video_controls_play.png"] forState:UIControlStateNormal]; 
      _playButtonLarge.hidden = NO; 
      if (_updateScrubberTimer != nil) { 
       [_updateScrubberTimer invalidate]; 
       _updateScrubberTimer = nil; 
      } 
      if (_videoPlayer.playbackState == MPMoviePlaybackStateStopped) { 
       _scrubber.value = 0.0f; 
       _timePlayedLabel.text = @"0:00"; 
       _timeRemainingLabel.text = @"-0:00"; 
       _videoPlayerBG.hidden = NO; 
      } 
     } 
    } else if ([[notification name] isEqualToString:MPMoviePlayerPlaybackDidFinishNotification]) { 
     NSNumber *reason = [[notification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey]; 
     if ([reason intValue] == MPMovieFinishReasonPlaybackEnded) { 
      _videoPlayerBG.hidden = NO; 
     } 
     _scrubber.value = _scrubber.maximumValue; 
    } 
} 

- (void)playPause { 
    if ([_videos count] > 0) { 
     if (_videoPlayer.playbackState == MPMoviePlaybackStatePaused || _videoPlayer.playbackState == MPMoviePlaybackStateStopped) { 
      _playButtonLarge.hidden = YES; 
      _videoPlayerBG.hidden = YES; 
      if ([_videoPlayer contentURL] == nil) { 
       Video *video = [_videos objectAtIndex:0]; 
       [_videoPlayer setContentURL:video.videoURL]; 
      } 
      if (![_videoPlayer isPreparedToPlay]) { 
       [_videoPlayer prepareToPlay]; 
      } 
      [_videoPlayer play]; 
     } else if (_videoPlayer.playbackState == MPMoviePlaybackStatePlaying) { 
      _playButtonLarge.hidden = NO; 
      [_videoPlayer pause]; 
     } 
    } 
} 

Répondre

1

Je pense que j'ai tout compris, je mets le code suivant avant chaque appel à jouer

if (![_videoPlayer isPreparedToPlay]) { [_videoPlayer prepareToPlay]; }

travaille maintenant, si quelqu'un d'autre une entrée me faire savoir

Questions connexes