最近接觸到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來播放視訊的心得體會,再會!