tags:

views:

1430

answers:

5

When using the MPMoviePlayerController, the play button is surrounded with "Next" and "Previous" buttons.

How do I get notifications when they are clicked? is there a way to feed MPMoviePlayerController with a list (array) of content?

Thanks.

A: 

I don't think you have much control over the MPMoviePlayerController. It is a standard component that can basically start and stop playing a movie and nothing else.

St3fan
I guess you are right. And yet, why these controls are there anyway? On the youTube application - they do move to the next/prev video.
yn2
On the iPhone they go to the start or end of the current movie. They are not next/prev buttons.
St3fan
That is incorrect. When you implement am MPMoviePlayerController - they just exit the player in the same way "stop" would do.
yn2
+1  A: 

No notifications are generated when the user presses the next/previous buttons (you should file a bug about that), so the only way to solve this without any unapproved view-crawling is to implement your own video overlay view:

MPMoviePlayerController* moviePlayer = [[MPMoviePlayerController alloc]
    initWithContentURL:someUrl];
moviePlayer.movieControlMode = MPMovieControlModeHidden;
[moviePlayer play];

NSArray* windows = [[UIApplication sharedApplication] windows];
if ([windows count] > 1) {
  UIWindow *moviePlayerWindow = [[UIApplication sharedApplication] keyWindow];
  [moviePlayerWindow addSubview:yourCustomOverlayView];
}

Not ideal, but the standard controls are quite easy to re-implement.

Nathan de Vries
This code is not removing the existing overlay layer. did you mean to add a clear button on them?
yn2
@yn2: I've updated my answer so that the default overlay UI is hidden.
Nathan de Vries
+2  A: 

Nathan is correct about needing to implement your own UI for the player if you want button notifications. You can get notifications from the player about playback state though.

from the AddMusic example, where self is the controller or model containing the instance of MPMusicPlayerController:

- (void) registerForMediaPlayerNotifications {

    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];

    [notificationCenter addObserver: self
            selector: @selector (handle_NowPlayingItemChanged:)
             name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification
           object: musicPlayer];

    [notificationCenter addObserver: self
            selector: @selector (handle_PlaybackStateChanged:)
             name: MPMusicPlayerControllerPlaybackStateDidChangeNotification
           object: musicPlayer];

    /*
     // This sample doesn't use libray change notifications; this code is here to show how
     //  it's done if you need it.
     [notificationCenter addObserver: self
     selector: @selector (handle_iPodLibraryChanged:)
     name: MPMediaLibraryDidChangeNotification
     object: musicPlayer];

     [[MPMediaLibrary defaultMediaLibrary] beginGeneratingLibraryChangeNotifications];
     */

    [musicPlayer beginGeneratingPlaybackNotifications];
}
A: 

Thanks Nathan, It solved my problem by adding custom buttons but I need the timeline controller button back. So what should I have to do for that???

Raj