Q.u.a.n.g L.
Q.u.a.n.g L.

Reputation: 1614

MPMoviePlayerController does not dismiss view when clicking done?

I use a MPMoviePlayerController to play a video from Internet.

player = [player initWithContentURL:[NSURL URLWithString:videoURL]];
player.view.frame = CGRectMake(0, 0, videoView.frame.size.width,  videoView.frame.size.height - 20);
[player setControlStyle:MPMovieControlStyleEmbedded];
player.scalingMode = MPMovieScalingModeAspectFit;
[player prepareToPlay];
player.shouldAutoplay = NO;
[videoView addSubview:player.view];

I notified that after I clicked the full screen button (2-arrows-button), I was navigated to the full size video screen. I couldn't restore down the screen by touching the Done button. I even used NSNotification but can't resolve the problem. Here is the Notification code:

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(movieEventFullscreenHandler:)
                                                 name:MPMoviePlayerWillEnterFullscreenNotification
                                               object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(movieEventFullscreenHandler:)
                                                 name:MPMoviePlayerDidEnterFullscreenNotification
                                               object:nil];
}

- (void)movieEventFullscreenHandler:(NSNotification*)notification {
    [player setFullscreen:NO animated:NO];
    [player setControlStyle:MPMovieControlStyleEmbedded];
}

How can I dismiss that video screen by touching the Done button? Thanks guys.

Upvotes: 0

Views: 397

Answers (2)

wormlxd
wormlxd

Reputation: 514

You can use the notification of MPMoviePlayerPlaybackDidFinishNotification to observe the done button.

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playObserver:)name:MPMoviePlayerPlaybackDidFinishNotification object:nil];

and then,make a judge of quitting.

- (void) playObserver:(NSNotification *)notification
{
MPMoviePlayerController* player = moviePlayerView.moviePlayer;
if (player == [notification object]) {

    if (_invalidVideoCount > MOVIE_TRY_TIMES) {
        [self dismissViewController];
    }

    _invalidVideoCount++;
    int reason = [[[notification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue];

    //Whether continuous playback
    if (![SINGLETON_CALL(SystemInfoManager) boolValueForKey:UserContinuousPlayEnableKey]) {
        [self playFinishWithForce:YES];
        return;
    }

    switch (reason) {
        case MPMovieFinishReasonUserExited:
            [self playFinishWithForce:YES];
            break;
        case MPMovieFinishReasonPlaybackError:
            [self playFinishWithForce:YES];
            break;
        case MPMovieFinishReasonPlaybackEnded:
            movieTryTimes = 0;
            [self playFinishWithForce:NO];
            break;
        default:
            break;
    }
}

}

and the last.

- (void)playFinishWithForce:(BOOL)force
{
  FileInfoItem *item = ARRAY_OBJECT_AT_INDEX(_playlist, _currentIndex);
  BOOL quit = force || !item;
  if (quit) {
      [self dismissViewController];
  } else {
      [self playMovieWithItem:item];
  }        
}

Also you can use the notification of MPMoviePlayerPlaybackStateDidChangeNotification to make any observe.something detail see MPMoviePlayerController.h or https://developer.apple.com/library/ios/documentation/MediaPlayer/Reference/MPMoviePlayerController_Class/Reference/Reference.html

Upvotes: 2

Q.u.a.n.g L.
Q.u.a.n.g L.

Reputation: 1614

I have found the problem. That's I laid [player stop] in the viewWillDisAppear so can't handle the notification. I fixed temporary by changing it to [player pause]. I appreciated any kind of your helps.

Upvotes: 0

Related Questions