gpt4 book ai didi

ios - MPMoviePlayerController 无法播放本地文件,错误为 _itemFailedToPlayToEnd

转载 作者:可可西里 更新时间:2023-11-01 06:18:26 24 4
gpt4 key购买 nike

我有一个本地 iPhone 兼容的 MP4 视频(我已经为 iPhone 转换了视频,并且测试了将视频上传到 Web 服务器并将其 URL 输入到移动 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)或打开电影播放器​​ View Controller 并永远保持“正在加载” ……”。当我在设备 (iOS 7.1) 上运行时,行为是相同的,但我在控制台上收到此错误:

_itemFailedToPlayToEnd: {
kind = 1;
new = 2;
old = 0;
}

当我尝试加载完全相同的视频文件以直接从网络流式传输时,它完美地工作:

//playerController.contentURL = fileURL;
playerController.contentURL = [NSURL URLWithString:@"http://mywebsite.com/Welcome.mp4"];

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

最佳答案

我遇到了完全相同的问题,但在我的案例中是多层次的。

  • 确保您使用 -fileURLWithPath: 而不是 -URLWithString: 来创建您的 URL,如 @tagy22 所述。看起来这对很多人来说都是可行的,但是我已经在使用文件 URL,所以缺少了一些东西。
  • 确保您的本地文件具有扩展名(例如“.mp4”)。 MPMoviePlayerController 不喜欢没有扩展名的文件。如果您需要存储没有扩展名的文件,一个解决方案是创建一个指向实际文件的临时符号链接(symbolic link),并为 MPMoviePlayerController 提供指向该符号链接(symbolic link)的文件 URL,而不是“真实”文件。
  • 您的符号链接(symbolic link)应该位于 iOS Caches 目录 (~/Library/Caches) 中的某处,否则它可能无法工作。我试图让 MPMoviePlayerController 播放临时目录中的符号链接(symbolic link),它在模拟器中有效,但在我的设备上

创建指向实际视频文件的符号链接(symbolic link)

NSError *error;
NSFileManager *manager = [NSFileManager defaultManager];
[manager createSymbolicLinkAtURL:linkPath withDestinationURL:actualFilePath error:&error];

关于ios - MPMoviePlayerController 无法播放本地文件,错误为 _itemFailedToPlayToEnd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23213339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com