gpt4 book ai didi

ios - MPMoviePlayerController 阻塞主线程

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:44:28 27 4
gpt4 key购买 nike

我正在使用 MPMoviePlayerController(MPMPC) 将音频流式传输到应用程序中,效果非常好。只有一个异常(exception),在低网络连接期间,应用程序变得无响应。

现在我什至尝试过使用 AVPlayer 但或多或少有相同的体验。出于某种原因,我在互联网上找不到与此相关的任何问题。所以我不确定这是我的结果还是 MPMoviePlayerController 在低连接性期间的行为方式。

我什至尝试记录在将 URL 提供给 MPMPC 之后调用的任何函数,但没有调用任何函数。

我使用了以下三个通知来获取 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com