AVPlayer ve MPMoviePlayerController farklılıkları [kapalı]


87

Videoları oynatması gereken bir iPhone uygulaması geliştiriyorum. Şimdiye kadar bunu başarmak için en az iki API olduğunu öğrendim; AVPlayerve MPMoviePlayerController.

Ana farklar nelerdir?


4
Fikir temelli cevaplar üretmediğinden emin olmak için bu soruyu yeniden ifade etmeye çalıştım.
Till

Yanıtlar:


173

NOT iOS9 itibariyle, Apple MPMoviePlayerController'ı kullanımdan kaldırmıştır:

MPMoviePlayerController sınıfı resmi olarak iOS 9'da kullanımdan kaldırılmıştır. (MPMoviePlayerViewController sınıfı da resmi olarak kullanımdan kaldırılmıştır.) İOS 9 ve sonraki sürümlerde video içeriğini oynatmak için bunun yerine AVKit çerçevesinden AVPictureInPictureController veya AVPlayerViewController sınıfını veya WebKit .WebView sınıfını kullanın.

MPMoviePlayerController referansından kopyalandı .

AVPlayer

AVPlayersize çok daha fazla esneklik sağlar, ancak yeterince belgelenmemiştir. Bu API'yi kullanmak sizi kendi kullanıcı arayüzünüzü oluşturmaya zorlar. AVFoundation(sizi getiren çerçeve AVPlayer) genel olarak kullanıcı (kodlayıcı) için biraz zordur çünkü sizi durumları kontrol etmek için Key-Value Observing'i çok kullanmaya zorlar . KVO kavramı harika, beni yanlış anlamayın - yine de deneyimsiz geliştiriciler için öğrenmek acı verici olabilir. Apple bazen hangi özelliklerin gerçekte KVO uyumlu olduğu hakkındaki bilgileri atlar ve bu sizi bazı deneyler yapmaya zorlar.

Bir büyük avantajı AVPlayerover MPMoviePlayerControllerörneğin, onun genişletilmiş versiyonu olacağını AVQueuePlayerbu bir çoklu film kaynaklarının oynatma boşluksuz yapmak mümkün olduğu gibi. Diğer bir avantaj, AVFoundationanında film oluşturma / kodlama / dönüştürme gibi şeyler yapmanıza olanak tanıyan zengin özellikli çerçevedir.

Bunun bir başka büyük avantajı da AVPlayerbirden fazla video kaynağını aynı anda (örneğin yan yana) sorunsuz bir şekilde oynatabilmenizdir.

MPMoviePlayerController

MPMoviePlayerControllerkullanımı kolaydır ve çoğu ihtiyacı kutudan çıkarır. Bu API'yi kullanmak size iyi görünümlü ve genel olarak anlaşılan bir kullanıcı arayüzü sağlayacaktır. Ancak kullanıcı arayüzü devre dışı bırakılabilir veya özel bir tanesiyle değiştirilebilir.

Durum değişiklikleri için, normal Uygulamanın ihtiyaç duyduğu her şeyi kapsayan MPMoviePlayerControllerbirkaç tane kullanır NSNotifications.

Kaputun altında, MPMoviePlayerControllerüstüne inşa edilir AVPlayer- ama bu aslında kullanıcıya tamamen şeffaftır - kullanırken o katmana erişiminiz yoktur MPMoviePlayerController.

MPMoviePlayerControlleraltlığı AVPlayertek bir örnek olarak kullanır , bu nedenle MPMoviePlayerControllervideoları eşzamanlı olarak oynatmak için birden fazla örnek kullanmak mümkün değildir .

Öte yandan, işlevselliğini MPMoviePlayerControllerkendi özelliklerinizle genişletmeye çalıştığınız anda , kod hızla çirkinleşir - örneğin, uygun bir açlık tespiti gibi şeyleri örtmek için muhtemelen birden fazla zamanlayıcı kullanmaya başlayacaksınız (aslında, bu özellik dahil edilmiştir. iOS5'in bu sınıfın sürümüne), özel kullanıcı arayüzü güncellemeleri, ... Veya oynatıcı hala ön arabelleğe alırken oynatmayı zarif bir şekilde iptal etmek gibi şeyleri kapsamaya çalışan bir avuç durum özelliğine sahip olabilirsiniz.


Kişisel Öneri

Yapmaktan zevk aldığım Uygulamanın ihtiyaçlarına bağlı olarak ikisini de kullandım ve her ikisini de kullanmaya devam edeceğim. Çoğu (basit) proje için, kullanımı çok basit olduğundan ve yalnızca birkaç satır kodla tam teşekküllü bir medya oynatıcıya sahip olduğunuz için MPMoviePlayerControllerover kullanmanızı tavsiye ederim AVPlayer. Ve eğer medya oynatma konusundaki talepleriniz daha da basitse, bir göz atın MPMoviePlayerViewController(View- part'a dikkat edin).


2
AVPlayer ayrıca otomatik olarak katman animasyonlarını kullanmanıza izin verir. Core Animation'ı arka planda çalıştırmak istiyorsanız, MPMoviePlayerController kullanmayın, ancak bunları etkinleştirmek için bir ayar olabilir, sadece CALayer şeyler kullanıyorsanız bunun farkında olun
Stephen J

3
Hayır. Cevap doğru. MPMoviePlayerController UI edebilir devre ve veya özel onun yerini alır.
Dave Batton

1
@Besi hayır, yazıldığı şekliyle tamamen doğru - kesinlikle devre dışı bırakılabilir (MPMovieControlStyleNone kullanılarak) ve dolayısıyla, kendi görünümünüzü MPMoviePlayerController'ın bir kardeşi olarak veya doğrudan onun görünümüne eklemenizi engelleyen hiçbir şey olmadığı için değiştirilebilir backgroundView.
Till

8
İOS 9 itibariyle MPMoviePlayerController kullanımdan kaldırılmıştır ve bu nedenle gelecekteki projeler için AVPlayer'ı kullanmalısınız
lewis

1
Bu çok değerli bir bilgi @ lewis42 - bunu eski gönderilerime ekleyeceğim :)
kadar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.