1

MPMoviePlayerViewController で動画を再生したい。したがって、ビュー コントローラーで のオブザーバーとして登録しMPMoviePlayerLoadStateDidChangeNotificationます。

次に、MPMoviePlayerViewController を初期化します。

self.mPlayerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:@"<videoURL>"]];

そして通知が来るのを待ちます。実行したら、次のコードを実行します。

MPMoviePlayerController* playerController = notification.object;

if ([playerController loadState] & MPMovieLoadStatePlayable) {
    if (self.mPlayerVC) {
        [self presentMoviePlayerViewControllerAnimated:self.mPlayerVC];
    }
}

これがiOS 5では機能するのにiOS 6では機能しない理由を知っている人はいますか? ありがとう

4

1 に答える 1

2

iOS6のMediaPlayer.frameworkにバグがあるようです。ビデオを再生するにはprepareToPlay、MPMoviePlayerViewControllerを初期化した後に呼び出します

self.mPlayerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:@"<videoURL>"]];
[self.mPlayerVC.moviePlayer prepareToPlay];

これで通知が再び届きますが、に対して呼び出さ[self presentMoviePlayerViewControllerAnimated:self.mPlayerVC];れたメソッドを呼び出すとアプリがクラッシュしMPMoviePlayerLoadStateDidChangeNotificationます。

クラッシュを防ぐために交換してください

[self presentMoviePlayerViewControllerAnimated:self.mPlayerVC];

のようなもので

if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]) {
[self presentViewController:self.mPlayerVC animated:YES completion:nil];
}
else if ([self respondsToSelector:@selector(presentModalViewController:animated:)]) {
[self presentModalViewController:self.mPlayerVC animated:YES];
}
于 2012-11-01T10:47:48.850 に答える