0

ムービー ループを作成しようとしましたが、ビデオが終了したときに MPMoviePlayerPlaybackDidFinishNotification が呼び出されることはありません。

これが私のコードです:

    NSString *filepath   =   [[NSBundle mainBundle] pathForResource:@"dent4" ofType:@"mp4"];
    NSURL    *fileURL    =   [NSURL fileURLWithPath:filepath];
    self.moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];
    self.moviePlayerController.movieSourceType = MPMovieSourceTypeFile;
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlaybackComplete:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:self.moviePlayerController];

    [self.moviePlayerController.view setFrame:CGRectMake(playButton.frame.origin.x,
                                                    playButton.frame.origin.y,
                                                    playButton.frame.size.width,
                                                    playButton.frame.size.height)];

    self.moviePlayerController.view.backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];
    self.moviePlayerController.shouldAutoplay = YES;
    self.moviePlayerController.initialPlaybackTime = 0;
    [self.moviePlayerController setFullscreen:NO];
    self.moviePlayerController.controlStyle = MPMovieControlStyleNone;
    self.moviePlayerController.scalingMode = MPMovieScalingModeAspectFill;
    self.moviePlayerController.repeatMode = MPMovieRepeatModeOne;
    [self.view addSubview:self.moviePlayerController.view];
    [self.moviePlayerController prepareToPlay];
    [self.moviePlayerController play];

ビデオは一度正しく再生されますが、終了イベントは発生しません。

- (void)moviePlaybackComplete:(NSNotification *)note
{
    NSLog(@"END");
    if (note.object == self.moviePlayerController) {
        NSInteger reason = [[note.userInfo objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] integerValue];
        if (reason == MPMovieFinishReasonPlaybackEnded) {
            NSLog(@"REPLAY");
            [self.moviePlayerController prepareToPlay];
            [self.moviePlayerController play];

        }
    }

}

別の奇妙なビデオは、エミュレーターで正しくループしていますが (ただし、moviePlaybackComplete は呼び出されません)、デバイスでは 1 回しか再生されません。

誰でも私を助けることができますか?フルスクリーンでは呼び出されていないという投稿をすでに見ていますが、フルスクリーンモードではありません。

4

3 に答える 3

4

試す

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:)
                                                     name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayerController.moviePlayer];
于 2012-12-07T20:54:06.127 に答える
0

moviePlayerController ではなく、moviePlayer に設定する必要があります。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlaybackComplete:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayerController.moviePlayer];
于 2013-03-18T22:26:56.290 に答える
0

これを試してみてください

MPMoviePlayerViewController *mp;

1) viewDidLoad に Observer を追加する

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.mp.moviePlayer];

2) movieFinishedCallback メソッド

-(void)movieFinishedCallback:(NSNotification *) notification
{
    NSNumber *reason = [[notification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];
    switch ([reason integerValue])
    {
        case MPMovieFinishReasonPlaybackEnded:

            NSLog(@"Movieplayer is stopped");
            break;

        case MPMovieFinishReasonPlaybackError:

            NSLog(@"An error was encountered during playback");
            break;

        case MPMovieFinishReasonUserExited:

            NSLog(@"userExtied");
            break;

        default:
            break;
    }
}

3) ViewWillDisappear で Observer を削除するには

 [[NSNotificationCenter defaultCenter]removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:self.mp.moviePlayer];
于 2014-11-12T05:55:19.357 に答える