Невозможно воспроизвести аудио в фоновом режиме в iOS5 с AVQueuePlayer - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь создать приложение для воспроизведения локальной музыки, но, к сожалению, я не могу воспроизвести аудио в фоновом режиме в iOS5 с помощью AVQueuePlayer.

В моем ViewDidLoad я получил этот код:

// Player setup
mAudioPlayer = [[AVQueuePlayer alloc] init];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
[mAudioPlayer addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(1.0, 1) queue:NULL usingBlock:^(CMTime time) {
    [self updatePositionOnDisplay]; 
}];

// Audio session setup
NSError *setCategoryErr = nil;
NSError *activationErr  = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryErr];
[[AVAudioSession sharedInstance] setActive: YES error: &activationErr];

Вот мой метод playerItemDidReachEnd:

- (void)playerItemDidReachEnd:(NSNotification*)notification 
{
    NSLog(@"playerItemDidReachEnd");

    UIBackgroundTaskIdentifier newTaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        [[UIApplication sharedApplication] endBackgroundTask:newTaskID];
    }];
    NSLog(@"playerItemDidReachEnd 2");

    NSLog(@"searching next song");
    mCurrentSong = [self getNextSongWithIsSwitched:NO];
    if(mCurrentSong != nil){
        NSLog(@"Start : %@ - %@", mCurrentSong.artist, mCurrentSong.title);

        mTapeTitle.text = [NSString stringWithFormat:@"%@ - %@", mCurrentSong.artist, mCurrentSong.title];

        AVPlayerItem* i = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:mCurrentSong.path]];

        if(i != nil){
            [mAudioPlayer insertItem:i afterItem:nil];
        }else
            NSLog(@"BING!! no AVPlayerItem created for song's path: %@", mCurrentSong.path);

        [i release];
    }else{
        NSLog(@"no song found");
        [mAudioPlayer pause];
        isPlaying = NO;        
        [mPlayButton setSelected:NO];
    }

    [[UIApplication sharedApplication] endBackgroundTask:newTaskID];
    newTaskID = UIBackgroundTaskInvalid;
}

Когда я запускаю воспроизведение, оно работает и продолжает играть, когда я выключаю экран.НО, когда песня заканчивается, вот журналы

2012-03-01 10:00:27.342 DEMO[3096:707] playerItemDidReachEnd
2012-03-01 10:00:27.360 DEMO[3096:707] playerItemDidReachEnd 2
2012-03-01 10:00:27.363 DEMO[3096:707] searching next song
2012-03-01 10:00:27.381 DEMO[3096:707] Start : Moby - Ah-Ah

Но ни одна песня не запускается эффективно ...

Может кто-нибудь сказать мне, что не так с моим кодом ??

Большое спасибо.

1 Ответ

0 голосов
/ 18 мая 2012

попробуйте прокомментировать следующие строки

[[UIApplication sharedApplication] endBackgroundTask:newTaskID];
newTaskID = UIBackgroundTaskInvalid;

, если он работает, вам нужно добавить наблюдателя в mAudioPlayer для «currentItem.status», когда статус AVPlayerStatusReadyToPlay затем завершить фоновую задачу

...