23

So I'm trying to play a simple intro animation video file that I've dragged into my project in XCode and therefore should be able to play from my mainBundle, right?

With this code:

 NSURL *urlString = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"introvideo" ofType:@"mp4"]]; 
MPMoviePlayerController *player  = [[MPMoviePlayerController alloc] initWithContentURL:urlString];
[player play];

I get this error message: * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[NSURL initFileURLWithPath:]: nil string parameter'

Any help would be great!

PinkFloydRocks
  • 808
  • 3
  • 14
  • 29
  • First of all, my problem was that the introvideo.mp4 file wasn't present in the main bundle. Second of all, I needed to make my player object global - this made the video play just fine. Thanks for all the suggestions, guys! – PinkFloydRocks Nov 15 '12 at 16:52

7 Answers7

63

This means your code can't find your introvideo.mp4 file. Make sure you have successfully add that file to your bundle. You can check in your project's setting: Copy Bundle Resource. enter image description here

sunkehappy
  • 8,970
  • 5
  • 44
  • 65
4

Your code isn't correct. Please change accordingly to the following. Still copy your video into your bundle resources.

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                     pathForResource:@"MacBook Pro with Retina Display" ofType:@"m4v"]];
MPMoviePlayerViewController *playercontroller = [[MPMoviePlayerViewController alloc]
                                                 initWithContentURL:url];
[self presentMoviePlayerViewControllerAnimated:playercontroller];
playercontroller.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[playercontroller.moviePlayer play];
[playercontroller release];
playercontroller = nil;
NSLog(@"Video is Playing");
Matthias Robbers
  • 15,689
  • 6
  • 63
  • 73
4

Xcode 9

Here is an updated image.

Go to Build Phases > Copy Bundle Resources and see if your file is there. If it isn't you can add it by pressing the "+" button.

enter image description here

Community
  • 1
  • 1
Suragch
  • 484,302
  • 314
  • 1,365
  • 1,393
3

It seems that pathForResource:ofType: returns nil. Check that

  1. this file is indeed added to "copy resources" build phase;
  2. you didn't make mistake in the name of file - paths on device are case-sensitive.
Kreiri
  • 7,840
  • 5
  • 30
  • 36
3

You need To Check whether That Video Available in your Application's Resource Bundle.

As You mentioned you getting this error message: * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[NSURL initFileURLWithPath:]: nil string parameter.

It simply indicate that problem is in the resourcePath,means there is no such file exist there in Resource Bundle.that's Why that pathForResource returns nil path.

You need to put That Video File Again and Make Sure that file Exist in In Resource Bundle.

Then You should Go AHead with Code as Rehan Also posted.

  NSURL *url = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"video" ofType:@"mov" inDirectory:@""]];

  MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
  [[player view] setFrame:[self.view bounds]]; // Frame must match parent view
  [self.view addSubview:[player view]];
  [player play];
  [player release];

I hope It may worth full to you.

Thanks

Kamar Shad
  • 6,089
  • 1
  • 29
  • 56
2
NSURL *url = [NSURL URLWithString:[[NSBundle mainBundle] pathForResource:@"video" ofType:@"mov" inDirectory:@""]];

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];
[[player view] setFrame:[self.view bounds]]; // Frame must match parent view
[self.view addSubview:[player view]];
[player play];
[player release];
rehan
  • 141
  • 1
  • 2
  • 9
  • Ok, so the resource hadn't been copied to the bundle and the crash disappeared after I added the file manually. But using your code to play the file does not show the video. It shows the all black MPMoviePlayerController with no controller - any idea why? – PinkFloydRocks Nov 15 '12 at 16:39
  • May I know which version of iOS you r using? – rehan Nov 15 '12 at 16:53
1

I had put an entire "Sounds" directory into the project, and added it to the "Copy bundle resources" section. It was working fine, but then it started crashing.

The fix was to prepend the directory name to the filenames. Eg, this didn't work:

SKAction.playSoundFileNamed("crash.caf", waitForCompletion: false)

... but this did work:

SKAction.playSoundFileNamed("Sounds/crash.caf", waitForCompletion: false)
Ben Wheeler
  • 6,788
  • 2
  • 45
  • 55