views:

1298

answers:

4

I need to have the possibility to play more than one video in an app.

Unfortunately, the second time I press play, video appears blinking.

I use only this code for playing vide

NSURL *url = [[[NSURL alloc]initFileURLWithPath:[[NSBundle mainBundle]pathForResource:@"Movie" ofType:@"m4v"]] autorelease];

MPMoviePlayerController *mp = [[MPMoviePlayerController alloc]initWithContentURL:url];

mp.movieControlMode = MPMovieControlModeDefault;

[mp play];

moviePlayer = mp;

[mp release];

Can anyone tell me where can be the problem? Thanks in advance!

UPDATE 1: it seams that the apple MoviePlayer example has the same problem.

+1  A: 

I had this problem and solved it by using the notification system to execute a callback after the MPMoviePlayerController finishes playing, and releasing the player object there.

Add a notification before you play the movie:

NSURL *url = [[[NSURL alloc]initFileURLWithPath:[[NSBundle mainBundle]pathForResource:@"Movie" ofType:@"m4v"]] autorelease];

MPMoviePlayerController *mp = [[MPMoviePlayerController alloc]initWithContentURL:url];

mp.movieControlMode = MPMovieControlModeDefault;

//***Add this line***
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMovieFinished:) name:MPMoviePlayerPlaybackDidFinishNotification object:mp];

[mp play];

Then add the callback method,

-(void)myMovieFinished:(NSNotification*)aNotification
{
    MPMoviePlayerController *moviePlayer = [aNotification object];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerDidFinishNotification object:moviePlayer];
    [moviePlayer release];
}
Ken Pespisa
Still having the same problem.
mxg
Are you sure the original movieplayercontroller isn't being retained somewhere?
Ken Pespisa
+3  A: 

you can also do it by setting the initial playback time to -1.0 before calling the play function

mp.initialPlaybackTime = -1.0;

Put this code before ur play method is called.

Nareshkumar
A: 

It seams that the only solution is... to make the app for 3.1

mxg
A: 

I also find run on the OS 3.1 or later version of simulator can be played well.It won't appears blinking.But when I add

initialPlaybackTime = -1.0

it will also play well on OS 3.0.