MPMediaPlayerController

原创 2015年11月20日 20:50:18


iOS中播放视频可以使用MediaPlayer.framework种的MPMoviePlayerController类来完成,它支持本地视频和网络视频播放。这个类实现了MPMediaPlayback协议,因此具备一般的播放器控制功能,例如播放、暂停、停止等。但是MPMediaPlayerController自身并不是一个完整的视图控制器,如果要在UI中展示视频需要将view属性添加到界面中。下面列出了MPMoviePlayerController的常用属性和方法:

属性

说明

@property (nonatomic, copy) NSURL *contentURL

播放媒体URL,这个URL可以是本地路径,也可以是网络路径

@property (nonatomic, readonly) UIView *view

播放器视图,如果要显示视频必须将此视图添加到控制器视图中

@property (nonatomic, readonly) UIView *backgroundView

播放器背景视图

@property (nonatomic, readonly) MPMoviePlaybackState playbackState

媒体播放状态,枚举类型:

MPMoviePlaybackStateStopped:停止播放

MPMoviePlaybackStatePlaying:正在播放

MPMoviePlaybackStatePaused:暂停

MPMoviePlaybackStateInterrupted:中断

MPMoviePlaybackStateSeekingForward:向前定位

MPMoviePlaybackStateSeekingBackward:向后定位

@property (nonatomic, readonly) MPMovieLoadState loadState

网络媒体加载状态,枚举类型:

MPMovieLoadStateUnknown:位置类型

MPMovieLoadStatePlayable

MPMovieLoadStatePlaythroughOK:这种状态如果shouldAutoPlayYES将自动播放

MPMovieLoadStateStalled:停滞状态

@property (nonatomic) MPMovieControlStyle controlStyle

控制面板风格,枚举类型:

MPMovieControlStyleNone:无控制面板 

MPMovieControlStyleEmbedded:嵌入视频风格 

MPMovieControlStyleFullscreen:全屏 

MPMovieControlStyleDefault:默认风格

@property (nonatomic) MPMovieRepeatMode repeatMode;

重复播放模式,枚举类型:

MPMovieRepeatModeNone:不重复,默认值

MPMovieRepeatModeOne:重复播放

@property (nonatomic) BOOL shouldAutoplay

当网络媒体缓存到一定数据时是否自动播放,默认为YES

@property (nonatomic, getter=isFullscreen) BOOL fullscreen

是否全屏展示,默认为NO,注意如果要通过此属性设置全屏必须在视图显示完成后设置,否则无效

@property (nonatomic) MPMovieScalingMode scalingMode

视频缩放填充模式,枚举类型:

MPMovieScalingModeNone:不进行任何缩放

MPMovieScalingModeAspectFit:固定缩放比例并且尽量全部展示视频,不会裁切视频

MPMovieScalingModeAspectFill:固定缩放比例并填充满整个视图展示,可能会裁切视频

MPMovieScalingModeFill:不固定缩放比例压缩填充整个视图,视频不会被裁切但是比例失衡

@property (nonatomic, readonly) BOOL readyForDisplay

是否有相关媒体被播放

@property (nonatomic, readonly) MPMovieMediaTypeMask movieMediaTypes

媒体类别,枚举类型:

MPMovieMediaTypeMaskNone:未知类型

MPMovieMediaTypeMaskVideo:视频

MPMovieMediaTypeMaskAudio:音频

@property (nonatomic) MPMovieSourceType movieSourceType

媒体源,枚举类型:

MPMovieSourceTypeUnknown:未知来源

MPMovieSourceTypeFile:本地文件

MPMovieSourceTypeStreaming:流媒体(直播或点播)

@property (nonatomic, readonly) NSTimeInterval duration

媒体时长,如果未知则返回0

@property (nonatomic, readonly) NSTimeInterval playableDuration

媒体可播放时长,主要用于表示网络媒体已下载视频时长

@property (nonatomic, readonly) CGSize naturalSize

视频实际尺寸,如果未知则返回CGSizeZero

@property (nonatomic) NSTimeInterval initialPlaybackTime

