MPMoviePlayerController模拟器崩溃问题

15

当我尝试播放任何视频时,我的MPMoviePlayerController在模拟器上崩溃。

这只在模拟器上发生,在设备上运行正常。

错误如下:

2012-10-25 16:46:24.033 TheFasterChef[8529:14303] [MPAVController] Autoplay: Disabling autoplay for pause
2012-10-25 16:46:24.035 TheFasterChef[8529:14303] [MPAVController] Autoplay: Disabling autoplay
2012-10-25 16:46:24.172 TheFasterChef[8529:14303] [MPAVController] Autoplay: Skipping autoplay, disabled (for current item: 1, on player: 0)
2012-10-25 16:46:24.190 TheFasterChef[8529:14303] [MPAVController] Autoplay: Enabling autoplay
2012-10-25 16:46:24.227 TheFasterChef[8529:14303] [MPAVController] Autoplay: Likely to keep up or full buffer: 0
2012-10-25 16:46:24.227 TheFasterChef[8529:14303] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up.
2012-10-25 16:46:24.232 TheFasterChef[8529:14303] [MPAVController] Autoplay: Enabling autoplay
2012-10-25 16:46:24.238 TheFasterChef[8529:14303] [MPCloudAssetDownloadController] Prioritization requested for media item ID: 0

我的代码是使用MPMoviePlayerController调用的基本方法:

在.h文件中:

@property (retain) MPMoviePlayerController *videoPlayer;

在 .m 文件中:

NSBundle *appBundle = [NSBundle mainBundle];
//NSString *contentURLString = [appBundle pathForResource:videoIdentifier ofType:@"mp4"];
NSString *contentURLString = [appBundle pathForResource:@"test" ofType:@".mp4"];
NSURL *contentURL = [NSURL fileURLWithPath:contentURLString];

self.videoPlayer = [[MPMoviePlayerController alloc] initWithContentURL:contentURL];
[self.videoPlayer prepareToPlay];
[self.videoPlayer.view setFrame: self.view.bounds];
[self.view addSubview:self.videoPlayer.view];
[self.videoPlayer prepareToPlay];
[self.videoPlayer play];

在另一个视图控制器中尝试了这段代码,出现相同的错误结果。

我在一个新项目中尝试了这段代码,运行正常。

还有什么其他原因会导致这个错误?

这里 的答案对我没用。


14
你的日志中没有“错误” - 一切都很好。你在Xcode调试器中启用了异常断点吗?如果是这样,当该断点被停用时,应用程序是否也会崩溃? - Till
哦,亲爱的,你说得对。我感觉自己像个傻瓜。在没有求助于Stack Overflow之前,我被这个问题困扰了很长时间,但是毋庸置疑,非常感谢Till。 - Alan
:D - 我很高兴能为你服务,祝你从现在开始好运连连... - Till
1
@Till 非常有用的提示。在模拟器中,Xcode和MPMoviePlayerController之间存在某种不良交互。关闭异常断点可以解决这个问题。你应该把你的评论变成一个真正的答案;我会投赞成票的! - matt
同意Matt,很乐意接受! - Alan
4个回答

57
解决方案:从断点选项卡中移除“所有异常”选项。
这个答案来自上面提到的Till的评论。我曾经遇到了这个问题,差点错过了答案,因为它是一个评论。 Till的答案帮助了我,所以我希望这可以像我一样帮助其他人。

exception


7
我会尽可能简洁地翻译以下内容,保证翻译准确无误且不改变原意:我希望能够增加一些细节来解释问题。iOS SDK在iOS5进入测试版时引入了这个问题。这与视频播放无关,而是与声音播放相关。在iOS模拟器SDK深处(据说部分使用C++构建),有用于处理特定情况的异常。这些异常与错误或崩溃无关,而是正常程序流程中的一部分。不幸的是,Xcode的调试组件将这些异常视为致命错误,因此在调试模式下运行应用程序时,模拟器上的应用程序执行会停止。 - Till
太棒了,你的回答解决了我的大麻烦。谢谢! - TotoroTotoro
5
移除“所有异常”断点可能不是你想要的。我建议设置这个断点,然后按住ctrl键单击它以进行编辑。然后打开异常下拉列表,选择“Objective-C”而非“所有”。 - Reinhard Männer
这就是为什么 Stack Overflow 如此棒! - elbuild

5

你已经给出了答案。这纯粹是模拟器的问题。通常情况下,与媒体相关的API在设备上工作得更好(有时候仅限于设备)。


@RawMean 是的,没错。它就是答案。我曾经遇到过完全一样的问题。模拟器中存在某种错误,导致在此处抛出异常,而在设备上则不会发生这种情况。 - matt
你对问题的判断是正确的,但你没有提供解决方案。 - RawMean
2
是的,我是。我的解决方案是他应该将模拟器异常视为虚假的,并且应该仅在设备上测试他的代码以避免它。 - matt
@RawMean 这确实是一个正确的答案,尽管它比较泛泛地描述了问题,但是这个回答中的所有内容都是真实和有帮助的。 - Till

2
更好的做法是禁用(而不是删除)“所有异常”,如果你需要进行其他操作。

0

看起来模拟器不支持 mp4 格式,只支持 mov 格式。我遇到了同样的问题,在将视频转换为 mov 格式后,模拟器可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接