2016-03-09 4 views
0

У меня есть массив QueuePlayer, как показано ниже,AVQueuePlayer воспроизводит звук только один раз из массива

Print Queue Player array : (
    "<AVQueuePlayer: 0x7fed625a51c0>", 
    "<AVQueuePlayer: 0x7fed624baa00>", 
    "<AVQueuePlayer: 0x7fed624c43c0>" 
) 

На кнопке мыши я играю аудио из выше массива,

-(IBAction)click_Play:(UIButton *)sender { 

    [(AVQueuePlayer *)[arrQueuePlayer objectAtIndex:sender.tag] setVolume:1.0]; 
    [(AVQueuePlayer *)[arrQueuePlayer objectAtIndex:sender.tag] play]; 
} 

причина создания массива QueuePlayer является , моя кнопка воспроизведения находится в UITableView. Воспроизведение звука из массива при нажатии кнопки работает хорошо только в первый раз. Если я снова нажму кнопку воспроизведения. Это не играет звук. Не знаю, что не так. Я проверил его, отлаживая код, Мой массив получает нулевое значение или что-то еще. Тогда почему он не воспроизводится снова при нажатии кнопки?

Пожалуйста, помогите мне. Заранее спасибо!

+0

Вы разрешаете играть полный трек и после этого пытаться снова сыграть? – Tirth

+0

@Tirth Yess Я попытался воспроизвести его снова, сыграв полный трек. – Gati

+0

Как вы добавляете треки в AVQueuePlayer? – Tirth

ответ

1

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

Если это так, вам нужно воссоздать своего игрока очереди, как только он начнет играть. Поскольку AVQueuePlayer не имеет никакого метода делегата, такого как audioPlayerDidFinishPlaying: (Это метод делегата AVAudioPlayer). Так AVQueuePlayer вам нужно добавить наблюдатель playerItemDidReachEnd:, как показано ниже,

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(playerItemDidReachEnd:) 
               name:AVPlayerItemDidPlayToEndTimeNotification 
               object:item]; 

В этом методе наблюдателя воссоздать плеер очереди и заменить его в массиве. Надеюсь, это поможет вам! Cheers ..

Смежные вопросы