Perbedaan AVPlayer dan MPMoviePlayerController [tertutup]

87

Saya sedang mengembangkan aplikasi iPhone yang perlu memutar video. Sejauh ini, saya mengetahui bahwa setidaknya ada dua API untuk mencapai ini; AVPlayerdan MPMoviePlayerController.

Apa perbedaan utamanya?

suse
sumber
4
Mencoba mengubah pertanyaan ini untuk memastikan pertanyaan ini tidak menghasilkan jawaban berdasarkan opini.
Hingga

Jawaban:

173

CATATAN pada iOS9, Apple telah menghentikan MPMoviePlayerController:

Kelas MPMoviePlayerController secara resmi tidak digunakan lagi di iOS 9. (Kelas MPMoviePlayerViewController juga secara resmi tidak digunakan lagi.) Untuk memutar konten video di iOS 9 dan yang lebih baru, gunakan kelas AVPictureInPictureController atau AVPlayerViewController dari kerangka kerja AVKit, atau kelas WKWebView dari WebKit.

Disalin dari referensi MPMoviePlayerController .

AVPlayer

AVPlayermemberi Anda lebih banyak fleksibilitas tetapi kurang terdokumentasi dengan baik. Menggunakan API ini akan memaksa Anda untuk membuat UI Anda sendiri. AVFoundation(kerangka kerja yang membawa Anda AVPlayer) umumnya agak sulit bagi pengguna (pembuat kode) karena memaksa Anda untuk menggunakan Pengamatan Nilai-Kunci untuk memeriksa status. Konsep KVO sangat bagus, jangan salah paham - tetap saja, untuk developer yang tidak berpengalaman bisa jadi menyakitkan untuk mempelajarinya. Apple terkadang menghilangkan informasi tentang properti mana yang benar-benar sesuai dengan KVO dan yang akan memaksa Anda untuk melakukan beberapa eksperimen.

Salah satu keuntungan besar dari AVPlayerover MPMoviePlayerControllermisalnya adalah versi yang diperpanjang, AVQueuePlayerkarena versi tersebut dapat melakukan pemutaran tanpa jeda dari berbagai sumber film. Keuntungan lain tentu saja adalah AVFoundationkerangka kaya fitur yang memungkinkan Anda melakukan hal-hal seperti komposisi / encoding / konversi film secara on-the-fly.

Namun keuntungan besar lainnya AVPlayeradalah kenyataan bahwa Anda sebenarnya dapat memutar berbagai sumber video secara bersamaan (misalnya berdampingan) tanpa masalah.

MPMoviePlayerController

MPMoviePlayerControllermudah digunakan dan memenuhi sebagian besar kebutuhan di luar kotak. Menggunakan API ini akan memberi Anda tampilan yang bagus dan umum dipahami. Namun UI dapat dinonaktifkan dan atau diganti dengan yang khusus.

Untuk perubahan status, MPMoviePlayerControllergunakan beberapa yang NSNotificationsmencakup semua kebutuhan Aplikasi biasa.

Di balik terpal, MPMoviePlayerControllerdibangun di atas AVPlayer- tetapi itu benar-benar terjadi sepenuhnya transparan bagi pengguna - Anda tidak memiliki akses ke lapisan itu saat menggunakan MPMoviePlayerController.

MPMoviePlayerControllermenggunakan underlaying AVPlayersebagai instance tunggal, oleh karena itu tidak mungkin menggunakan beberapa instance MPMoviePlayerControlleruntuk memutar video secara bersamaan.

Di sisi lain, segera setelah Anda mencoba untuk memperluas fungsionalitas MPMoviePlayerControllerdengan fitur Anda sendiri, kode dengan cepat menjadi buruk - misalnya Anda mungkin akan mulai menggunakan beberapa timer untuk menutupi hal-hal seperti deteksi kelaparan yang tepat (sebenarnya, fitur itu disertakan ke versi iOS5 dari kelas ini), pembaruan UI khusus, ... Atau Anda mungkin akan memiliki lebih dari segelintir properti status yang mencoba menutupi hal-hal seperti membatalkan pemutaran dengan anggun saat pemutar masih melakukan pra-buffering.


Rekomendasi Pribadi

Saya telah menggunakan keduanya dan saya akan terus menggunakan keduanya, tergantung pada kebutuhan Aplikasi yang ingin saya bangun. Untuk sebagian besar proyek (sederhana), saya akan merekomendasikan penggunaan MPMoviePlayerControllerover AVPlayerkarena sangat mudah digunakan dan hanya dengan beberapa baris kode, Anda mendapatkan pemutar media yang lengkap. Dan jika tuntutan Anda pada pemutaran media bahkan lebih sederhana, lihatlah MPMoviePlayerViewController(perhatikan bahwa View-part).

Sampai
sumber
2
AVPlayer juga secara otomatis memungkinkan Anda menggunakan animasi lapisan. Jika Anda ingin menjalankan Animasi Inti di latar belakang, jangan gunakan MPMoviePlayerController, meskipun mungkin memiliki pengaturan untuk mengaktifkannya, ketahuilah bahwa jika Anda menggunakan hal
Stephen J
3
Tidak. Jawabannya benar. MPMoviePlayerController UI dapat dinonaktifkan dan atau diganti dengan yang khusus.
Dave Batton
1
@Besi no, sepenuhnya benar seperti yang tertulis - ini pasti dapat dinonaktifkan (menggunakan MPMovieControlStyleNone) dan karenanya diganti karena tidak ada yang menghentikan Anda untuk menambahkan tampilan Anda sendiri sebagai saudara dari tampilan MPMoviePlayerController atau langsung pada tampilan backgroundView.
Hingga
8
Mulai iOS 9, MPMoviePlayerController tidak digunakan lagi, jadi Anda harus menggunakan AVPlayer untuk proyek mendatang
lewis
1
Itu adalah informasi yang sangat berharga @ lewis42 - akan menambahkannya ke posting kuno saya :)
Hingga