今天使用网易公开课的时候发现,它的视频播放还不错,自己之前做的那个实在太卡,没有缓冲没有线程,于是乎就打算修改一下。
结合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];
}