2011-02-28 3 views
1

응용 프로그램이 시작되는 동안 비디오를로드하는 응용 프로그램을 개발 중입니다. 비디오가 재생되고 화면에서 제거되는 동안 거대한 얼간이를 관찰합니다.Objective C에서 비디오를 재생하는 방법 -로드 할 때 Jerk가 발생합니다.

내 코드는 다음과 같다 :

VideoPlayer.m

 
-(id)initWithVideo: (CGRect)frame file:(NSString *)videoFile 
{ 
    if (self = [super initWithFrame:frame]) 
    { 
     NSArray *file = [videoFile componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"."]]; 

     NSString *moviePath = [[NSBundle mainBundle] pathForResource:[file objectAtIndex:0] ofType:[file objectAtIndex:1]]; 

     if (nil != moviePath) 
     { 
      if (nil != theMovie) 
      { 
       [theMovie.view removeFromSuperview]; 
      } 

      theMovie = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL fileURLWithPath:moviePath]]; 

      theMovie.view.frame = self.bounds; 
      theMovie.moviePlayer.scalingMode = MPMovieScalingModeAspectFit; 
      theMovie.moviePlayer.controlStyle = MPMovieControlStyleNone; 
      theMovie.moviePlayer.movieSourceType = MPMovieSourceTypeFile; 
      theMovie.moviePlayer.fullscreen = NO;   

      [self addSubview:theMovie.view];    
     } 
    } 

    return self; 
} 

내가 그것을 놓치고 곳에 나를 인도 해주십시오.

답변

7
-(void)prepareMoviePlayer:(NSURL *)moviePath { 
    self.moviePlayerViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:moviePath]; 
    if ([[self.moviePlayerViewController moviePlayer] respondsToSelector:@selector(loadState)]) { 
     [[self.moviePlayerViewController moviePlayer] setControlStyle:MPMovieControlStyleEmbedded]; 
     [[self.moviePlayerViewController moviePlayer] setFullscreen:NO];  
     [[self.moviePlayerViewController moviePlayer] prepareToPlay]; 
     [[NSNotificationCenter defaultCenter] addObserver:self 
          selector:@selector(moviePlayerLoadStateDidChange:) 
          name:MPMoviePlayerLoadStateDidChangeNotification 
          object:nil]; 
} 


- (void)moviePlayerLoadStateDidChange:(NSNotification *)notification { 
    if ([[self.moviePlayerViewController moviePlayer] loadState] == MPMovieLoadStateStalled) { 
    NSLog(@"Movie Playback Stalled"); 
    } else if([[self.moviePlayerViewController moviePlayer] loadState] != MPMovieLoadStateUnknown) { 

    [[NSNotificationCenter defaultCenter] removeObserver:self 
          name:MPMoviePlayerLoadStateDidChangeNotification 
          object:nil]; 

    [[[self.moviePlayerViewController moviePlayer] view] setFrame:self.view.bounds]; 
    [[self view] addSubview:[[self.moviePlayerViewController moviePlayer] view]];  
    [[self.moviePlayerViewController moviePlayer] play]; 
    } 
} 

NSMoviePlayerViewController prepareToPlay 메서드가 여기에 중요한 것으로 보입니다. 또한 재생 완료 및 재생 중지를 처리하기 위해 다른 알림을 추가하는 것이 좋습니다. 또한이 코드 중 일부는 창의 하위 뷰에서 작동하도록 설계되었습니다.

+0

많은 감사 카일. 오늘이를 구현하고 u를 업데이트 할 예정입니다. – TechBee

+0

감사합니다 카일. 잘됐다. 와우. – TechBee

+2

위대한, 당신은 그 대답을 받아 들여야합니다. – Kyle