MPMoviePlayerController无法播放错误_itemFailedToPlayToEnd的本地文件

时间:2014-04-22 07:33:51

标签: ios mpmovieplayercontroller

我有一个与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"];

我尝试过不同的视频文件但结果是一样的。我做错了什么?

2 个答案:

答案 0 :(得分:9)

我有完全相同的问题,但在我的情况下它是多层次的。

  • 确保您使用-fileURLWithPath:而不是-URLWithString:来创建您的网址,如@ tagy22所述。似乎这样做对许多人来说都是如此,但是我已经使用了文件URL,所以缺少了一些东西。
  • 确保您的本地文件有扩展名(例如“.mp4”)。 MPMoviePlayerController不喜欢没有扩展名的文件。如果您需要存储没有扩展名的文件,那么解决方案是为实际文件创建临时符号链接,并将MPMoviePlayerController文件URL提供给该符号链接而不是“真实”文件。
  • 您的符号链接应该位于iOS Caches 目录(〜/ Library / Caches)中的某个位置,否则它可能无效。我试图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];