我有一个98%完成的应用程序,最近我偶然发现了一个新引入的bug。该应用程序播放来自一个播放列表的服务器的mp3(只是一个JSON的跟踪URL列表,而不是一个m3u文件)。
一切都如期而至,除了一首曲目结束后。此时,下一个轨道是自动选择的,UI被更新。但这条赛道从来没有演奏过。另外:没有触发playbackLikelyToKeepUp键值观察者。我能读duration,…其中选择(不播放) AVPlayerItem。所以它是一个有效的对象。
当我按下"next“或在我的表视图中选择一行时,一切都会正常工作。对我来说最奇怪的是,对于用户事件(按下"next“)和自动播放功能,代码完全相同。这两种方法都在我的PlaylistManager上设置了一个PlaylistManager,我观察到了这些变化。这会触发一个playCurrentTrack方法。
它有可能和NSNotificationCenter有关吗
我用它来检查当前的曲目是否已经演奏完毕,如下所示:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:self.currentAudioPlayerItem];playerItemDidReachEnd看起来是这样的:
- (void)playerItemDidReachEnd:(NSNotification *)notification {
// same action as pressing 'next' button in my audioplayer UI controls
// which is working, I can also see some UI updates ( correct title etc. … )
[self pressedNext];
}我在想一些可能是线程,阻止从url加载mp3时触发的事件?我看到mp3信息正在我的http流量工具中加载。
谢谢。
发布于 2012-09-18 10:31:51
我已经(热度)修复了这个问题,方法是将一些类方法放回行内:
-(void)playerItemDidReachEndNotification{。
// make sure we trigger the selector on the main thread
[self performSelectorOnMainThread:@selector(playerItemDidReachEnd) withObject:nil waitUntilDone:NO];
}我相信其中的一些东西是不必要的,但主要的目标是让它重新发挥作用。
希望在下一次迭代中找到真正的罪魁祸首。
https://stackoverflow.com/questions/12461780
复制相似问题