我有一个与iPhone兼容的本地MP4视频(我已经将视频转换为iPhone,我已经测试过将视频上传到网络服务器并将其网址输入到移动版Safari中,它可以完美播放)我想要的使用MPMoviePlayerController
进行游戏。
这是我的代码:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Welcome" ofType:@"mp4"];
NSURL *fileURL = [NSURL URLWithString:filePath];
playerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];
playerController.movieSourceType = MPMovieSourceTypeFile;
playerController.backgroundView.backgroundColor = [UIColor whiteColor];
playerController.view.translatesAutoresizingMaskIntoConstraints = YES;
playerController.scalingMode = MPMovieScalingModeAspectFill;
//[playerController.view setFrame:moviePlayerContainerView.frame];
[playerController.view setFrame:CGRectMake(0, 0, 200, 200)];
[moviePlayerContainerView addSubview:playerController.view];
playerController.contentURL = fileURL;
playerController.fullscreen = YES;
[playerController prepareToPlay];
[playerController play];
fileURL
指向有效文件:
(lldb) po fileURL
/var/mobile/Applications/73C97CC9-731E-4446-A53C-2A8CA30A2393/Tanisalim.app/Welcome.mp4
(lldb) p (BOOL)[[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:NO]
(BOOL) $0 = YES
当我尝试在模拟器(6.1和7.1)上运行时,它只会在帧中显示黑屏(如果全屏为NO
)或打开电影播放器视图控制器并永远保持“正在加载...... ”。当我在设备(iOS 7.1)上运行时,行为是相同的,但我在控制台上收到此错误:
_itemFailedToPlayToEnd: {
kind = 1;
new = 2;
old = 0;
}
当我尝试加载完全相同的视频文件直接从网络流式传输时,它可以完美运行:
//playerController.contentURL = fileURL;
playerController.contentURL = [NSURL URLWithString:@"http://mywebsite.com/Welcome.mp4"];
我尝试过不同的视频文件但结果是一样的。我做错了什么?
答案 0 :(得分:9)
我有完全相同的问题,但在我的情况下它是多层次的。
-fileURLWithPath:
而不是-URLWithString:
来创建您的网址,如@ tagy22所述。似乎这样做对许多人来说都是如此,但是我已经使用了文件URL,所以缺少了一些东西。MPMoviePlayerController
不喜欢没有扩展名的文件。如果您需要存储没有扩展名的文件,那么解决方案是为实际文件创建临时符号链接,并将MPMoviePlayerController
文件URL提供给该符号链接而不是“真实”文件。MPMoviePlayerController
播放临时目录中的符号链接,它在模拟器中工作但在我的设备上不。NSError *error;
NSFileManager *manager = [NSFileManager defaultManager];
[manager createSymbolicLinkAtURL:linkPath withDestinationURL:actualFilePath error:&error];
答案 1 :(得分:8)
我遇到了类似的问题,流文件工作正常,但无法播放本地文件。以下更改为我解决了这个问题:
NSURL *fileURL = [NSURL URLWithString:filePath];
为:
NSURL *fileURL = [NSURL fileURLWithPath:filePath];