您的位置:首页 > 产品设计 > 产品经理

使用MPMoviePlayerViewController播放视频

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

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: