1

iPhone 4 シミュレーターでビデオを実行しようとしているこのコードがあります。

問題は、プレーヤーをロードするように見えますが、0.5 秒後にアプリケーション全体の上に背面画面がロードされ、タッチとすべてが無効になり、何も聞こえないため、ビデオも再生されないように見えます。

何か案は?!

MPMoviePlayerViewController *mp =
[[MPMoviePlayerViewController alloc] initWithContentURL:videoUrl];

if (mp) {
    mp.moviePlayer.scalingMode = MPMovieScalingModeFill; 
    mp.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
    [mp.moviePlayer play];

    [self presentMoviePlayerViewControllerAnimated:mp];

    [mp release];
}
4

2 に答える 2

1

問題は MPMoviePlayerViewController を解放することによって引き起こされると思います。コントローラーは使い終わるまでそのままにしておいてください。

「[mp release];」の前に この行を追加して、値を保存します。

self.moviePlayerViewController = mp;

次に、dealloc メソッドを更新してリリースを行います。

- (void)dealloc {
   [_moviePlayerViewController release], _moviePlayerViewController = nil;
   [super dealloc];
}

合成を .m ファイルの先頭に追加します。

@synthesize moviePlayerViewController = _moviePlayerViewController;

.h ファイルの @interface に定義を追加します。

MPMovieViewController *_moviePlayerViewController;

プロパティを .h ファイルに追加します。

@property (readwrite, retain) MPMovieViewController *moviePlayerViewController;

ヘッダーにいくつかのヘッダーが必要になる場合があります。

#import <MediaPlayer/MediaPlayer.h>
#import <MediaPlayer/MPMoviePlayerViewController.h>

「presentMoviePlayer」呼び出しとどこかでの却下のバランスをとる必要がある場合もあります。

[self dismissMoviePlayerViewControllerAnimated];

ふぅ、どこでもコード。いずれにせよ、リソースの使用を早期に終了した場合は、NotificationManager を使用して MPMoviePlayerPlaybackDidFinishNotification を監視することで、リソースをより早く解放できる可能性があります。その例はたくさんあるので、繰り返しません。

お役に立てれば。

于 2010-07-19T22:43:31.227 に答える
0

これは私が使用しているコードです:

MPMoviePlayerViewController *movieViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:contentUrl]];
movieViewController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[self presentMoviePlayerViewControllerAnimated:movieViewController];
[movieViewController release];

私にとってはうまくいくようです。2 つの注意事項:

  • 一部のシミュレーター (現在の iOS 5.0 など) はムービーの再生時にクラッシュしますが、実際のデバイスでは動作します
  • そのmovieSourceType部分を省略すると、ムービーが始まる前に約 1 秒間黒い画面が表示されます。
于 2012-06-19T17:04:08.360 に答える