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.movi​​ePlayer 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 错误的主要内容,如果未能解决你的问题,请参考以下文章

iOS流媒体

iOS中 流媒体播放和下载 韩俊强的博客

iOS音频播放

高稳定低延时高并发RTMP播放器流媒体音视频播放器EasyPlayer-RTMP-iOS器如何将核心代码打包成静态库

iOS 媒体播放控件通知

iOS swift流媒体应用程序不在后台模式下播放音乐