3

VideoControllerビデオを再生するものがあります。これで、VideoController がプッシュされましたnavigationController

 VideoController *ObjVideoController = [[VideoController alloc] init];
 ObjVideoController.strVideoURL = [AnimationArr objectAtIndex:SequenceCount];
 [self.navigationController pushViewController:ObjVideoController animated:NO];
 [ObjVideoController play:[AnimationArr objectAtIndex:SequenceCount]];

Play methodVideoController では次のようになります。

 - (void)play:(NSString*)videoFile {
    playbaktime = 0.0;

    NSBundle *main = [NSBundle mainBundle];
    NSURL *url = [NSURL fileURLWithPath:[[main resourcePath] stringByAppendingPathComponent:videoFile]];

    if (!self.ctl)
    {
        self.ctl = nil;
        self.ctl = [[MPMoviePlayerController alloc]init];
        [self.view addSubview:self.ctl.view];
    }
    [self.ctl prepareToPlay];
    self.ctl.contentURL = url;
    self.ctl.controlStyle = 0;
    //self.ctl.useApplicationAudioSession = NO;
    [self.ctl.view setUserInteractionEnabled:NO];
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
        [self.ctl.view setFrame:CGRectMake(0,0,480,320)];
    else
        [self.ctl.view setFrame:CGRectMake(0,0,1024,768)];

    self.ctl.backgroundView.backgroundColor = [UIColor whiteColor];
    [self.ctl play];
}

observer、が追加されましUIApplicationWillResignActiveUIApplicationDidBecomeActive。そのセレクターを以下に示します。

 -(void)Pause_Video:(NSNotification*)notification {
   Pausevideo = 1;
   playbaktime = self.ctl.currentPlaybackTime;
   [self.ctl pause];
 }

-(void)Play_Video:(NSNotification*)notification {

  if(self.ctl.loadState == MPMovieLoadStateUnknown)
  {
    [self play:self.strVideoURL];
    Pausevideo = 0;
  }
  else{
    if (self.ctl.playbackState == MPMoviePlaybackStatePaused) {
        [self.ctl play];
        Pausevideo = 0;
    } 
    else
    {
        [self.ctl setInitialPlaybackTime:playbaktime];
        [self.ctl play];
        Pausevideo = 0;
    }
   }  
  }

質問を理解し、助けていただければ幸いです。

4

1 に答える 1

2

prepareToPlay再生する前に毎回呼び出しているようですが、これは必要ありません。ファイルをロードするときに一度呼び出すだけです。一時停止後に呼び出す必要はありません。

さらに、通知がすぐに発生しないため、遅延が発生しています。具体的にUIApplicationDidBecomeActiveは、アプリがフォアグラウンドに入った後にのみ適切に起動します。代わりに、アプリがフォアグラウンドに入るときに起動する を観察しUIApplicationWillEnterForegroundNotification、ラグを大幅に減らすことができます。

于 2012-11-04T21:18:24.977 に答える