Tôi đang phát triển một ứng dụng iPhone cần phát video. Cho đến nay, tôi biết được rằng có ít nhất hai API để đạt được điều này; AVPlayer
và MPMoviePlayerController
.
Cái gì là sự khác biệt chính?
Tôi đang phát triển một ứng dụng iPhone cần phát video. Cho đến nay, tôi biết được rằng có ít nhất hai API để đạt được điều này; AVPlayer
và MPMoviePlayerController
.
Cái gì là sự khác biệt chính?
Câu trả lời:
LƯU Ý kể từ iOS9, Apple đã ngừng sử dụng MPMoviePlayerController:
Lớp MPMoviePlayerController chính thức không được chấp nhận trong iOS 9. (Lớp MPMoviePlayerViewController cũng chính thức không được dùng nữa.) Để phát nội dung video trong iOS 9 trở lên, thay vào đó hãy sử dụng lớp AVPictureInPictureController hoặc AVPlayerViewController từ khung AVKit hoặc lớp WKWebView từ WebKit.
Được sao chép từ tham chiếu MPMoviePlayerController .
AVPlayer
mang lại cho bạn sự linh hoạt hơn rất nhiều nhưng được ghi chép lại khá kém. Việc 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 công tác mang lại cho bạn AVPlayer
) nhìn chung hơi khó đối với người dùng (lập trình viên) vì nó buộc bạn phải sử dụng Quan sát giá trị chính rất nhiều để kiểm tra trạng thái. Khái niệm về KVO thật tuyệt vời, đừng hiểu sai ý tôi - tuy nhiên, đối với các nhà phát triển chưa có kinh nghiệm, việc học có thể rất khó khăn. Apple đôi khi bỏ qua thông tin về các thuộc tính nào 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.
Ví dụ, một lợi thế lớn của AVPlayer
over MPMoviePlayerController
sẽ là phiên bản mở rộng của nó, AVQueuePlayer
vì nó có thể phát lại nhiều nguồn phim một cách dễ dàng. Một ưu điểm khác chắc chắn là AVFoundation
khung công tác phong phú về tính năng cho phép bạn thực hiện những việc như lập / mã hóa / chuyển đổi phim nhanh chóng.
Tuy nhiên, một lợi thế lớn khác của AVPlayer
thực tế là 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ỳ vấn đề gì.
MPMoviePlayerController
rất dễ sử dụng và đáp ứng hầu hết các nhu cầu ra khỏi hộp. Sử dụng API này sẽ cung cấp cho bạn một giao diện người dùng đẹp và dễ hiểu. Tuy nhiên, giao diện người dùng có thể bị vô hiệu hóa hoặc thay thế bằng giao diện người dùng tùy chỉnh.
Đối với các thay đổi trạng thái, hãy MPMoviePlayerController
sử dụng một số NSNotifications
thứ bao gồm mọi thứ mà Ứng dụng thông thường cần.
Dưới mui xe, các MPMoviePlayerController
bản dựng trên AVPlayer
- nhưng điều đó thực sự xảy ra hoàn toàn trong suốt đối với người dùng - bạn không có quyền truy cập vào lớp đó trong khi sử dụng MPMoviePlayerController
.
MPMoviePlayerController
sử dụng lớp dưới AVPlayer
như một phiên bản singleton, 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 sau khi bạn đang cố gắng mở rộng chức năng của MPMoviePlayerController
các tính năng của riêng mình, mã nhanh chóng trở nên khó chịu - ví dụ: bạn có thể sẽ bắt đầu sử dụng nhiều bộ hẹn giờ để bao gồm những thứ như phát hiện chết đói thích hợp (thực ra, tính năng đó đã được 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 thuộc tính trạng thái cố gắng che những thứ như hủy phát lại một cách duyên dáng trong khi trình phát vẫn đang lưu vào bộ đệm trước.
Đề 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 Ứng dụng mà tôi sẵn lòng 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
over 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 chính thức. Và nếu nhu cầu của bạn về phát lại phương tiện thậm chí còn đơn giản hơn, hãy xem qua MPMoviePlayerViewController
(lưu ý rằng Phần xem).
backgroundView
.