ios - MPMoviePlayerController 阻塞主线程
<p><p>我正在使用 <code>MPMoviePlayerController(MPMPC)</code> 将音频流式传输到应用程序中,并且运行良好。只有一个异常(exception),在网络连接不足的情况下,应用程序变得无响应。 </p>
<p>现在我什至也尝试过使用 <code>AVPlayer</code>,但体验大致相同。由于某种原因,我在互联网上找不到与此相关的任何问题。所以我不确定这是我的结果还是 <code>MPMoviePlayerController</code> 在低连接性期间的行为方式。</p>
<p>我什至尝试记录在将 <code>URL</code> 提供给 <code>MPMPC</code> 后调用的任何函数,但没有调用任何函数。</p>
<p>我使用了以下三个通知来获取 MPMPC 的事件</p>
<pre><code>MPMoviePlayerLoadStateDidChangeNotification
MPMoviePlayerPlaybackDidFinishNotification
MPMoviePlayerPlaybackStateDidChangeNotification
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>一旦可用网络带宽变得太低而无法正常播放,<code>MPMoviePlayerController</code> 将触发 <code>MPMoviePlayerLoadStateDidChangeNotification</code> 并且 <code>loadState</code> 将具有 <code>MPMovieLoadStateStalled</code> 设置。 </p>
<p>然后,您可以在通知处理程序中屏蔽加载状态,并针对此状态运行您的应用所需的任何操作:</p>
<pre><code>if ((movieController_.loadState & MPMovieLoadStateStalled) == MPMovieLoadStateStalled)
{
NSLog(@"playback stalled - make sure we don't block now!");
}
</code></pre>
<p>播放器恢复后,再次触发 <code>MPMoviePlayerLoadStateDidChangeNotification</code> 并且 <code>loadState</code> 属性将设置 <code>MPMovieLoadStatePlaythroughOK</code> 位:</code> p>
<pre><code>if ((movieController_.loadState & MPMovieLoadStatePlaythroughOK) == MPMovieLoadStatePlaythroughOK)
{
NSLog(@"playback should run uninterrupted from now on.");
}
</code></pre>
<p>但是,我从未遇到过由 <code>MPMovieLoadStateStalled</code> 状态导致的应用程序界面变慢的情况。我想说那一定是你的代码表现得很奇怪,它不是我所知道的 <code>MPMoviePlayerController</code> 。此外,这些通知始终会发送,我从未遇到过未正确触发它们的情况。</p>
<p>我只能建议在一个最小的测试用例中重新创建这个问题,并从那个到你的应用程序(可能从测试用例和你的应用程序的双方)开始。</p>
<p>为了模拟带宽故障,我建议使用 <a href="http://www.charlesproxy.com/" rel="noreferrer noopener nofollow">Charles proxy</a> .</p></p>
<p style="font-size: 20px;">关于ios - MPMoviePlayerController 阻塞主线程,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/20797546/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/20797546/
</a>
</p>
页:
[1]