我有一个98%完成的应用程序,最近我偶然发现了一个新引入的错误。 该应用程序播放来自播放列表的服务器的mp3(只是跟踪网址的JSON列表,而不是m3u文件)。
除非赛道完成比赛,否则一切都按预期工作。
此时,自动选择下一曲目并更新UI。
但是赛道从未参加过。
另外:未触发playbackLikelyToKeepUp
键值观察器。
我可以阅读所选(不播放)AVPlayerItem的duration
,...
所以它是一个有效的对象。
当我按下“下一步”或在我的桌面视图中选择一行时,一切都有效。
对我来说最奇怪的部分是用户事件(按“下一步”)和自动播放功能的代码完全相同。两者都在我的播放列表管理器上设置了currentTrackIndex
,我观察了它的变化。这会触发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];
}
我正在考虑使用线程,阻止从网址加载mp3时触发的事件?我看到我的http流量工具正在加载mp3信息。
感谢。
答案 0 :(得分:0)
我(热门)通过将一些类方法重新内联来解决这个问题:
使用更多防错的方法在玩家到达时触发选择器:
-(void)playerItemDidReachEndNotification{
// make sure we trigger the selector on the main thread
[self performSelectorOnMainThread:@selector(playerItemDidReachEnd) withObject:nil waitUntilDone:NO];
}
我确信这些东西不是必需的,但主要目标是让它再次运作 希望在下一次迭代中找到真正的罪魁祸首。