起始播放时间

@property (nonatomic) NSTimeInterval endPlaybackTime

终止播放时间

@property (nonatomic) BOOL allowsAirPlay

是否允许无线播放,默认为YES

@property (nonatomic, readonly, getter=isAirPlayVideoActive) BOOL airPlayVideoActive

当前媒体是否正在通过AirPlay播放

@property(nonatomic, readonly) BOOL isPreparedToPlay

是否准备好播放

@property(nonatomic) NSTimeInterval currentPlaybackTime

当前播放时间,单位:秒

@property(nonatomic) float currentPlaybackRate

当前播放速度,如果暂停则为0,正常速度为1.0,非0数据表示倍率

对象方法

说明

- (instancetype)initWithContentURL:(NSURL *)url

使用指定的URL初始化媒体播放控制器对象

- (void)setFullscreen:(BOOL)fullscreen animated:(BOOL)animated

设置视频全屏,注意如果要通过此方法设置全屏则必须在其视图显示之后设置,否则无效

- (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option

获取在指定播放时间的视频缩略图,第一个参数是获取缩略图的时间点数组;第二个参数代表时间点精度,枚举类型:

MPMovieTimeOptionNearestKeyFrame:时间点附近

MPMovieTimeOptionExact:准确时间

- (void)cancelAllThumbnailImageRequests

取消所有缩略图获取请求

- (void)prepareToPlay

准备播放,加载视频数据到缓存,当调用play方法时如果没有准备好会自动调用此方法

- (void)play

开始播放

- (void)pause

暂停播放

- (void)stop

停止播放

- (void)beginSeekingForward

向前定位

- (void)beginSeekingBackward

向后定位

- (void)endSeeking

停止快进/快退

通知

说明

MPMoviePlayerScalingModeDidChangeNotification

视频缩放填充模式发生改变

MPMoviePlayerPlaybackDidFinishNotification

媒体播放完成或用户手动退出,具体完成原因可以通过通知userInfo中的keyMPMoviePlayerPlaybackDidFinishReasonUserInfoKey的对象获取

MPMoviePlayerPlaybackStateDidChangeNotification

播放状态改变,可配合playbakcState属性获取具体状态

MPMoviePlayerLoadStateDidChangeNotification

媒体网络加载状态改变

MPMoviePlayerNowPlayingMovieDidChangeNotification

当前播放的媒体内容发生改变

MPMoviePlayerWillEnterFullscreenNotification

将要进入全屏

MPMoviePlayerDidEnterFullscreenNotification

进入全屏后

MPMoviePlayerWillExitFullscreenNotification

将要退出全屏

MPMoviePlayerDidExitFullscreenNotification

退出全屏后

MPMoviePlayerIsAirPlayVideoActiveDidChangeNotification

当媒体开始通过AirPlay播放或者结束AirPlay播放

MPMoviePlayerReadyForDisplayDidChangeNotification

视频显示状态改变

MPMovieMediaTypesAvailableNotification

确定了媒体可用类型后

MPMovieSourceTypeAvailableNotification

确定了媒体来源后

MPMovieDurationAvailableNotification

确定了媒体播放时长后

MPMovieNaturalSizeAvailableNotification

确定了媒体的实际尺寸后

MPMoviePlayerThumbnailImageRequestDidFinishNotification

缩略图请求完成之后

MPMediaPlaybackIsPreparedToPlayDidChangeNotification

做好播放准备后


注意MPMediaPlayerController的状态等信息并不是通过代理来和外界交互的,而是通过通知中心,因此从上面的列表中可以看到常用的一些通知。由于MPMoviePlayerController本身对于媒体播放做了深度的封装,使用起来就相当简单:创建MPMoviePlayerController对象,设置frame属性,将MPMoviePlayerControllerview添加到控制器视图中。

MPMoviePlayerViewController

其实MPMoviePlayerController如果不作为嵌入视频来播放(例如在新闻中嵌入一个视频),通常在播放时都是占满一个屏幕的,特别是在iPhoneiTouch上。因此从iOS3.2以后苹果也在思考既然MPMoviePlayerController在使用时通常都是将其视图view添加到另外一个视图控制器中作为子视图,那么何不直接创建一个控制器视图内部创建一个MPMoviePlayerController属性并且默认全屏播放,开发者在开发的时候直接使用这个视图控制器。这个内部有一个MPMoviePlayerController的视图控制器就是MPMoviePlayerViewController,它继承于UIViewControllerMPMoviePlayerViewController内部多了一个moviePlayer属性和一个带有url的初始化方法,同时它内部实现了一些作为模态视图展示所特有的功能,例如默认是全屏模式展示、弹出后自动播放、作为模态窗口展示时如果点击“Done”按钮会自动退出模态窗口等。


版权声明:VIC

深入Android MediaPlayer的使用方法详解

1)如何获得MediaPlayer实例: 可以使用直接new的方式: MediaPlayer mp = new MediaPlayer(); 也可以使用create的方式,如: MediaPl...
  • u014365133
  • u014365133
  • 2016年11月25日 09:25
  • 7695

