無標(biāo)題文章

在iOS中播放視頻可以使用MediaPlayer.framework種的MPMoviePlayerController類來完成,它支持本地視頻和網(wǎng)絡(luò)視頻播放。這個(gè)類實(shí)現(xiàn)了MPMediaPlayback協(xié)議,因此具備一般的播放器控制功能,例如播放、暫停、停止等。但是MPMediaPlayerController自身并不是一個(gè)完整的視圖控制器,如果要在UI中展示視頻需要將view屬性添加到界面中。下面列出了MPMoviePlayerController的常用屬性和方法:

屬性

說明

@property (nonatomic, copy) NSURL *contentURL

播放媒體URL,這個(gè)URL可以是本地路徑,也可以是網(wǎng)絡(luò)路徑

@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

網(wǎng)絡(luò)媒體加載狀態(tài),枚舉類型:

MPMovieLoadStateUnknown:位置類型

MPMovieLoadStatePlayable:

MPMovieLoadStatePlaythroughOK:這種狀態(tài)如果shouldAutoPlay為YES將自動播放

MPMovieLoadStateStalled:停滯狀態(tài)

@property (nonatomic) MPMovieControlStyle controlStyle

控制面板風(fēng)格,枚舉類型:

MPMovieControlStyleNone:無控制面板

MPMovieControlStyleEmbedded:嵌入視頻風(fēng)格

MPMovieControlStyleFullscreen:全屏

MPMovieControlStyleDefault:默認(rèn)風(fēng)格

@property (nonatomic) MPMovieRepeatMode repeatMode;

重復(fù)播放模式,枚舉類型:

MPMovieRepeatModeNone:不重復(fù),默認(rèn)值

MPMovieRepeatModeOne:重復(fù)播放

@property (nonatomic) BOOL shouldAutoplay

當(dāng)網(wǎng)絡(luò)媒體緩存到一定數(shù)據(jù)時(shí)是否自動播放,默認(rèn)為YES

@property (nonatomic, getter=isFullscreen) BOOL fullscreen

是否全屏展示,默認(rèn)為NO,注意如果要通過此屬性設(shè)置全屏必須在視圖顯示完成后設(shè)置,否則無效

@property (nonatomic) MPMovieScalingMode scalingMode

視頻縮放填充模式,枚舉類型:

MPMovieScalingModeNone:不進(jìn)行任何縮放

MPMovieScalingModeAspectFit:固定縮放比例并且盡量全部展示視頻,不會裁切視頻

MPMovieScalingModeAspectFill:固定縮放比例并填充滿整個(gè)視圖展示,可能會裁切視頻

MPMovieScalingModeFill:不固定縮放比例壓縮填充整個(gè)視圖,視頻不會被裁切但是比例失衡

@property (nonatomic, readonly) BOOL readyForDisplay

是否有相關(guān)媒體被播放

@property (nonatomic, readonly) MPMovieMediaTypeMask movieMediaTypes

媒體類別,枚舉類型:

MPMovieMediaTypeMaskNone:未知類型

MPMovieMediaTypeMaskVideo:視頻

MPMovieMediaTypeMaskAudio:音頻

@property (nonatomic) MPMovieSourceType movieSourceType

媒體源,枚舉類型:

MPMovieSourceTypeUnknown:未知來源

MPMovieSourceTypeFile:本地文件

MPMovieSourceTypeStreaming:流媒體(直播或點(diǎn)播)

@property (nonatomic, readonly) NSTimeInterval duration

媒體時(shí)長,如果未知則返回0

@property (nonatomic, readonly) NSTimeInterval playableDuration

媒體可播放時(shí)長,主要用于表示網(wǎng)絡(luò)媒體已下載視頻時(shí)長

@property (nonatomic, readonly) CGSize naturalSize

視頻實(shí)際尺寸,如果未知則返回CGSizeZero

@property (nonatomic) NSTimeInterval initialPlaybackTime

起始播放時(shí)間

@property (nonatomic) NSTimeInterval endPlaybackTime

終止播放時(shí)間

@property (nonatomic) BOOL allowsAirPlay

是否允許無線播放,默認(rèn)為YES

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

當(dāng)前媒體是否正在通過AirPlay播放

@property(nonatomic, readonly) BOOL isPreparedToPlay

是否準(zhǔn)備好播放

@property(nonatomic) NSTimeInterval currentPlaybackTime

當(dāng)前播放時(shí)間,單位:秒

@property(nonatomic) float currentPlaybackRate

當(dāng)前播放速度,如果暫停則為0,正常速度為1.0,非0數(shù)據(jù)表示倍率

對象方法

說明

- (instancetype)initWithContentURL:(NSURL *)url

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

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

設(shè)置視頻全屏,注意如果要通過此方法設(shè)置全屏則必須在其視圖顯示之后設(shè)置,否則無效

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

