转:iphone之MPMoviePlayer 视频播放
iphone的视频播放官方的例子有问题。这次是费了比较长的时间。
原因是在sdk3.2以后。视频这一块官方有很大的改动造成的。
远程视频:
本地视频:
首先需要引入视频包;
代码如下:
#import<UIKit/UIKit.h>
#import<MediaPlayer/MediaPlayer.h>
@interface View24 :UIViewController
{
//sdk3.2以后
MPMoviePlayerViewController *_moviePlayViewController;
//sdk3.2以前
MPMoviePlayerController *_moviePlayerController;
}
//远程视频事件
-(IBAction) playURLVideo;
//本地视频事件
-(IBAction) playFileVideo;
@property (nonatomic,retain) MPMoviePlayerViewController*_moviePlayViewController;
@property (nonatomic,retain) MPMoviePlayerController*_moviePlayerController;
-(void)initAndPlay:(NSString*)videoURL;
@end
//本地视频事件
-(IBAction) playFileVideo
{//此方法只是 3。2以后的方法
NSString *path=[[NSBundle mainBundle] pathForResource:@"sophie" ofType:@"mov"];
NSURL *url=[[NSURL alloc] initFileURLWithPath:path];
MPMoviePlayerViewController*tmpMoviePlayViewController=[[MPMoviePlayerViewControlleralloc] initWithContentURL:url];
if(tmpMoviePlayViewController)
{
self._moviePlayViewController=tmpMoviePlayViewController;
[selfpresentMoviePlayerViewControllerAnimated:_moviePlayViewController];
_moviePlayViewController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[_moviePlayViewController.moviePlayer play];
}
[tmpMoviePlayViewController release];
[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(playbackDidFinish) name:MPMoviePlayerPlaybackDidFinishNotificationobject:nil];
}
//远程视频事件
-(IBAction) playURLVideo
{
NSString *videoPath=@"http://www.subfurther.com/video/running-start-iphone.m4v";
if (videoPath == NULL)
return;
[self initAndPlay:videoPath];
}
-(void)initAndPlay:(NSString*)videoURL
{
if([videoURLrangeOfString:@"http://"].location!=NSNotFound||[videoURL rangeOfString:@"https://"].location!=NSNotFound)
{
NSURL *URL = [[NSURL alloc] initWithString:videoURL];
if (URL) {
if ([[[UIDevice currentDevice] systemVersion] doubleValue]>= 3.2)
{//3。2以后
MPMoviePlayerViewController*tmpMoviePlayViewController=[[MPMoviePlayerViewControlleralloc] initWithContentURL:URL];
if(tmpMoviePlayViewController)
{
self._moviePlayViewController=tmpMoviePlayViewController;
[selfpresentMoviePlayerViewControllerAnimated:_moviePlayViewController];
_moviePlayViewController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[_moviePlayViewController.moviePlayer play];
}
[tmpMoviePlayViewController release];
}
else if([[[UIDevice currentDevice] systemVersion] doubleValue]< 3.2)
{//3。2以前
MPMoviePlayerController*tmpMoviePlayController=[[MPMoviePlayerControlleralloc] initWithContentURL:URL];
if (tmpMoviePlayController)
{
self._moviePlayerController=tmpMoviePlayController;
[_moviePlayerControllerplay];
}
[tmpMoviePlayController release];
}
//视频播放完成通知
[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(playbackDidFinish) name:MPMoviePlayerPlaybackDidFinishNotificationobject:nil];
}
[URLrelease];
}
}
//视频播放完成后事件
-(void) playbackDidFinish
{
[[NSNotificationCenter defaultCenter] removeObserver:selfname:MPMoviePlayerPlaybackDidFinishNotificationobject:nil];
if(_moviePlayViewController)
{
[selfdismissMoviePlayerViewControllerAnimated];
[self._moviePlayViewController.moviePlayer stop];
_moviePlayViewController.moviePlayer.initialPlaybackTime=-1.0;
[_moviePlayViewController release];
_moviePlayViewController=nil;
}
if(_moviePlayerController)
{
[self._moviePlayerController stop];
_moviePlayerController.initialPlaybackTime = -1.0;
[_moviePlayerController release];
_moviePlayerController= nil;
}
}