en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

6.18.2012

取得 MPMoviePlayerController 的播放狀態與設定和記錄播放時間

延續之前的文章 使用 MPMoviePlayerController 播放影片 的說明,我們已經知道 MPMoviePlayerController 是在 MediaPlayer Framework 中一個控制影片播放的 Controller,它提供一個通用且制式的影片播放介面供使用者操作,相信你一定在很多地方都看過它的應用,而本篇文章將示範如何取得 MPMoviePlayerController 在播放影片時的種種狀態。


取得播放狀態
由於 MPMoviePlayerController 並沒有提供相關的 Protocol 協定,讓我們可以改寫或是實作對應狀態下的處理,因此我們必須透過 NSNotificationCenter 來取得 MPMoviePlayerController 在播放狀態變更下的通知,你可以使用 MPMoviePlayerPlaybackStateDidChangeNotification 名稱註冊來取得通知,其程式碼如下。
[[NSNotificationCenter defaultCenter] addObserver:self
        selector:@selector(playbackStateChanged)
            name:MPMoviePlayerPlaybackStateDidChangeNotification
          object:player];

上述程式碼,當我們的 player(MPMoviePlayerController)在遭遇到播放狀態變更的同時,就會通知我們所指定的方法函式 playbackStateChanged,接著我們就可以在此方法函式中取得目前的播放狀態並加以辨識。
- (void) playbackStateChanged {

    //取得目前狀態
    MPMoviePlaybackState playbackState = [player playbackState];

    //狀態類型
    switch (playbackState) {
        case MPMoviePlaybackStateStopped:
            NSLog(@"停止");
            break;

        case MPMoviePlaybackStatePlaying:
            NSLog(@"播放中");
            break;

        case MPMoviePlaybackStatePaused:
            NSLog(@"暫停");
            break;

        case MPMoviePlaybackStateInterrupted:
            NSLog(@"播放被中斷");
            break;

        case MPMoviePlaybackStateSeekingForward:
            NSLog(@"往前快轉");
            break;

        case MPMoviePlaybackStateSeekingBackward:
            NSLog(@"往後快轉");
            break;

        default:
            NSLog(@"無法辨識的狀態");
            break;
    }
}


設定和記錄播放時間
在設定播放時間的部份,可以使用 NSTimeInterval 型態的浮點數,配合 setInitialPlaybackTime: 方法函式來改變影片起始的播放位置,同樣地,你可以使用 currentPlaybackTime 方法函式來取得目前播放的時間。
//取得目前播放時間
//NSTimeInterval initialPlaybackTime = [player currentPlaybackTime];

//設定起始的播放時間
//[player setInitialPlaybackTime:initialPlaybackTime];


ps:記錄與設定播放時間不要寫在同一個函式中,這樣有可能會導致設定失效,例如設定播放時間為 5.0,接著馬上記錄播放的時間,這樣得到的紀錄播放時間可能會是 0.0。





沒有留言:

張貼留言