1

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];

ストップビデオ:

[self.movie stop];
[self.movie.view removeFromSuperview];
[self.movie release];
4

5 に答える 5

5

MPMoviePlayerController別のクラスに入れてロードします。

MoviePlayerViewController.h

#import <MediaPlayer/MediaPlayer.h> 

@interface MoviePlayerViewController : UIViewController

@end

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];

}

ViewController.m

    MoviePlayerViewController *player = [[MoviePlayerViewController alloc] initWithNibName:nil bundle:nil];
 [self presentModalViewController:player animated:YES];

内容:

MoviePlayerViewControllerMPMoviePlayerControllerは、ビデオをロードするカスタムクラスです。viewDidLoadメソッド(または必要な場所)で、をロードしますMoviePlayerViewController。([self presentModalViewController:animated])....これには、メインクラスがmoviecrap / definedで過負荷にならないという利点があり、MoviePlayerViewController通知を使用して終了したときに、停止したかどうかを簡単に閉じることができます。停止した場合:

[self dismissModalViewControllerAnimated:YES];

お役に立てれば!

于 2012-10-06T11:48:03.443 に答える
2

以下のコードが示すように、実際に停止する前に、一時停止してinitialPlaybackTimeを-1に設定する必要があります。これは、MPMoviePlayerControllerが提供するトリッキーなものの1つです。

    [_moviePlayerController pause];

    if ([_moviePlayerController isKindOfClass:[MPMoviePlayerController class]]) {
        ((MPMoviePlayerController*)_moviePlayerController).initialPlaybackTime = -1;
    }

    [_moviePlayerController stop];
    if ([_moviePlayerController isKindOfClass:[MPMoviePlayerController class]]) {
        ((MPMoviePlayerController*)_moviePlayerController).initialPlaybackTime = -1;
    }
    [_moviePlayerController.view removeFromSuperview];
于 2012-10-06T09:12:56.867 に答える
1

viewDidLoad に通知オブザーバーを追加する必要があります。

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackDidFinishNotification:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];

次にメソッドを追加します。

 - (void)moviePlayerPlaybackDidFinishNotification:(NSNotification*)notification 
 {
    [self dismissMoviePlayerViewControllerAnimated];
 }
于 2014-10-16T06:56:46.503 に答える
0

これを試して.......

self.movie.initialPlaybackTime = -1; 
[self.movie stop]; 
[self.movie release]; 
于 2012-10-06T08:27:10.230 に答える
0

ヘッダーにいくつかのヘッダーをインポートします。

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

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

[self dismissMoviePlayerViewControllerAnimated];

リソースを早期に終了した場合は、NotificationManagerを使用してMPMoviePlayerPlaybackDidFinishNotificationを監視することで、リソースをより早く解放できる可能性があります。

そしてまた

- (void)dealloc {
   [movie release], 
   movie = nil;
   [super dealloc];
}
于 2012-10-06T08:28:00.573 に答える