17

我无法让我的应用程序(音乐和视频流播放器)在 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 上运行良好

关于如何解决它的任何想法?

4

9 回答 9

15

我遇到了完全相同的问题...

在实例化播放器后尝试这样做:

[player prepareToPlay];

它应该在您调用 play 时自动调用,但显然在 iOS 6 上,如果您不明确调用它,就会出现问题。

就我而言,它解决了问题。

于 2012-09-17T09:52:00.123 回答
13

您所观察到的不是崩溃,而是异常。您很可能启用了异常断点,这导致您假设应用程序崩溃。

该异常实际上由 SDK 正确处理(捕获)并且不会导致应用程序崩溃。

请注意,这只发生在模拟器上,而不是设备上。

该问题与此问题密切相关what-does-this-gdb-output-mean。不同之处在于您不会再收到这些错误消息,但仍然会抛出异常(但也会咳嗽)。

于 2012-12-20T13:43:46.577 回答
5

我已经使用 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 有一个错误。

于 2012-09-21T22:43:39.667 回答
2
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 中,您需要显式调用播放函数

于 2012-12-21T09:16:23.363 回答
1

我对 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];
于 2012-09-24T09:57:45.987 回答
0

我还没有解决这个问题,但在我的特殊情况下,它似乎与何时MPMoviePlayerController进入全屏或控制器存在潜在延迟有关。

我不是从网络流式传输内容,内容在设备上,所以最初内容在视图中显示良好。

我的猜测是他们已经实现了一项新功能MPMoviePlayerController,以防止播放期间出现“死区时间”。我见过一些应用程序会在电影数据离线或您碰巧走出 wifi 范围时挂起”

我解决此问题的尝试是查看传递给的通知消息 -

(void)moviePlayBackDidFinish: (NSNotification*)notification

这是通过查询用户信息字典来完成的

NSDictionary *userInfo = [notification userInfo];

MPMoviePlayerPlaybackDidFinishReasonUserInfoKey在此类故障的情况下,的值为0。

这是一个起点。我的想法是在这个独特的失败点上恢复这部电影。

我会及时通知你结果。

于 2012-09-23T10:50:24.307 回答
0

首先我做了类似下面的事情

[self.player.moviePlayer prepareToPlay];
[self.player.moviePlayer play];
self.player.moviePlayer.shouldAutoplay = YES;

当我删除以下行时

self.player.moviePlayer.shouldAutoplay = YES;

问题解决了。

于 2012-12-20T13:17:35.050 回答
0

我对下面的代码有问题,播放器全屏显示,但在那之后,它关闭并且根本不播放视频。

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];
于 2013-02-05T18:10:44.363 回答
0

我还使用MPMoviePlayerViewController来在我的应用程序上显示实时视频,并且我得到了与上面相同的错误列表。我发现它MPMoviePlayer不支持较大的数据来显示视频,但是如果您使用较小的视频数据,它可以正常工作,不会出错。其实这不是准备播放和播放电影播放器​​属性的问题。

如果您需要显示更大的数据,请在您的应用程序上使用 webview。

于 2013-03-25T13:02:11.110 回答