Frage

Ich schreibe eine Anwendung, die Videos viel mit dem MPMoviePlayerController auf dem iPad spielen wird. Das Problem ist die App fein gearbeitet und die Videos zu spielen, als ich aufgehört zu arbeiten etwa 15 Stunden, aber jetzt die Videos nicht spielen. Die MPMoviePlayerController wird das erste Bild aus dem Video zeigen, und in Vollbildansicht kann ich den Film fein schrubben durch, aber wenn ich es traf nur spielen Pausen sofort. Ich habe den Code unten, beim Debuggen ich bemerkt, dass, wenn ich spiele nennen es eine MPMoviePlayerPlaybackStateDidChangeNotification mit dem playbackState sein MPMoviePlaybackStatePlaying sendet und dann sofort sendet sie eine weitere MPMoviePlayerPlaybackStateDidChangeNotification Benachrichtigung mit playbackState MPMoviePlaybackStatePaused zu sein. Nicht sicher, ob das hilft, aber lassen Sie es mich wissen, wenn Sie etwas falsch in meinem Code sehen oder haben eine Idee, danke.

- (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];
        }
    }
}
War es hilfreich?

Lösung

Ich glaube, ich es herausgefunden habe ich den folgenden Code setzen, bevor jeder Anruf spielen

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

funktioniert nun, wenn jemand eine Eingabe hat lassen Sie mich wissen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top