Ошибка воспроизведения MPMoviePlayerController на iPad - PullRequest
1 голос
/ 29 июня 2010

Я пишу приложение, которое будет много воспроизводить видео с помощью MPMoviePlayerController на iPad.Проблема в том, что приложение работало нормально и воспроизводило видео, когда я перестал работать около 15 часов назад, но теперь видео не воспроизводится.MPMoviePlayerController покажет первый кадр из видео, и в полноэкранном режиме я могу нормально пролистать фильм, но когда я нажимаю «Воспроизвести», он просто сразу останавливается.У меня есть код ниже, при отладке я заметил, что, когда я вызываю play, он отправляет MPMoviePlayerPlaybackStateDidChangeNotification, где для PlayState используется MPMoviePlaybackStatePlaying, а затем сразу же отправляется еще одно уведомление MPMoviePlayerPlaybackStateDidChangeNotification, в котором MPSovatebackStatebackStatePtateStatePtateStatePtateНе уверен, поможет ли это, но, пожалуйста, дайте мне знать, если вы видите что-то не так в моем коде или у вас есть идеи, спасибо.

- (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];
        }
    }
}

1 Ответ

1 голос
/ 29 июня 2010

Мне кажется, я понял это, я ставлю следующий код перед каждым вызовом для игры

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

работает сейчас, если у кого-то еще есть вход, дайте мне знать

...