无法从 mainBundle 播放 MP4 视频文件
Posted
技术标签:
【中文标题】无法从 mainBundle 播放 MP4 视频文件【英文标题】:Unable to play MP4 video file from mainBundle 【发布时间】:2012-11-04 06:47:15 【问题描述】:所以我正在尝试播放一个简单的介绍动画视频文件,我已将它拖到 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 文件不存在于主包中。其次,我需要使我的播放器对象全局化——这使得视频播放得很好。感谢所有的建议,伙计们! 【参考方案1】:这意味着您的代码找不到您的 introvideo.mp4 文件。确保您已成功将该文件添加到您的捆绑包中。您可以检查项目的设置:复制捆绑资源。
【讨论】:
感谢您的回答 - 我在哪里可以找到复制捆绑资源?是复选框吗?过去这对我来说从来都不是问题,所以现在突然出现有点奇怪。 谢谢 - 手动将视频添加到捆绑包中确实修复了崩溃! 太好了...非常感谢【参考方案2】:您的代码不正确。请根据以下内容进行相应更改。仍然将您的视频复制到您的捆绑资源中。
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");
【讨论】:
【参考方案3】:似乎 pathForResource:ofType: 返回 nil。检查一下
-
此文件确实已添加到“复制资源”构建阶段;
您没有弄错文件名 - 设备上的路径区分大小写。
【讨论】:
【参考方案4】:您需要检查该视频是否在您的应用程序的资源包中可用。
正如你所说
you getting this error message: * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[NSURL initFileURLWithPath:]: nil string parameter
.
它只是表明问题出在资源路径中,意味着资源包中不存在这样的文件。这就是pathForResource
返回nil
路径的原因。
您需要再次放入该视频文件并确保该文件存在于 In Resource Bundle 中。
那么你应该继续使用代码为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];
我希望它对你来说是值得的。
谢谢
【讨论】:
【参考方案5】:Xcode 9
这是更新的图像。
转到 Build Phases > Copy Bundle Resources 并查看您的文件是否存在。如果不是,您可以按“+”按钮添加它。
【讨论】:
【参考方案6】: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];
【讨论】:
好的,所以资源没有被复制到包中,并且在我手动添加文件后崩溃消失了。但是使用您的代码播放文件不会显示视频。它显示了没有控制器的全黑 MPMoviePlayerController - 知道为什么吗? 我可以知道您使用的是哪个版本的 ios 吗?【参考方案7】:我已将整个“声音”目录放入项目中,并将其添加到“复制捆绑资源”部分。它工作正常,但随后开始崩溃。
修复方法是在文件名前添加目录名。例如,这没有工作:
SKAction.playSoundFileNamed("crash.caf", waitForCompletion: false)
...但这确实工作:
SKAction.playSoundFileNamed("Sounds/crash.caf", waitForCompletion: false)
【讨论】:
以上是关于无法从 mainBundle 播放 MP4 视频文件的主要内容,如果未能解决你的问题,请参考以下文章