iOS 6 流媒体播放器 com.apple.coremedia.networkbuffering 错误
Posted
技术标签:
【中文标题】iOS 6 流媒体播放器 com.apple.coremedia.networkbuffering 错误【英文标题】:iOS 6 streaming player com.apple.coremedia.networkbuffering bug 【发布时间】:2012-09-07 00:57:45 【问题描述】:我无法让我的应用(音乐和视频流播放器)在 ios 6 模拟器上运行。
当我开始播放音乐或视频时,它崩溃并在此线程上显示错误:com.apple.coremedia.networkbuffering
这在日志信息中:
2012-09-13 17:45:09.260 app[32563:c07] [MPAVController] Autoplay: Disabling autoplay for pause
2012-09-13 17:45:09.260 app[32563:c07] [MPAVController] Autoplay: Disabling autoplay
2012-09-13 17:45:09.305 app[32563:c07] [MPAVController] Autoplay: Enabling autoplay
2012-09-13 17:45:09.307 app[32563:c07] handlePlaybackNowPlayingNotification
2012-09-13 17:45:09.308 app[32563:c07] [MPAVController] Autoplay: Likely to keep up or full buffer: 0
2012-09-13 17:45:09.308 app[32563:c07] [MPAVController] Autoplay: Skipping autoplay, not enough buffered to keep up.
2012-09-13 17:45:09.318 app[32563:c07] [MPAVController] Autoplay: Enabling autoplay
2012-09-13 17:45:09.320 app[32563:c07] [MPCloudAssetDownloadController] Prioritization requested for media item ID: 0
我将 MPMoviePlayerController 与基于 http 的流一起使用,它在 iOS 4 或 iOS 5 上运行良好
关于如何修复它的任何想法?
【问题讨论】:
我也有类似的问题。 如果您在 iOS 的核心中发现了 bug,*** 不太可能帮到您。 Apple Dev 论坛或报告错误更有可能为您提供修复。 只是一个注释。我在模拟器中遇到了同样的问题,但在设备上运行良好。 你们在 ios 6 上获得 MPMoviePlayerController 问题的解决方案了吗?如果是,请发布答案。 【参考方案1】:我还使用MPMoviePlayerViewController
在我的应用程序上显示实时视频,我得到了与上面相同的错误列表。我发现MPMoviePlayer
不支持较大的数据来显示视频,但如果您使用较小的视频数据,它可以正常工作,不会出现错误。其实这不是电影播放器准备播放和播放属性的问题。
如果您需要显示更大的数据,请在您的应用中使用 webview。
【讨论】:
【参考方案2】:我在使用下面的代码时遇到问题,播放器会全屏显示,但在那之后,它会关闭并且根本不播放视频。
NSURL *url = [NSURL URLWithString:@"http://streaming.disponivel.uol.com.br/video360p2/288148-1192657.mp4"];
_player = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
[_player.moviePlayer setMovieSourceType:MPMovieSourceTypeFile];
[_player.moviePlayer setControlStyle:MPMovieControlStyleDefault];
[_player.moviePlayer setFullscreen:YES animated:YES];
[self presentMoviePlayerViewControllerAnimated:_player];
[_player.moviePlayer prepareToPlay];
[_player.moviePlayer play];
【讨论】:
【参考方案3】:NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"sample" ofType:@"mp4"]];
MPMoviePlayerViewController *moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
moviePlayer.view.frame = self.view.frame;
moviePlayer.moviePlayer.shouldAutoplay=YES;
moviePlayer.moviePlayer.controlStyle = MPMovieControlStyleNone;
[moviePlayer.moviePlayer setFullscreen:YES animated:YES];
[self.view addSubview:moviePlayer.view];
[moviePlayer.moviePlayer play];
注意:iOS 6之前,无需调用[moviePlayer.moviePlayer play];将播放器视图添加到视图后,它将开始播放,但在 iOS 6 中,您需要显式调用播放函数
【讨论】:
【参考方案4】:您观察到的不是崩溃而是异常。您很可能启用了异常断点,这导致您假设应用程序崩溃。
该异常实际上已由 SDK 正确处理(捕获)并且不会导致应用崩溃。
请注意,这只发生在模拟器上,而不是设备上。
该问题与此问题what-does-this-gdb-output-mean 密切相关。不同之处在于您不会再收到这些错误消息,但仍然会抛出异常(但也会咳嗽)。
【讨论】:
我有一个更好的解决方案,可以让您保留所有异常!右键单击并编辑它,然后在 Exception 下选择 Objective-C。如果您正在尝试实际调试 C++,那么这不是很好,但是如果您是一个普通的 iOS 应用程序,那么您只需要 Objective-C!电影播放器抛出了一个 C++ 异常,所以这个烦恼消失了!!【参考方案5】:首先我做了类似下面的事情
[self.player.moviePlayer prepareToPlay];
[self.player.moviePlayer play];
self.player.moviePlayer.shouldAutoplay = YES;
当我删除以下行时
self.player.moviePlayer.shouldAutoplay = YES;
问题解决了。
【讨论】:
【参考方案6】:我在使用 ios6 的 MPMoviePlayerController 时遇到了同样的问题。所以我将我的代码更改为流动,现在它工作正常..
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"sample" ofType:@"mp4"]];
MPMoviePlayerViewController *moviePlayer = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
moviePlayer.view.frame = self.view.frame;
moviePlayer.moviePlayer.shouldAutoplay=YES;
moviePlayer.moviePlayer.controlStyle = MPMovieControlStyleNone;
[moviePlayer.moviePlayer setFullscreen:YES animated:YES];
[self.view addSubview:moviePlayer.view];
[moviePlayer.moviePlayer play];
【讨论】:
就我而言,删除以下内容就足够了:moviePlayer.view.frame = self.view.frame;【参考方案7】:我还没有解决这个问题,但在我的特殊情况下,MPMoviePlayerController
将进入全屏,或者控制器可能存在延迟时,这似乎与此有关。
我不是从网络流式传输内容,内容在设备上,所以最初内容在视图中显示良好。
我的猜测是他们在MPMoviePlayerController
中实现了一项新功能,以防止播放期间出现“死区时间”。我见过一些应用程序会在电影数据离线或您碰巧走出 wifi 范围时挂起”
我尝试解决此问题的方法是查看传递给 -
的通知消息(void)moviePlayBackDidFinish: (NSNotification*)notification
这是通过查询用户信息字典来完成的
NSDictionary *userInfo = [notification userInfo];
在这种类型的故障情况下,MPMoviePlayerPlaybackDidFinishReasonUserInfoKey
的值为 0。
这是一个起点。我的想法是在这个独特的失败点上恢复电影。
我会及时通知你结果。
【讨论】:
0 等于 MPMovieFinishReasonPlaybackEnded。您可能不想在电影结束后重新开始。【参考方案8】:我已经使用 xcode 4.5+SDK6.0 与 xcode 4.4.1+SDK5.1 组合验证了 iOS 6 版本的 MPMoviePlayerController 存在问题。不过我只用过 iPad。
这是我的观察:- - 我从来没有使用我使用 MPMoviePlayerController 的代码在 ios 6.0 上看到视频播放。 - 使用 xcode 4.4.1 和 SDK 5.1,我已经看到代码在 ios 版本 5.1、5.0 和 4.3 上工作。 - 使用 xcode 4.5 和 SDK 6.0,播放器在模拟器中总是失败,但在 ios 5.1 设备上的大多数安装工作。我一直在 ios 5.1 设备上重新安装应用程序并试用播放器。它只失败了一次。
以下是我在播放器失败时的观察: - 有时当播放器失败时,我看到了你上面提到的日志。其他时候,我什至没有看到日志。 - 我在获得 MPMoviePlayerPlaybackDidFinishNotification 通知的函数中放置了一个断点。然后我在播放器中寻找errorLog,但没有。我查找了 MPMoviePlayerPlaybackDidFinishReasonUserInfoKey,它是 0 (MPMovieFinishReasonPlaybackEnded)。所以 MPMoviePlayerController 不知道出了什么问题!
结论:ios6 和/或 SDK 6 存在错误。
【讨论】:
【参考方案9】:我也遇到了同样的问题……
在实例化播放器后尝试这样做:
[player prepareToPlay];
它应该在您调用 play 时自动调用,但显然在 iOS 6 上,如果您不明确调用它会出现问题。
就我而言,它解决了问题。
【讨论】:
也为我解决了这个问题。之前我没有收到moviePlayerLoadStateChanged
通知,现在我收到了。
是的,这似乎解决了问题,我添加了那行,直到现在不再出现类似的错误。谢谢
我添加了这一行,但仍然遇到类似于 OP 问题中的错误。有什么想法吗?以上是关于iOS 6 流媒体播放器 com.apple.coremedia.networkbuffering 错误的主要内容,如果未能解决你的问题,请参考以下文章