最近接触到ios播放视频这方面,顺便学习了一下MPMoviePlayerController这个属性,在ios3.2以后就很少作为单独的类来进行视频播放了,ios3.2以上版本,它是作为MPMoviePlayerViewController内部的一个属性来使用,在网上找了不少资料和博客来参考,感觉这些材料都是比较旧的,也不是很详细,因为最近还算有空,就整理了一下最近项目时在控制器里用到MPMoviePlayerController属性的一些心得:(是我自己整理的一些笔记,因为涉及还不是很深,大家适当参考)
视频播放:
视频播放有几个类可以实现,其中最适合用来播放视频的就是MPMoviePlayerController(在xcode5.0以上版本后需要将其创建的变量设置为全局才能正常播放),要调用该类要#import<MediaPlayer/MediaPlayer.h>的头文件,每次通过MPMoviePlayerController创建的视频变量使用完之后都要进行销毁(非arc),MPMoviePlayerController里面包含了很多通知方法用来监听视频对象,例如:(整理我觉得比较常用的几个,前面两个我觉得最重要)
MPMoviePlayerPlaybackDidFinishNotification
当电影播放完毕或者用户按下了Done按钮后发出。
MPMoviePlayerNowPlayingMovieDidChangeNotification
当电影开始播放时调用的通知方法,当你需要视频开始播放时实现什么功能你可以使用。
MPMoviePlayerContentPreloadDidFinishNotification
当电影播放器结束对内容的预加载后发出。因为内容可以在仅加载了一部分的情况下播放,所以这个通知可能在已经播放后才发出。
MPMoviePlayerScallingModeDidChangedNotification
当用户改变了电影的缩放模式后发出。用户可以点触缩放图标,在全屏播放和窗口播放之间切换。
使用MPMoviePlayerController实现视频的播放具体步骤:
总体的方法实现:
#pragma mark -播放视频-
- (void)playVideo:(NSString *)filePath
{
// 1.获得视频播放的URL
NSURL *videoUrl = [NSURL fileURLWithPath:filePath];
NSLog(@"%@",videoUrl);
// 2.更加url创建视频变量
_video = [[MPMoviePlayerController alloc] initWithContentURL:videoUrl];
_video.controlStyle =MPMovieControlStyleFullscreen;
// 设置视频frame
_video.view.frame =self.bgImgView.frame;
[self.viewaddSubview:_video.view];
// 3.注册一个播放结束的通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(myMovieFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:_video];
// 4.注册一个正在播放的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(isPlayingMovie:) name:MPMoviePlayerNowPlayingMovieDidChangeNotification object:_video];
// 5.开启播放视频
[_video play];
}
1.先定义一个类型的全局变量_movie(我觉得这步很重要)
@interface TKVideo2ViewController ()
{
MPMoviePlayerController *_video;
}
@end
2.通过url播放视频方法:
// 1.获得视频播放的URL
NSURL *videoUrl = [NSURL fileURLWithPath:filePath];
// 2.根据url创建视频变量
_video = [[MPMoviePlayerController alloc] initWithContentURL:videoUrl];
_video.controlStyle =MPMovieControlStyleFullscreen;
_video.view.frame =self.bgImgView.frame;
[self.viewaddSubview:_video.view];
// 3.开启播放视频
[_video play];
3.注册一个播放结束的监听者:
// 3.注册一个播放结束的通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(myMovieFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:_video];
3.1.对应实现的方法:
#pragma mark -当视频播放完毕释放对象-
- (void)myMovieFinishedCallback:(NSNotification*)notify
{
// 1.视频播放对象
MPMoviePlayerController* theVideo = [notifyobject];
// 2.销毁播放通知
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:theVideo];
// 播放结束移除视频对象(非arc记得release!!)
[theVideo.view removeFromSuperview];
// 这个代理方法就是我自己在视频播放结束后执行的方法
[self.delegateendingPlayMovie];
}
4注册一个开始播放的监听者
// 4.注册一个正在播放的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(isPlayingMovie:) name:MPMoviePlayerNowPlayingMovieDidChangeNotification object:_video];
4.1.实现对应的方法:
#pragma mark -正在播放视频时调用方法-
- (void)isPlayingMovie:(NSNotification *)notify
{
MPMoviePlayerController *theVideo = [notifyobject];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerNowPlayingMovieDidChangeNotification object:theVideo];
// 这个代理方法就是我自己在视频开始播放时执行的方法
[self.delegateplayingMovie:theVideo];
}
还想给大家介绍的一个就是视频的controlStyle属性,他是一个枚举类型,它使视频的播放类型,我简单介绍这4个类型:(这是xcode头文件的描述,我自己也试了一下)
MPMovieControlStyleNone, // 没有任何控制操作
MPMovieControlStyleEmbedded, // 默认普通播放,但是有暂停和全屏的控制按钮
MPMovieControlStyleFullscreen, // 默认全屏播放,有一个结束播放的done按钮,还有暂停按钮、下一个视频和上一个视频的切换按钮
MPMovieControlStyleDefault = MPMovieControlStyleEmbedded // 默认的播放控制模式就是跟上面的embedded一样的意思
好了,我就给大家介绍到这里了,我把我觉得挺重要的两个通知实现了, 其他通知方法都是类似的,自己可以一个个的去验证,下次有空的时候,我会写一下直接使用MPMoviePlayerViewController来播放视频的心得体会,再会!