獲取在指定播放時(shí)間的視頻縮略圖,第一個(gè)參數(shù)是獲取縮略圖的時(shí)間點(diǎn)數(shù)組;第二個(gè)參數(shù)代表時(shí)間點(diǎn)精度,枚舉類型:

MPMovieTimeOptionNearestKeyFrame:時(shí)間點(diǎn)附近

MPMovieTimeOptionExact:準(zhǔn)確時(shí)間

- (void)cancelAllThumbnailImageRequests

取消所有縮略圖獲取請求

- (void)prepareToPlay

準(zhǔn)備播放,加載視頻數(shù)據(jù)到緩存,當(dāng)調(diào)用play方法時(shí)如果沒有準(zhǔn)備好會自動調(diào)用此方法

- (void)play

開始播放

- (void)pause

暫停播放

- (void)stop

停止播放

- (void)beginSeekingForward

向前定位

- (void)beginSeekingBackward

向后定位

- (void)endSeeking

停止快進(jìn)/快退

通知

說明

MPMoviePlayerScalingModeDidChangeNotification

視頻縮放填充模式發(fā)生改變

MPMoviePlayerPlaybackDidFinishNotification

媒體播放完成或用戶手動退出,具體完成原因可以通過通知userInfo中的key為MPMoviePlayerPlaybackDidFinishReasonUserInfoKey的對象獲取

MPMoviePlayerPlaybackStateDidChangeNotification

播放狀態(tài)改變,可配合playbakcState屬性獲取具體狀態(tài)

MPMoviePlayerLoadStateDidChangeNotification

媒體網(wǎng)絡(luò)加載狀態(tài)改變

MPMoviePlayerNowPlayingMovieDidChangeNotification

當(dāng)前播放的媒體內(nèi)容發(fā)生改變

MPMoviePlayerWillEnterFullscreenNotification

將要進(jìn)入全屏

MPMoviePlayerDidEnterFullscreenNotification

進(jìn)入全屏后

MPMoviePlayerWillExitFullscreenNotification

將要退出全屏

MPMoviePlayerDidExitFullscreenNotification

退出全屏后

MPMoviePlayerIsAirPlayVideoActiveDidChangeNotification

當(dāng)媒體開始通過AirPlay播放或者結(jié)束AirPlay播放

MPMoviePlayerReadyForDisplayDidChangeNotification

視頻顯示狀態(tài)改變

MPMovieMediaTypesAvailableNotification

確定了媒體可用類型后

MPMovieSourceTypeAvailableNotification

確定了媒體來源后

MPMovieDurationAvailableNotification

確定了媒體播放時(shí)長后

MPMovieNaturalSizeAvailableNotification

確定了媒體的實(shí)際尺寸后

MPMoviePlayerThumbnailImageRequestDidFinishNotification

縮略圖請求完成之后

MPMediaPlaybackIsPreparedToPlayDidChangeNotification

做好播放準(zhǔn)備后

注意MPMediaPlayerController的狀態(tài)等信息并不是通過代理來和外界交互的,而是通過通知中心,因此從上面的列表中可以看到常用的一些通知。由于MPMoviePlayerController本身對于媒體播放做了深度的封裝,使用起來就相當(dāng)簡單:創(chuàng)建MPMoviePlayerController對象,設(shè)置frame屬性,將MPMoviePlayerController的view添加到控制器視圖中。

MPMoviePlayerViewController

其實(shí)MPMoviePlayerController如果不作為嵌入視頻來播放(例如在新聞中嵌入一個(gè)視頻),通常在播放時(shí)都是占滿一個(gè)屏幕的,特別是在iPhone、iTouch上。因此從iOS3.2以后蘋果也在思考既然MPMoviePlayerController在使用時(shí)通常都是將其視圖view添加到另外一個(gè)視圖控制器中作為子視圖,那么何不直接創(chuàng)建一個(gè)控制器視圖內(nèi)部創(chuàng)建一個(gè)MPMoviePlayerController屬性并且默認(rèn)全屏播放,開發(fā)者在開發(fā)的時(shí)候直接使用這個(gè)視圖控制器。這個(gè)內(nèi)部有一個(gè)MPMoviePlayerController的視圖控制器就是MPMoviePlayerViewController,它繼承于UIViewController。MPMoviePlayerViewController內(nèi)部多了一個(gè)moviePlayer屬性和一個(gè)帶有url的初始化方法,同時(shí)它內(nèi)部實(shí)現(xiàn)了一些作為模態(tài)視圖展示所特有的功能,例如默認(rèn)是全屏模式展示、彈出后自動播放、作為模態(tài)窗口展示時(shí)如果點(diǎn)擊“Done”按鈕會自動退出模態(tài)窗口等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容