AudioStreamer Мэтта Галлахера в iPhone - невозможно настроить сетевой поток чтения

Я использую алгоритм Мэтта Галлахера для потоковой передачи mp3 в iOS, но иногда, когда вы приостанавливаете приложение и через некоторое время возобновляете воспроизведение песни, появляется сообщение: «Невозможно настроить чтение сетевого потока». Я проанализировал код, но не вижу, как обойти эту ошибку. Кому-нибудь удалось лучше справиться с этой ошибкой?

Код AudioStreamer Мэтта Галлахера


person flopes    schedule 02.12.2011    source источник
comment
Любые ответы, которыми вы могли бы поделиться по этому поводу?   -  person Andre Cytryn    schedule 17.04.2012
comment
У меня была эта проблема, когда нет подключения к Интернету. Может ли это быть фактором? Это когда вы переходите от или к Wi-Fi?   -  person Jensen2k    schedule 18.04.2012


Ответы (1)


Я испытал то же самое с этим сторонним приложением и не смог найти для этого решения, а затем я попробовал собственный avplayer от Apple (не avaudioplayer), который дает вам возможность потоковой передачи с помощью функции :initWithURL . вот, кстати, ссылка на класс: http://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVPlayer_Class/Reference/Reference.html

кроме того, вот мой код для воспроизведения музыки:

NSURL *url = [[NSURL alloc] initWithString:sourceURL];
            theItem = [AVPlayerItem playerItemWithURL:url];
            theItem addObserver:self forKeyPath:@"status" options:0 context:nil];
            theAudio = [AVPlayer playerWithPlayerItem:mainDelegate.theItem];

чтобы понять, готов ли игрок к игре, вы добавляете наблюдателя выше, а затем вы можете проверить это следующим образом:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
                        change:(NSDictionary *)change context:(void *)context {
    if (object == theItem && [keyPath isEqualToString:@"status"]) {
        if(theItem.status == AVPlayerStatusReadyToPlay)    
        {
            [theAudio play];
            [theItem removeObserver:self forKeyPath:@"status"];
        }
        else if(theItem.status == AVPlayerStatusFailed) {
            NSLog(@"%@" , mainDelegate.theItem.error.description);
        }
        else if(theItem.status == AVPlayerStatusUnknown)
            NSLog(@"unknown");
    }
}

Надеюсь, это поможет.

person iremk    schedule 30.04.2012