2010-11-01 5 views
3

Я использую AVFoundation для реализации AVPlayer. Я хочу, чтобы петли видеоклипа непрерывно, поэтому я зарегистрировать AVPlayerItemDidPlayToEndTimeNotification, чтобы вызвать этот метод:Могу ли я проверить, когда IOS4 AVPlayer seekToTime завершается?

- (void)player1ItemDidReachEnd:(NSNotification *)notification 
{ 
dispatch_async(dispatch_get_main_queue(), 
     ^{ 
     [player1 seekToTime:kCMTimeZero]; 
     [player1 play]; 
     }); 
} 

Он работает некоторое время, но в конце концов, игра останавливается, предположительно, из-за асинхронной завершения seekToTime. Как я могу сделать этот код пуленепробиваемым?

ответ

5

Теперь я исправил это, установив свойство AVPlayerActionAtItemEnd AVPlayer в AVPlayerActionAtItemEndNone - по умолчанию был AVPlayerActionAtItemEndPause. AVPlayer больше не останавливается в конце клипа, поэтому воспроизведение не нужно перезапускать. Также выяснилось, что нет необходимости посылать seekToTime в основную очередь.

0

в controller.h добавить

AVPlayer *myplayer; 

в Controller.m добавить

#import <CoreMedia/CoreMedia.h> 

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

и добавить функцию от селектора

- (void)playerItemDidReachEnd:(NSNotification *)notification { 
AVPlayerItem *playerItem = [notification object]; 
[playerItem seekToTime:kCMTimeZero]; 
[myplayer play]; 

}

Это поможет мне для зацикливание видео, но вам нужно Кэш это как некоторые (для гладкого контура)

+0

хех, некоторое время остановки% (игры, когда отсчет игра 2,5,6,11 :( – iTux

0
- (void)playLogo { 
NSString *path = [[NSBundle mainBundle] pathForResource:@"logo" 
               ofType:@"m4v" 
              inDirectory:@"../Documents"]; 

self.myplayerItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:path]]; 
self.myplayer = [AVPlayer playerWithPlayerItem:self.myplayerItem]; 
[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(playerItemDidReachEnd:) 
              name:AVPlayerItemDidPlayToEndTimeNotification 
              object:[self.myplayer currentItem]]; 
[videoView setPlayer:self.myplayer]; 
[videoView setAlpha:0.5f]; 
[self.myplayer play]; } 

- (void)playerItemDidReachEnd:(NSNotification *)notification { 
[videoView setAlpha:0.0f]; 
[[NSNotificationCenter defaultCenter] removeObserver:self 
               name:AVPlayerItemDidPlayToEndTimeNotification 
               object:[self.myplayer currentItem]]; 
[self playLogo]; } 
5
player.actionAtItemEnd = AVPlayerActionAtItemEndNone; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) 
name:AVPlayerItemDidPlayToEndTimeNotification object:[player currentItem]]; 

(void)playerItemDidReachEnd:(NSNotification *)notification { 
AVPlayerItem *p = [notification object]; 
[p seekToTime:kCMTimeZero]; 
} 
Смежные вопросы