繁体   English   中英

无法播放mainBundle的MP4视频文件

[英]Unable to play MP4 video file from mainBundle

所以我正在尝试播放一个简单的介绍动画视频文件,我已将其拖入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'

任何帮助都会很棒!

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

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

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");

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

  1. 这个文件确实被添加到“复制资源”构建阶段;
  2. 你没有在文件名中出错 - 设备上的路径区分大小写。

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

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

它只是表明问题在resourcePath中,意味着Resource Bundle中没有这样的文件。这就是为什么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];

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

谢谢

Xcode 9

这是一张更新的图片。

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

在此输入图像描述

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

我已将整个“Sounds”目录放入项目中,并将其添加到“Copy bundle resources”部分。 它工作正常,但随后开始崩溃。

修复是将目录名称添加到文件名。 例如,这并不工作:

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

......但确实有效:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM