开发者

My MoviePlayer doesn't respond to function

开发者 https://www.devze.com 2023-01-22 11:39 出处:网络
I am facing problem of memory leak and other MoviePlayer new initiation as my MoviePlayer doesn\'t respond to function, in which I am releasing that player on my done button.

I am facing problem of memory leak and other MoviePlayer new initiation as my MoviePlayer doesn't respond to function, in which I am releasing that player on my done button.

(void) playMovieAtURL
{

    MPMoviePlayerViewController *mpViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:videoURL]];
    mpViewController.view.backgroundColor = [UIColor blackColor];
    [self presentMoviePlayerViewControllerAnimated:mpViewController];

    [mpViewController.view setCenter:self.view.center];

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(myMovieFinishedCallback:) 
                                                 name:MPMoviePlayerPlaybackDidFinishNotification 
                                               object:mpViewController]; 

} 


    // When the movie is done,release the controller. (Doesn't come in it.)
-(void)myMovieFinishedCallback:(NSNotification*)aNotification 
{
    MPMoviePlayerController* theMovie=[aNotification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                 开发者_如何学JAVA                                   name:MPMoviePlayerPlaybackDidFinishNotification 
                                                  object:theMovie]; 

    // Release the movie instance created in playMovieAtURL
    [theMovie release]; 
}


Not sure it's your case, but this is what documentation says about MPMoviePlayerPlaybackDidFinishNotification:

This notification is not sent in cases where the movie player is displaying in fullscreen mode and the user taps the Done button. In that instance, the Done button causes movie playback to pause while the player transitions out of fullscreen mode. If you want to detect this scenario in your code, you should monitor other notifications such as MPMoviePlayerDidExitFullscreenNotification.

It seems that MPMoviePlayerPlaybackDidFinishNotification is called just when the movie stops by itself. If you are using the Done button, you should use MPMoviePlayerDidExitFullscreenNotification instead.


I tried to solve it by passing nil and now it is returning me callbacks but still the movie won't releases, I will try ur suggestion also. Anyways my new code

-(void) playMovieAtURL
{

MPMoviePlayerViewController *mpViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:videoURL]];
mpViewController.view.backgroundColor = [UIColor blackColor];
[self presentMoviePlayerViewControllerAnimated:mpViewController];

[mpViewController.view setCenter:self.view.center];

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

} 

// When the movie is done,release the controller. 
-(void)myMovieFinishedCallback:(NSNotification*)aNotification 
{
    MPMoviePlayerController* theMovie=[aNotification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
        name:MPMoviePlayerPlaybackDidFinishNotification 
        object:nil]; 

    // Release the movie instance created in playMovieAtURL
    [theMovie release]; 
}
0

精彩评论

暂无评论...
验证码 换一张
取 消