天天看點

詳細介紹下ios用MPMoviePlayerController來播放視訊

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

繼續閱讀