Tôi có trình phát âm thanh mà tôi đang tạo bằng AVPlayer.AVPlayer replaceCurrentItemWithPlayerNó không hoạt động trên iOS 4.3.3+
Hiện tại, tôi giữ phiên bản player
xung quanh và khi cần trao đổi bản nhạc (từ lựa chọn thủ công hoặc bản nhạc đến cuối) Tôi tạo AVPlayerItem
mới và tôi gọi replaceCurrentItemWithPlayerItem
bằng mặt hàng mới.
Theo tài liệu, replaceCurrentItemWithPlayerItem
là một hoạt động không đồng bộ, vì vậy tôi cũng quan sát đường dẫn chính currentItem của trình phát. Khi được gọi, tôi bảo người chơi của mình chơi.
Đây là mã có liên quan:
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];
}
Và đây là chìa khóa gọi lại giá trị quan sát:
- (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];
}
}
Trên iOS 4.3.3 (và iOS 5) Phương pháp quan sát quan trọng của tôi được gọi nhưng _player.currentItem
luôn là nil
. Trên 4.2.1 và 4.3.2 thuộc tính này chứa giá trị thực. Phương pháp này không bao giờ được gọi lại. Vì vậy, về bản chất, thay thế dường như luôn thất bại.
Điều này có vẻ giống như một lỗi, nhưng có lẽ tôi đang làm điều gì sai.
Câu trả lời dưới đây của Dunja có giải quyết được sự cố của bạn không? –