我正在使用MPMoviePlayerController(MPMPC)
将音频流式传输到应用程序中,而且工作得非常好。只有一个例外,在低网络连接期间,应用程序无响应。
现在我甚至尝试过使用AVPlayer
,但体验或多或少相同。由于某种原因,我无法在互联网上找到任何与此相关的问题。所以我不确定这是不是我的结论,还是MPMoviePlayerController
在低连接期间的行为。
我甚至尝试在将URL
提供给MPMPC
之后记录所调用的任何函数,但没有调用任何函数。
我使用了以下三个通知来获取MPMPC的事件
MPMoviePlayerLoadStateDidChangeNotification
MPMoviePlayerPlaybackDidFinishNotification
MPMoviePlayerPlaybackStateDidChangeNotification
答案 0 :(得分:4)
一旦可用的网络带宽变得太低而无法保持正常播放,MPMoviePlayerController
将触发MPMoviePlayerLoadStateDidChangeNotification
,而loadState
将设置MPMovieLoadStateStalled
。
然后,您可以屏蔽通知处理程序中的加载状态,并针对此状态运行应用程序所需的任何操作:
if ((movieController_.loadState & MPMovieLoadStateStalled) == MPMovieLoadStateStalled)
{
NSLog(@"playback stalled - make sure we don't block now!");
}
播放器恢复后,会再次触发MPMoviePlayerLoadStateDidChangeNotification
,loadState
属性将设置MPMovieLoadStatePlaythroughOK
位:
if ((movieController_.loadState & MPMovieLoadStatePlaythroughOK) == MPMovieLoadStatePlaythroughOK)
{
NSLog(@"playback should run uninterrupted from now on.");
}
但是,我从未遇到MPMovieLoadStateStalled
状态引起的应用程序界面减速。我会说你的代码一定很奇怪,但我并不是MPMoviePlayerController
。此外,这些通知始终发送,我从未体验过没有正确触发的情况。
我只能建议在最小的测试用例中重新创建此问题,然后从那个问题开始向您的应用程序(可能来自双方,测试用例和您的应用程序)进行操作。
为了模拟带宽故障,我建议使用Charles proxy。