AVQueuePlayer воспроизводит аудио только один раз из массива

У меня есть массив QueuePlayer, как показано ниже,

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. Воспроизведение звука из массива при нажатии кнопки работает хорошо только в первый раз. Если я снова нажму кнопку воспроизведения. Это не воспроизведение звука. Не знаю, что не так. Я проверил это с помощью кода отладки. Мой массив обнуляется или что-то в этом роде. Тогда почему он не воспроизводится снова при нажатии кнопки?

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


person iGatiTech    schedule 09.03.2016    source источник
comment
Вы разрешаете воспроизвести полный трек и после этого попытаться воспроизвести снова?   -  person Tirth    schedule 09.03.2016
comment
@Tirth Да, я пытался воспроизвести его снова после того, как один раз проиграл весь трек.   -  person iGatiTech    schedule 09.03.2016
comment
как вы добавляете треки в AVQueuePlayer?   -  person Tirth    schedule 09.03.2016
comment
@Tirth Это довольно большая логика. Так как у меня аудиодорожки добавлены локально. Пользователю разрешено выбирать столько звуковых дорожек, сколько он хочет. Затем после того, как я последовательно добавил все звуковые дорожки в QueuePlayer и сгенерировал этот массив для UITableView. Но мне интересно, если он воспроизводит звук в первый раз из массива, то почему бы и нет?   -  person iGatiTech    schedule 09.03.2016
comment
Ваша проблема связана с другим кодом, но не с приведенным здесь кодом.   -  person Tirth    schedule 09.03.2016


Ответы (1)


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

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

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

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

person Maddy    schedule 10.03.2016