在iOS中播放視頻可以使用MediaPlayer.framework種的MPMoviePlayerController類來完成叔营,它支持本地視頻和網絡視頻播放。這個類實現了MPMediaPlayback協(xié)議甘耿,因此具備一般的播放器控制功能,例如播放工闺、暫停效拭、停止等。但是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
媒體播放狀態(tài)完残,枚舉類型:
MPMoviePlaybackStateStopped:停止播放
MPMoviePlaybackStatePlaying:正在播放
MPMoviePlaybackStatePaused:暫停
MPMoviePlaybackStateInterrupted:中斷
MPMoviePlaybackStateSeekingForward:向前定位
MPMoviePlaybackStateSeekingBackward:向后定位
@property (nonatomic, readonly) MPMovieLoadState loadState
網絡媒體加載狀態(tài),枚舉類型:
MPMovieLoadStateUnknown:位置類型
MPMovieLoadStatePlayable:
MPMovieLoadStatePlaythroughOK:這種狀態(tài)如果shouldAutoPlay為YES將自動播放
MPMovieLoadStateStalled:停滯狀態(tài)
@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
視頻縮放填充模式發(fā)生改變
MPMoviePlayerPlaybackDidFinishNotification
媒體播放完成或用戶手動退出,具體完成原因可以通過通知userInfo中的key為MPMoviePlayerPlaybackDidFinishReasonUserInfoKey的對象獲取
MPMoviePlayerPlaybackStateDidChangeNotification
播放狀態(tài)改變溜徙,可配合playbakcState屬性獲取具體狀態(tài)
MPMoviePlayerLoadStateDidChangeNotification
媒體網絡加載狀態(tài)改變
MPMoviePlayerNowPlayingMovieDidChangeNotification
當前播放的媒體內容發(fā)生改變
MPMoviePlayerWillEnterFullscreenNotification
將要進入全屏
MPMoviePlayerDidEnterFullscreenNotification
進入全屏后
MPMoviePlayerWillExitFullscreenNotification
將要退出全屏
MPMoviePlayerDidExitFullscreenNotification
退出全屏后
MPMoviePlayerIsAirPlayVideoActiveDidChangeNotification
當媒體開始通過AirPlay播放或者結束AirPlay播放
MPMoviePlayerReadyForDisplayDidChangeNotification
視頻顯示狀態(tài)改變
MPMovieMediaTypesAvailableNotification
確定了媒體可用類型后
MPMovieSourceTypeAvailableNotification
確定了媒體來源后
MPMovieDurationAvailableNotification
確定了媒體播放時長后
MPMovieNaturalSizeAvailableNotification
確定了媒體的實際尺寸后
MPMoviePlayerThumbnailImageRequestDidFinishNotification
縮略圖請求完成之后
MPMediaPlaybackIsPreparedToPlayDidChangeNotification
做好播放準備后
注意MPMediaPlayerController的狀態(tài)等信息并不是通過代理來和外界交互的湃缎,而是通過通知中心,因此從上面的列表中可以看到常用的一些通知蠢壹。由于MPMoviePlayerController本身對于媒體播放做了深度的封裝嗓违,使用起來就相當簡單:創(chuàng)建MPMoviePlayerController對象,設置frame屬性图贸,將MPMoviePlayerController的view添加到控制器視圖中蹂季。
MPMoviePlayerViewController
其實MPMoviePlayerController如果不作為嵌入視頻來播放(例如在新聞中嵌入一個視頻)冕广,通常在播放時都是占滿一個屏幕的,特別是在iPhone偿洁、iTouch上撒汉。因此從iOS3.2以后蘋果也在思考既然MPMoviePlayerController在使用時通常都是將其視圖view添加到另外一個視圖控制器中作為子視圖,那么何不直接創(chuàng)建一個控制器視圖內部創(chuàng)建一個MPMoviePlayerController屬性并且默認全屏播放涕滋,開發(fā)者在開發(fā)的時候直接使用這個視圖控制器睬辐。這個內部有一個MPMoviePlayerController的視圖控制器就是MPMoviePlayerViewController,它繼承于UIViewController宾肺。MPMoviePlayerViewController內部多了一個moviePlayer屬性和一個帶有url的初始化方法溯饵,同時它內部實現了一些作為模態(tài)視圖展示所特有的功能,例如默認是全屏模式展示锨用、彈出后自動播放丰刊、作為模態(tài)窗口展示時如果點擊“Done”按鈕會自動退出模態(tài)窗口等。