Можно ли использовать currentItem значения ключа AVPlayer? - PullRequest
2 голосов
/ 17 декабря 2011

Я использовал AvQueuePlayer для воспроизведения звука в фоновом режиме.И чтобы сохранить список воспроизведения AvQueuePlayer не пустым, я использовал наблюдение значения ключа, чтобы следить за currentItem AvQueuePlayer для подготовки к загрузке следующего элемента воспроизведения.Иногда это работает хорошо, но иногда это терпит неудачу.

Вот отчет о сбое, который я получил:

Date/Time:       2011-12-16 23:43:58.963 +0800
OS Version:      iPhone OS 4.3.5 (8L1)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x4f2ecfe8
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x32f0aca4 objc_msgSend + 28
1   Foundation                      0x3165386c NSKVONotify + 24
2   Foundation                      0x31651bb0 -[NSKeyValueObservance observeValueForKeyPath:ofObject:change:context:] + 220
3   Foundation                      0x315fa7ea NSKeyValueNotifyObserver + 210
4   Foundation                      0x315fa492 NSKeyValueDidChange + 230
5   Foundation                      0x315e666a - [NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] + 70
6   AVFoundation                    0x33f190f2 -[AVPlayerItem didChangeValueForKey:] +  26
7   AVFoundation                    0x33f1ceba __avplayeritem_fpItemNotificationCallback_block_invoke_1 + 2310
8   libdispatch.dylib               0x338da8e0 _dispatch_call_block_and_release + 4
9   libdispatch.dylib               0x338d61ee    _dispatch_main_queue_callback_4CF$VARIANT$up + 306
10  CoreFoundation                  0x34c1d934 __CFRunLoopRun + 1328
11  CoreFoundation                  0x34badebc CFRunLoopRunSpecific + 224
12  CoreFoundation                  0x34baddc4 CFRunLoopRunInMode + 52
13  GraphicsServices                0x33e5e418 GSEventRunModal + 108
14  GraphicsServices                0x33e5e4c4 GSEventRun + 56
15  UIKit                           0x31272d62 -[UIApplication _run] + 398
16  UIKit                           0x31270800 UIApplicationMain + 664
17  WeatherTunes                    0x0004b31e main (main.m:17)
18  WeatherTunes                    0x0004b2ac start + 32

А вот как я использую наблюдение значения ключа:

[_queuePlayer addObserver:self forKeyPath:@"currentItem" options:NSKeyValueObservingOptionNew context:nil];
[_queuePlayer addObserver:self forKeyPath:@"currentItem.status" options:NSKeyValueObservingOptionNew context:nil];

И я посмотрел в классессылка на AvPlayer.Затем я обнаружил, что было сказано, что свойство "status" может быть наблюдаемым, хотя оно не упоминает currentItem.Но я обнаружил, что некоторые люди используют свойство currentItem как наблюдаемое.Я сейчас совершенно сбит с толку.Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 18 ноября 2012

У меня была та же проблема, я хотел знать, когда закончится песня в AVQueuePlayer. Я закончил тем, что делал это вместо этого, казалось безопаснее.

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(songFinishedWithNotification:)
                                             name:AVPlayerItemDidPlayToEndTimeNotification
                                           object:nil];
...