22

所以我正在尝试播放一个简单的介绍动画视频文件,我已经将它拖到 XCode 中的项目中,因此应该能够从我的 mainBundle 中播放,对吧?

使用此代码:

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

我收到此错误消息: * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -[NSURL initFileURLWithPath:]: nil string parameter”

任何帮助都会很棒!

4

7 回答 7

63

这意味着您的代码找不到您的 introvideo.mp4 文件。确保您已成功将该文件添加到您的捆绑包中。您可以检查项目的设置:复制捆绑资源。 在此处输入图像描述

于 2012-11-15T16:06:48.967 回答
4

你的代码不正确。请根据以下内容进行相应更改。仍然将您的视频复制到您的捆绑资源中。

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");
于 2013-03-28T21:40:31.137 回答
3

似乎 pathForResource:ofType: 返回 nil。检查

  1. 该文件确实已添加到“复制资源”构建阶段;
  2. 你没有弄错文件名 - 设备上的路径区分大小写。
于 2012-11-15T16:09:49.707 回答
3

您需要检查该视频是否在您的应用程序的资源包中可用。

正如你提到 you getting this error message: * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[NSURL initFileURLWithPath:]: nil string parameter的。

它只是表明问题出在资源路径中,意味着资源包中不存在这样的文件。这就是pathForResource返回nil路径的原因。

您需要再次放置该视频文件并确保该文件存在于资源包中。

然后你应该继续使用Rehan同样发布的代码。

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

我希望它对你来说是值得的。

谢谢

于 2012-11-15T16:22:40.537 回答
3

Xcode 9

这是更新的图像。

转到Build Phases > Copy Bundle Resources并查看您的文件是否存在。如果不是,您可以通过按“+”按钮添加它。

在此处输入图像描述

于 2017-11-21T04:33:08.947 回答
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];
于 2012-11-15T16:08:31.493 回答
1

我已将整个“声音”目录放入项目中,并将其添加到“复制捆绑资源”部分。它工作正常,但随后开始崩溃。

修复方法是将目录名称添加到文件名之前。例如,这不起作用

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

...但这确实有效:

SKAction.playSoundFileNamed("Sounds/crash.caf", waitForCompletion: false)
于 2015-06-01T20:44:26.603 回答