LƯU Ý như của iOS9, Apple đã phản đối các MPMoviePlayerController:
Lớp MPMoviePlayerController được chính thức phản đối trong iOS 9. (. Lớp MPMoviePlayerViewController cũng được chính thức phản đối) Để phát nội dung video trong iOS 9 và sau đó, thay vào đó sử dụng lớp AVPictureInPictureController hoặc AVPlayerViewController từ khung công tác AVKit hoặc lớp WKWebView từ WebKit.
Được sao chép từ MPMoviePlayerController reference.
AVPlayer
AVPlayer
cung cấp cho bạn rất nhiều linh hoạt hơn nhưng khá kém tài liệu. Sử dụng API này sẽ buộc bạn phải tạo giao diện người dùng của riêng mình. AVFoundation
(khung mang đến cho bạn AVPlayer
) nói chung là một chút khó khăn đối với người dùng (coder) vì nó buộc bạn phải sử dụng Key-Value Observing rất nhiều để kiểm tra trạng thái. Khái niệm về KVO là tuyệt vời, đừng làm cho tôi sai - vẫn còn, cho các nhà phát triển không có kinh nghiệm nó có thể được đau đớn để tìm hiểu. Đôi khi Apple bỏ qua thông tin về các thuộc tính thực sự tuân thủ KVO và điều đó sẽ buộc bạn phải thực hiện một số thử nghiệm.
Một lợi thế lớn của AVPlayer
trên MPMoviePlayerController
chẳng hạn như phiên bản mở rộng, AVQueuePlayer
vì phiên bản đó có thể phát lại nhiều nguồn phim. Một ưu điểm khác chắc chắn là tính năng phong phú khung hình AVFoundation
cho phép bạn làm những việc như thành phần phim/mã hóa/chuyển đổi đang hoạt động.
Tuy nhiên, một lợi thế lớn khác của AVPlayer
là thực tế rằng bạn thực sự có thể phát nhiều nguồn video đồng thời (ví dụ: cạnh nhau) mà không gặp bất kỳ sự cố nào.
MPMoviePlayerController
MPMoviePlayerController
là dễ sử dụng và bao gồm hầu hết nhu cầu ra khỏi hộp. Sử dụng API này sẽ cung cấp cho bạn giao diện người dùng có giao diện đẹp và được hiểu rõ. Tuy nhiên, giao diện người dùng có thể bị tắt và được thay thế bằng giao diện người dùng tùy chỉnh.
Để thay đổi trạng thái, MPMoviePlayerController
sử dụng một số ít NSNotifications
bao gồm mọi thứ mà ứng dụng thông thường cần.
Dưới mui xe, MPMoviePlayerController
được xây dựng trên đầu trang AVPlayer
- nhưng điều đó thực sự xảy ra hoàn toàn minh bạch cho người dùng - bạn không có quyền truy cập vào lớp đó khi đang sử dụng MPMoviePlayerController
.
MPMoviePlayerController
sử dụng lớp lót AVPlayer
làm trường hợp đơn lẻ, do đó không thể sử dụng nhiều phiên bản MPMoviePlayerController
để phát video đồng thời.
Mặt khác, ngay khi bạn đang cố gắng mở rộng chức năng của MPMoviePlayerController
với các tính năng của riêng bạn, mã nhanh chóng trở nên khó chịu - ví dụ:bạn có thể bắt đầu sử dụng nhiều bộ tính giờ để bao gồm những thứ như phát hiện chết đói đúng cách (thực tế, tính năng này được đưa vào phiên bản iOS5 của lớp này), cập nhật giao diện người dùng tùy chỉnh, ... Hoặc bạn có thể có nhiều hơn một số trạng thái các thuộc tính cố gắng bao gồm những thứ như xóa bỏ hoàn toàn việc phát lại trong khi trình phát vẫn đang lưu vào bộ đệm trước.
Khuyến nghị cá nhân
Tôi đã sử dụng cả hai và tôi sẽ tiếp tục sử dụng cả hai, tùy thuộc vào nhu cầu của App Tôi có những niềm vui để xây dựng. Đối với hầu hết các dự án (đơn giản), tôi khuyên bạn nên sử dụng MPMoviePlayerController
trên AVPlayer
vì nó rất đơn giản để sử dụng và chỉ với một vài dòng mã, bạn sẽ có được một trình phát đa phương tiện. Và nếu nhu cầu phát lại phương tiện truyền thông của bạn thậm chí còn đơn giản hơn, hãy xem tại MPMoviePlayerViewController
(lưu ý rằng phần Xem).
Cố gắng viết lại câu hỏi này để đảm bảo câu hỏi đó không tạo ra các câu trả lời dựa trên ý kiến. – Till