Mam odtwarzacz audio, który buduję za pomocą AVPlayera.AVPlayer replaceCurrentItemWithPlayerItem nie działa na iOS 4.3.3+
Obecnie trzymam instancję player
wokół i kiedy muszę zamienić utworów (zarówno z ręcznym wyborem lub utwór dobiegł końca) tworzę nowy AVPlayerItem
i wzywam replaceCurrentItemWithPlayerItem
z nowej pozycji.
Zgodnie z dokumentacją, replaceCurrentItemWithPlayerItem
jest operacją asynchroniczną, więc obserwuję również kluczową ścieżkę odtwarzacza currentItem. Kiedy zostanie to wywołane, mówię mojemu graczowi, żeby zagrał.
Oto odpowiedni kod:
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];
[playerItem addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:CHStreamingAudioPlayer_PlayerItemStatusChangedContext];
if (!_player) {
_player = [[AVPlayer alloc] initWithPlayerItem:playerItem];
[_player addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:CHStreamingAudioPlayer_PlayerStatusChangedContext];
[_player addObserver:self forKeyPath:@"currentItem" options:NSKeyValueObservingOptionNew context:CHStreamingAudioPlayer_PlayerCurrentItemChangedContext];
} else {
[_player replaceCurrentItemWithPlayerItem:playerItem];
}
I tu jest klucz zwrotna obserwacja wartość:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if (context == CHStreamingAudioPlayer_PlayerCurrentItemChangedContext) {
NSLog(@"Player's current item changed! Change dictionary: %@", change);
if (_player.currentItem) {
[self play]; //<---- doesn't get called
}
} else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
iOS 4.3.3 i iOS (5) mój klucz metoda nazywa ale obserwacja _player.currentItem
jest zawsze nil
. W 4.2.1 i 4.3.2 ta właściwość zawiera rzeczywistą wartość. Ta metoda nigdy nie jest wywoływana ponownie. Zasadniczo wymiana wydaje się zawsze zawieść.
To wygląda na błąd, ale być może robię coś nie tak.
Czy odpowiedź poniżej Dunja rozwiązać swój problem? –