0

このクラスを理解して適切に動作させるのに問題があります。これを使用するコードは次のとおりです。

MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:_videoURL];
UIImage *videoThumbnail = [moviePlayer thumbnailImageAtTime:0 timeOption:MPMovieTimeOptionNearestKeyFrame];
[lastImageView setImage:videoThumbnail];

[moviePlayer setControlStyle:MPMovieControlStyleNone];
[moviePlayer setShouldAutoplay:YES];
[moviePlayer prepareToPlay];

[moviePlayer.view setFrame:lastImageView.frame];
moviePlayer.view.transform = CGAffineTransformMakeRotation((90*M_PI)/180);
[self.view addSubview:moviePlayer.view];

[moviePlayer play];

videoThumbnail 行がまだ存在する唯一の理由は、そこから画像が取得されるかどうかを試してみてから、突然動作するようになるまで、ビデオを再生できなかったためです...一種の. これで 2 ~ 3 秒間再生され、MPMoviePlayerPlaybackDidFinishNotification または MPMoviePlayerPlaybackStateDidChangeNotification を送信せずに終了します

4

1 に答える 1

3

新しく作成されたMPMoviePlayerControllerインスタンスをローカル スコープ ( ) を持つ変数以外に割り当てていない場合moviePlayer、ムービー プレーヤーはムービーが再生される前に割り当て解除されます。(thumbnailImageAtTime通話はもう少し長く続くと思います。)

ムービー プレーヤー インスタンスを、保持されている (強力な) インスタンス変数またはプロパティに割り当ててみてください。もちろん、複数のムービー プレーヤー インスタンスは一緒にうまく再生できないため、終了したらリリースする必要があります。

また、iOS 5 以降では呼び出しprepareToPlayが必要です。以下は、Matt Neuberg のProgramming iOS 5, Second Editionの第 28 章からのものです。

MPMoviePlayerController を使用してインターフェイスにムービーを表示する前に、MPMediaPlayer プロトコル (MPMoviePlayerController で採用) を介して提供される prepareToPlay を呼び出す必要があります。この要件は iOS 5 で新しく追加されたもので、システムの以前のバージョンとの大きな違いです。この呼び出しを行わなかった場合、古いコードが壊れる可能性があります。

于 2012-07-07T14:31:14.330 に答える