2011-11-16 74 views
85

我正在開發一個需要播放視頻的iPhone應用程序。 到目前爲止,我瞭解到至少有兩個API用於實現此目的; AVPlayerMPMoviePlayerControllerAVPlayer和MPMoviePlayerController的區別

主要區別是什麼?

+4

試圖重寫這個問題,以確保它不會產生意見的答案。 – Till

回答

172

注意爲iOS9的,蘋果已經過時了的MPMoviePlayerController:

的的MPMoviePlayerController類在iOS版正式9.不推薦使用(該MPMoviePlayerViewController類也正式棄用)要在iOS版9播放視頻內容以後,請使用AVKit框架中的AVPictureInPictureController或AVPlayerViewController類或WebKit中的WKWebView類。

複製自MPMoviePlayerController reference

AVPlayer

AVPlayer爲您提供了更多的靈活性,但記錄很糟糕。使用這個API將迫使你創建你自己的用戶界面。 AVFoundation(帶給你AVPlayer的框架)通常在用戶(編碼器)上有點困難,因爲它迫使你使用Key-Value Observing很多來檢查狀態。 KVO的概念很棒,不要誤解我的意思 - 對於沒有經驗的開發者來說,學習可能會很痛苦。 Apple有時會忽略關於哪些屬性實際上符合KVO的信息,這會迫使您做一些實驗。

AVPlayerMPMoviePlayerController的一大優勢是例如其擴展版本AVQueuePlayer,因爲人們可以對多個電影源進行無間隙回放。 另一個優勢當然是功能豐富的AVFoundation框架允許您執行諸如動畫電影合成/編碼/轉換等操作。

AVPlayer的另一個巨大優勢是,您可能實際上同時播放多個視頻源(例如,並排)而沒有任何問題。

MPMoviePlayerController

MPMoviePlayerController易於使用,涵蓋最需要開箱。使用這個API會給你一個很好看和通常理解的UI。然而,用戶界面可以被禁用或者用自定義替換。

對於狀態更改,MPMoviePlayerController使用幾個NSNotifications覆蓋常規應用程序所需的一切。

在引擎蓋下,MPMoviePlayerController建立在AVPlayer之上 - 但實際上對用戶完全透明 - 您在使用MPMoviePlayerController時無法訪問該圖層。

MPMoviePlayerController使用底層AVPlayer作爲單例實例,因此不可能同時使用多個MPMoviePlayerController實例來播放視頻。另一方面,只要您試圖用自己的功能擴展MPMoviePlayerController的功能,代碼就會很快變得糟糕 - 例如,你可能會開始使用多個定時器來覆蓋諸如正確的飢餓檢測(實際上,該功能被納入iOS5的這個類的版本),自定義UI更新等......或者你可能最終只有少數狀態這些屬性試圖覆蓋像播放器仍在預緩衝時那樣優雅地放棄播放的事物。


個人建議

我都用了,我會繼續同時使用,這取決於應用程序的需要,我很高興地建立。 對於大多數(簡單)項目,我推薦使用MPMoviePlayerController而不是AVPlayer,因爲它使用起來非常簡單,只需幾行代碼即可獲得完整的媒體播放器。如果您對媒體播放的要求更加簡單,請查看MPMoviePlayerViewController(請注意查看部分)。

+0

+1感謝您澄清此! – bentford

+2

AVPlayer還自動讓您使用圖層動畫。如果你想在後臺運行核心動畫,不要使用MPMoviePlayerController,雖然它可能有一個設置來啓用它們,但要注意如果你使用CALayer的東西 –

+0

不應該是這樣的:然而用戶界面**不能**被禁用或用自定義替換? – Besi

相關問題