如何在停止视频后关闭MPMoviePlayerController

jor*_*rik 1 iphone objective-c nsurl nstimer mpmoviewcontroller

我已在30秒内成功停止了视频.但我无法解雇 MP MovieViewController,我想停止缓冲活动.我用过这段代码......

视频播放代码:

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Pungi" ofType:@"mp4"]];

self.movie = [[MPMoviePlayerController alloc] initWithContentURL:url];
self.movie .controlStyle = MPMovieControlStyleEmbedded;
[  self.movie  play];
[self.view addSubview:self.movie.view];
[self.movie setFullscreen:YES animated:YES];
self.movie.initialPlaybackTime = 0.5;
[NSTimer scheduledTimerWithTimeInterval:15.0
                                 target:self
                               selector:@selector(stopVideo)
                               userInfo:nil
                                repeats:NO];
Run Code Online (Sandbox Code Playgroud)

stopVideo:

[self.movie stop];
[self.movie.view removeFromSuperview];
[self.movie release];
Run Code Online (Sandbox Code Playgroud)

Jan*_*ner 5

把你MPMoviePlayerController放在一个单独的类中并加载它:

MoviePlayerViewController.h

#import <MediaPlayer/MediaPlayer.h> 

@interface MoviePlayerViewController : UIViewController

@end
Run Code Online (Sandbox Code Playgroud)

MoviePlayerViewController.m

#import "MoviePlayerViewController.h"

MPMoviePlayerViewController *movieController;

@interface MoviePlayerViewController ()

@end

@implementation MoviePlayerViewController



- (void)willEnterFullscreen:(NSNotification*)notification {
    NSLog(@"willEnterFullscreen");
}

- (void)enteredFullscreen:(NSNotification*)notification {
    NSLog(@"enteredFullscreen");
}

- (void)willExitFullscreen:(NSNotification*)notification {
    NSLog(@"willExitFullscreen");
}

- (void)exitedFullscreen:(NSNotification*)notification {
    NSLog(@"exitedFullscreen");

    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)playbackFinished:(NSNotification*)notification {
    NSNumber* reason = [[notification userInfo] objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];
    switch ([reason intValue]) {
        case MPMovieFinishReasonPlaybackEnded:
            [self dismissModalViewControllerAnimated:YES];
            break;
        case MPMovieFinishReasonPlaybackError:
            break;
        case MPMovieFinishReasonUserExited:
            [self dismissModalViewControllerAnimated:YES];
            break;
        default:
            break;
    }
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterFullscreen:) name:MPMoviePlayerWillEnterFullscreenNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willExitFullscreen:) name:MPMoviePlayerWillExitFullscreenNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enteredFullscreen:) name:MPMoviePlayerDidEnterFullscreenNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(exitedFullscreen:) name:MPMoviePlayerDidExitFullscreenNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];



    NSString *videoName = @"Videoname";

    NSString *filepath   =   [[NSBundle mainBundle] pathForResource:videoName @"movietype"];
    NSURL    *fileURL    =   [NSURL fileURLWithPath:filepath];
    movieController = [[MPMoviePlayerViewController alloc] initWithContentURL:fileURL];


    [movieController.view setFrame:CGRectMake(0, -20, 320, 480)];
    [self.view addSubview:movieController.view];

    [movieController.moviePlayer play];

}
Run Code Online (Sandbox Code Playgroud)

ViewController.m

    MoviePlayerViewController *player = [[MoviePlayerViewController alloc] initWithNibName:nil bundle:nil];
 [self presentModalViewController:player animated:YES];
Run Code Online (Sandbox Code Playgroud)

它能做什么:

MoviePlayerViewController是一个自定义类,用于加载MPMoviePlayerController视频.在viewDidLoad方法中(或任何你想要的地方)你加载MoviePlayerViewController.([self presentModalViewController:animated])....这样做的好处是,你的主类没有重载moviecrap/definitions,你可以轻松地解除MoviePlayerViewController它在完成时使用Notifications来检查它是否已经停止.如果它已经停止:

[self dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!