MPMoviePlayerController "Loading Movie..."

4.9k Views Asked by At

I'm trying to play a video file from the resource folder on iPhone with iOS 4.1. The MPMoviePlayerViewController displays the view but it only says "Loading Movie..." forever with the activity indicator rotating. Anyone knows the cause of this? I've tried with various video formats that are supposed to work on iPhone, same result every time.

The movie player responds to actions like showing and hiding the controls.

My code:

-(void) playVideoNamed:(NSString *)videoName
{
    // I get the path like this so the user can enter extension in the filename
    NSString *path = [NSString stringWithFormat:@"%@/%@", 
                      [[NSBundle mainBundle] resourcePath], videoName];
    NSLog(@"Path of video file: %@", path);

    RootViewController *rootController = [(DerpAppDelegate *)[[UIApplication sharedApplication] delegate] viewController];

    NSURL *url = [NSURL URLWithString:path];

    MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
    vc.moviePlayer.movieSourceType = MPMovieSourceTypeFile;

    [rootController presentMoviePlayerViewControllerAnimated:vc];
    [vc.moviePlayer prepareToPlay]; // Not sure about this... I've copied this code from various others that claims this works
    [vc.moviePlayer play];
} 
2

There are 2 best solutions below

2
On BEST ANSWER

Found out the issue:

NSURL *url = [NSURL URLWithString:path];

Must be replaced with:

NSURL *url = [NSURL fileURLWithPath:path];

Hard to spot that one...

0
On

I was performing the lines of code on a different thread, first dispatching to the main thread fixed it:

dispatch_async(dispatch_get_main_queue(), ^(void){
        MPMoviePlayerViewController* theMovie = [[MPMoviePlayerViewController alloc] initWithContentURL: videoURL];
        [self presentMoviePlayerViewControllerAnimated:theMovie];

});