我正在使用 MPMoviePlayerController(MPMPC)
将音频流式传输到应用程序中,效果非常好。只有一个异常(exception),在网络连接较低时,应用程序会变得无响应。
现在我什至尝试过使用AVPlayer
,但体验或多或少相同。由于某种原因,我在互联网上找不到与此相关的任何问题。所以我不确定这是否是我的想法,或者是 MPMoviePlayerController
在低连接情况下的行为方式。
我什至尝试记录在向 MPMPC
提供 URL
后调用的任何函数,但没有调用任何函数。
我使用了以下三个通知来获取 MMPPC 的事件
MPMoviePlayerLoadStateDidChangeNotification
MPMoviePlayerPlaybackDidFinishNotification
MPMoviePlayerPlaybackStateDidChangeNotification
最佳答案
一旦可用网络带宽变得太低而无法正常播放,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 .
关于ios - MPMoviePlayerController 阻塞主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20797546/