MPMoviePlayerController的一些用法

1.计算使用MPMoviePlayerController播放的视频的长度有两种方法: 第一种方法 NSDictionary *opts = [NSDictionary diction...
  • zzfsuiye
  • zzfsuiye
  • 2012年08月02日 21:42
  • 11751

MPMediaPlayerController

在iOS中播放视频可以使用MediaPlayer.framework种的MPMoviePlayerController类来完成,它支持本地视频和网络视频播放。这个类实现了MPMediaPlayback...
  • Vic__li
  • Vic__li
  • 2015年11月20日 20:50
  • 606

MediaPlayer的使用

游戏中的背景音乐用到了MediaPlayer。使用MediaPlayer播放背景音乐有2中方法,一种是通过create来创建MediaPlayer对象,一种是通过new 来创建对象,通过create创...
  • c_boy_lu
  • c_boy_lu
  • 2015年12月01日 20:52
  • 425

视频播放(MPMediaPlayerController,AVPlayer,AVPlayerViewcontroller) for iOS

和音频播放一样,ios也提供个很多的API。如mediaPlayer.framework下的MPMediaPlayerController、AVFounditon.framework下的AVPlaye...
  • xiaonaiping061
  • xiaonaiping061
  • 2015年10月27日 15:13
  • 8171

使用MPMediaPlayerController播放视频提示[NSURL initFileURLWithPath:]: nil string parameter错误的解决办法

错误的原因是视频不在应用的bundle里,解决办法如下: 1.检查文件是否在源代码的备份中 2.检查项目是否有对应文件的索引(如果文件名显示为红色则没有) 3.检查“TARGET”->“Buil...
  • u011385024
  • u011385024
  • 2014年02月13日 10:52
  • 1942

视频播放(MPMediaPlayerController,AVPlayer,AVPlayerViewcontroller) for iOS

和音频播放一样,ios也提供个很多的API。如mediaPlayer.framework下的MPMediaPlayerController、AVFounditon.framework下的AVPlaye...
  • yyc123yyc456yyc
  • yyc123yyc456yyc
  • 2016年02月19日 11:10
  • 794

MediaPlayer

类概述         public class MediaPlayer         MediaPlayer可控制播放音乐/视频和网络流。可以从VideoView找到使用这个类的方法。 这个...
  • wufen1103
  • wufen1103
  • 2012年10月18日 14:23
  • 9359

深入Android MediaPlayer的使用方法详解

1)如何获得MediaPlayer实例: 可以使用直接new的方式: MediaPlayer mp = new MediaPlayer(); 也可以使用create的方式,如: MediaPl...
  • u011558902
  • u011558902
  • 2014年11月11日 16:45
  • 24872

MediaPlayer

方法: 装载音频文件: StaticMediaPlayer  1.create(Context context,Uriuri,SurfaceHolder holder)                ...
  • love_missROU
  • love_missROU
  • 2016年04月19日 17:10
  • 1080
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MPMediaPlayerController
举报原因:
原因补充:

(最多只允许输入30个字)