2011-12-20 9 views
0

私のiPadアプリにビデオを実装していて、うまく動作します。しかし、私が取り組んでいる問題は、どこか別の場所に移動するためにビューを離れると、ビデオオーディオがバックグラウンドで再生し続けるということです。ビューを閉じる前にビデオを完全に停止してビューから削除する方法はありますか?iOS Media Framework

私が試み:

[moviePlayerController STOP]。 - しかし、それはちょうどアプリをクラッシュする映画を停止するようではありません。

[moviePlayerController.view removeFromSuperview]; - それはビューからビデオを削除しますが、オーディオは停止しません。

これは私がコードを持っているものです。

- (IBAction)PlayMediaButton:(id)sender 
{ 

[moviePlayerController stop]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) 
              name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 

NSString *movpath = [[NSBundle mainBundle] pathForResource:@"albert" ofType:@"mp4"]; 
MPMoviePlayerViewController* mpviewController = [[MPMoviePlayerViewController alloc] 
               initWithContentURL:[NSURL fileURLWithPath:movpath]]; 

if ([[NSFileManager defaultManager] fileExistsAtPath:movpath])  //Does file exist? 
{ 
    moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:movpath]]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlaybackComplete:) 
               name:MPMoviePlayerPlaybackDidFinishNotification 
               object:moviePlayerController]; 

    moviePlayerController.view.frame = CGRectMake(38, 37, 986, 618); 
    [self.view addSubview:moviePlayerController.view]; 
    [moviePlayerController play]; 

    if ([moviePlayerController respondsToSelector:@selector(setAllowsAirPlay:)]) //Allow airplay if availabe 
     [moviePlayerController setAllowsAirPlay:YES]; 

    [moviePlayerController play]; 

}    
} 



- (void)moviePlaybackComplete:(NSNotification *)notification 
{ 
    MPMoviePlayerController *moviePlayerController = [notification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name:MPMoviePlayerPlaybackDidFinishNotification 
                object:moviePlayerController]; 

    [moviePlayerController.view removeFromSuperview]; 
    [moviePlayerController release]; 
} 
+1

'-stop'を' moviePlayerController'に送信すると、どんなエラーが表示されますか?このメッセージをどこに送っていますか? –

+0

'moviePlayerController'のインスタンスを作成する方法と、** stop **および** removeFromSuperview **を呼び出す場所を示すコードを貼り付けます。 – WrightsCS

+0

私はビデオを呼び出す必要があり、再生が完了したときに追加しました。 – user964627

答えて

2

私が正しくあなたを次てる場合は、あなたが-viewWillDisappear:にムービープレーヤーコントローラを停止する必要があります。

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    [moviePlayerController stop]; 
} 

編集ちょうどあなたが代わりにMPMoviePlayerControllerMPMoviePlayerViewControllerを作成していることに気づきました。前者はUIViewControllerのサブクラスとしてモーダル表示されています。これはMPMoviePlayerViewController-stopメッセージに応答しないため、クラッシュを説明しています。したがって、moviePlayerController-presentModalViewController:animated:を表示するか、そのタイプをMPMoviePlayerControllerに変更して、今行っているようにビューに追加してください。

+0

これを試した後、私はビューを離れるときにアプリケーションをクラッシュさせ続けます。 – user964627

+0

はい、アプリがクラッシュしていることを理解しています。あなたが受け取っているエラーを私たちと共有していますか? –

+0

スレッド1のmain.mで停止しているようです。 – user964627