MPMoviePlayerViewController无法在iPhone或iPad上的iOS 4.3上运行

时间:2011-04-27 04:41:08

标签: iphone ipad ios4

当我尝试在iOS 4.3上通过MPMoviePlayerViewController播放电影时,我现在遇到了一个奇怪的问题。 它只是一个白色的屏幕,没有任何反应。我的代码在iOS 4.2上运行良好。所以我创造了一个新的 OpenGLES项目只是使用我的电影代码,但它也无法工作。所以有人可以提供一些提示吗? 提前致谢。

我的代码如下:

//-------------------------------------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;
}

1 个答案:

答案 0 :(得分:0)

// 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;

来自MPMoviePlayerController.h

所以这里是你的代码:

- (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];
}