Воспроизвести видео в цикле +AVQueuePlayer

Я использовал это видео для воспроизведения без рывков. Но как воспроизвести secondVideoItem в цикле.. То есть после воспроизведения видео я хочу добавить это видео в 10-15 раз. Только secondVideoItem, а не firstVideoItem.

NSString *secondVideoPath = [[NSBundle mainBundle] pathForResource:@"video1" ofType:@"mp4"];
    NSString *firstVideoPath = [[NSBundle mainBundle] pathForResource:@"video2" ofType:@"mp4"];


    AVPlayerItem *firstVideoItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:firstVideoPath]];
    AVPlayerItem *secondVideoItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:secondVideoPath]];

   AVQueuePlayer* queuePlayer = [AVQueuePlayer queuePlayerWithItems:[NSArray arrayWithObjects:firstVideoItem, secondVideoItem,nil]];

    AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:queuePlayer];
    avPlayer.actionAtItemEnd = AVPlayerItemStatusReadyToPlay;
    layer.frame = CGRectMake(0, 0, 1024, 768);

    [self.view.layer addSublayer:layer];

    [queuePlayer play];

Заранее спасибо


person ios developer    schedule 12.03.2013    source источник


Ответы (1)


После воспроизведения второго элемента это вызовет уведомление и перемотает видео, чтобы оно снова начало воспроизводиться...

queuePlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone; 

 [[NSNotificationCenter defaultCenter] addObserver:self
                                           selector:@selector(itemPlayEnded:)
                                               name:AVPlayerItemDidPlayToEndTimeNotification
                                             object:[queuePlayer currentItem]];

- (void)itemPlayEnded:(NSNotification *)notification 
{
 k++;
 if(k<10-15 times)
 {
  AVPlayerItem *p = [notification object];
  [p seekToTime:kCMTimeZero];
 }
}
person BhushanVU    schedule 12.03.2013
comment
Спасибо за быстрый ответ. Я играю оба видео. Я хочу воспроизводить только второе видео до 10-15 раз. Я не хочу начинать все это снова. Я просто хочу начать второе видео. ВОЗМОЖНО ЛИ это. да, тогда, пожалуйста, направьте меня - person ios developer; 12.03.2013
comment
да, согласно приведенному выше коду, он должен перемотать или воспроизвести второй элемент.n он должен начать воспроизведение снова.. попробуйте, если он это делает... - person BhushanVU; 12.03.2013
comment
Я пробовал. Но он воспроизводит оба файла: видео1 и видео2. Я хочу воспроизводить только видео2 в цикле. - person ios developer; 12.03.2013
comment
@shweta после просмотра этого не кажется, что ответ «не работает код», который вы разместили stackoverflow.com/questions/14765990/ - person BhushanVU; 12.03.2013
comment
есть ли способ вместо того, чтобы брать новый слой. Мы можем повторить только второй элемент массива для воспроизведения цикла. Так как это дает незначительный рывок, делая это таким образом.. - person ios developer; 12.03.2013
comment
когда 1-й видеофайл заканчивается, а затем начинается 2-й, задержка составляет несколько миллисекунд, что показывает рывок. - person ios developer; 13.03.2013
comment
может быть потому, что вы запускаете его с самого начала кадра 0-й секунды, поэтому вы можете попробовать [queuePlayer seekToTime: CMTimeMakeWithSeconds (1,1)]; другое дело, если я прав, вы снова добавляете слой при создании новой очереди, вы можете повторно использовать старый слой, не добавляя его снова addSubLayer... - person BhushanVU; 13.03.2013