使用MPMoviePlayerViewController播放视频

今天使用网易公开课的时候发现,它的视频播放还不错,自己之前做的那个实在太卡,没有缓冲没有线程,于是乎就打算修改一下。

结合performselect使用线程感觉还是不错的。

 

 

头文件,

里面主要是一个标志位,一个MPMoviePlayerViewController。

//
//  PlayVideoViewController .h
//
//  Created by Leung Kinglok on 11-6-23.
//  Copyright 2011年 scnu. All rights reserved.
//

#import <UIKit/UIKit.h>

@class MPMoviePlayerViewController;
@interface PlayVideoViewController : UIViewController {
    MPMoviePlayerViewController *_moviePlayerController; 
    UIActivityIndicatorView *_activityIndicatorView;
    BOOL _isExit;
}

@property (nonatomic , retain) MPMoviePlayerViewController *moviePlayerController;
@property (nonatomic , retain) IBOutlet UIActivityIndicatorView *activityIndicatorView;

-(void)initWight;
-(IBAction)back;
@end

 

 

 

=====================================================================

====================部分实现文件==========================================

=====================================================================

=====================================================================

 

 


#import <MediaPlayer/MediaPlayer.h>

@implementation PlayVideoViewController

@synthesize moviePlayerController=_moviePlayerController;
@synthesize activityIndicatorView =_activityIndicatorView;

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self initWight];
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(didRotate)
                                                 name:@"UIDeviceOrientationDidChangeNotification" object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlayBackDidFinish:)
                                                 name:MPMoviePlayerPlaybackDidFinishNotification
                                               object:nil];
   
}


-(void)backOnMainThread
{
    self.navigationController.navigationBar.hidden=NO;
    [self.navigationController popViewControllerAnimated:NO];
    [self canPerformAction:@selector(loadingVideo) withSender:nil];
    if (_moviePlayerController!=nil)
    {
        [_moviePlayerController.moviePlayer stop];
    }

}

-(IBAction)back
{
    if ([NSThread isMainThread]) {
        [self performSelectorOnMainThread:@selector(backOnMainThread) withObject:nil waitUntilDone:NO];
    }
    _isExit=YES;
}


-(void)initWight
{
    [_activityIndicatorView startAnimating];
    _isExit=NO;
    self.navigationController.navigationBar.hidden=YES;
    if(_moviePlayerController!=nil)
    {
        NSLog(@"%d",[_moviePlayerController retainCount]);
        [_moviePlayerController release];
    }

    NSString *fileName = @"http://media1.gdou.com/test/011.mp4";
   
    NSURL *fileURL=[NSURL URLWithString:fileName];
    _moviePlayerController = [[MPMoviePlayerViewController alloc]
                              initWithContentURL:fileURL];
   
    [self performSelectorInBackground:@selector(loadingVideo) withObject:nil];
   
}

-(void)loadingVideo
{

    while (!(_moviePlayerController.moviePlayer.loadState==MPMovieLoadStatePlayable))
    {
        NSLog(@"loading");
        if (_isExit)
        {
        [self performSelectorOnMainThread:@selector(backOnMainThread) withObject:nil waitUntilDone:NO];
            break;
        }
    }
   
    if (!_isExit) {
        [self performSelectorOnMainThread:@selector(playVideoOnMainThread) withObject:nil waitUntilDone:NO];
    }

}

-(void)playVideoOnMainThread
{
    [_activityIndicatorView stopAnimating];
   
    [self.view addSubview:_moviePlayerController.view];
    //[self presentMoviePlayerViewControllerAnimated:_moviePlayerController];
   
    [_moviePlayerController.moviePlayer play];
    [_moviePlayerController setWantsFullScreenLayout:YES];
   
}


-(void)moviePlayBackDidFinish:(NSNotification*)notification
{
    [[NSNotificationCenter     defaultCenter]
     removeObserver:self
     name:MPMoviePlayerPlaybackDidFinishNotification
     object:nil];

    self.navigationController.navigationBar.hidden=NO;
    [_moviePlayerController setWantsFullScreenLayout:NO];
    [self.view removeFromSuperview];
    [self.navigationController popViewControllerAnimated:YES];
}

 

posted @ 2011-06-23 13:36  el.  阅读(1138)  评论(0编辑  收藏  举报