开发者

MPMoviePlayerViewController can not work on iOS 4.3 on iPhone or iPad

开发者 https://www.devze.com 2023-03-01 10:48 出处:网络
I now have a strange problem when I try to play movie through MPMoviePlayerViewController on iOS 4.3.

I now have a strange problem when I try to play movie through MPMoviePlayerViewController on iOS 4.3. It appears just a white screen and nothing happens. My code works well on iOS 4.2. So I created a new OpenGLES project and just use my movie code, but it can not work either. So can anybody give some tips? Thanks in advance.

My code is below:

//-------------------------------------TestViewController.h---------------------------------------

#import <MediaPlayer/MediaPlayer.h>

@interface TestViewController : UIViewController
{
    bool _isMovieEnded;
    MPMoviePlayerViewController* _theMovie;
}
- (void)playMovie:(NSString*)filename;
- (void)movieFinishedCallback:(NSNotification*)aNotification;
- (bool)isMovieEnd;

//-------------------------------------TestViewController.m---------------------------------------

- (void)playMovie:(NSString*)filename
{
     NSURL* theURL = [NSURL fileURLWithPath:filename];  
    _theMovie = [[MPMoviePlayerViewController alloc] init];// initWithContentURL:theURL开发者_如何转开发];
    [_theMovie.moviePlayer setContentURL:theURL];   
    _theMovie.moviePlayer.scalingMode = MPMovieScalingModeAspectFill;
    [_theMovie.moviePlayer setControlStyle:MPMovieControlStyleNone];
    [_theMovie.moviePlayer setFullscreen:YES];

    // register notification
    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(movieFinishedCallback:)
                                         name:MPMoviePlayerPlaybackDidFinishNotification
                                         object:_theMovie];

    [[UIApplication sharedApplication] beginIgnoringInteractionEvents];
    [_theMovie.moviePlayer play];
    [self.view addSubview:_theMovie.view];
}

- (void)movieFinishedCallback:(NSNotification*)aNotification
{
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                             name:MPMoviePlayerPlaybackDidFinishNotification
                                             object:_theMovie];

    // release movie
    [_theMovie.view removeFromSuperview];
    [_theMovie release];

    _isMovieEnded = true;
    [self startAnimation];

    [[UIApplication sharedApplication] endIgnoringInteractionEvents];
}

- (bool)isMovieEnd
{
    return _isMovieEnded;
}

//-------------------------------------TestAppDelegate.m---------------------------------------

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    [self.window addSubview:self.viewController.view];

    NSString* movieFile = [[NSBundle mainBundle] pathForResource:@"logo" ofType:@"mp4"];
    [viewController playMovie:movieFile];
    [viewController stopAnimation];

    return YES;
}


// Determines if the movie is presented in the entire screen (obscuring all other application content). Default is NO.
// Setting this property to YES before the movie player's view is visible will have no effect.
@property(nonatomic, getter=isFullscreen) BOOL fullscreen;
- (void)setFullscreen:(BOOL)fullscreen animated:(BOOL)animated;

From MPMoviePlayerController.h

so here you are the code:

- (void)playVideoFromUrl:(NSString*)url {
    MPMoviePlayerViewController *moviePlayer = [[[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:url]] autorelease];

    [((UIWindow*)[[UIApplication sharedApplication].windows objectAtIndex:0]).rootViewController presentMoviePlayerViewControllerAnimated:moviePlayer];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:)
                                              name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
    [moviePlayer.moviePlayer setFullscreen:YES animated:YES];
    [moviePlayer.moviePlayer setControlStyle:MPMovieControlStyleFullscreen];
}

- (void)moviePlaybackComplete:(NSNotification *)notification {
    MPMoviePlayerViewController *moviePlayer = [notification object];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];
    [((UIWindow*)[[UIApplication sharedApplication].windows objectAtIndex:0]).rootViewController dismissMoviePlayerViewControllerAnimated];
}
0

精彩评论

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